QHD macos fixes

This commit is contained in:
Mirek Fidler 2026-04-29 11:48:46 +02:00
parent 623148b483
commit 601bf3d66f
8 changed files with 24 additions and 12 deletions

View file

@ -293,7 +293,7 @@ Rect Ctrl::GetWorkArea() const
Rect MakeScreenRect(NSScreen *screen, CGRect r) Rect MakeScreenRect(NSScreen *screen, CGRect r)
{ {
r.origin.y = [screen frame].size.height - r.origin.y - r.size.height; r.origin.y = [screen frame].size.height - r.origin.y - r.size.height;
return MakeRect(r, DPI(1)); return MakeRect(r, Upp::Ctrl::SCL(1));
} }
void Ctrl::GetWorkArea(Array<Rect>& rc) void Ctrl::GetWorkArea(Array<Rect>& rc)

View file

@ -39,3 +39,4 @@ public:
static Rect GetScreenArea(Point pt); static Rect GetScreenArea(Point pt);
static double GetDisplayScale() { return display_scale; } static double GetDisplayScale() { return display_scale; }
static double GetDisplayUnScale() { return display_unscale; } static double GetDisplayUnScale() { return display_unscale; }
static int SCL(int x) { return (int)(display_scale * x); }

View file

@ -153,7 +153,7 @@ bool SystemDraw::IsPaintingOp(const Rect& r) const
if(cr.IsEmpty()) if(cr.IsEmpty())
return false; return false;
return true; return true;
return nsview ? [(NSView *)nsview needsToDrawRect:MakeRectCG(1.0 / DPI(1) * cr)] : true; // return nsview ? [(NSView *)nsview needsToDrawRect:MakeRectCG(1.0 / DPI(1) * cr)] : true;
} }
Rect SystemDraw::GetPaintRect() const Rect SystemDraw::GetPaintRect() const

View file

@ -111,11 +111,6 @@ inline Upp::Rect MakeRect(const CGRect& r, int dpi) {
return Upp::RectC(dpi * r.origin.x, dpi * r.origin.y, dpi * r.size.width, dpi * r.size.height); return Upp::RectC(dpi * r.origin.x, dpi * r.origin.y, dpi * r.size.width, dpi * r.size.height);
} }
inline CGRect CGRectDPI(const Upp::Rect& r) {
double sc = Upp::GetDPIUnScaleRatio();
return CGRectMake(sc * r.left, sc * r.top, sc * r.GetWidth(), sc * r.GetHeight());
}
#endif #endif
#endif #endif

View file

@ -124,7 +124,7 @@ struct MMImp {
} }
NSPoint np = [view convertPoint:[e locationInWindow] fromView:nil]; NSPoint np = [view convertPoint:[e locationInWindow] fromView:nil];
Rect r = view->ctrl->GetRect(); Rect r = view->ctrl->GetRect();
Upp::Point p(DPI(np.x), DPI(np.y)); Upp::Point p(Upp::Ctrl::SCL(np.x), Upp::Ctrl::SCL(np.y));
coco_mouse_pos = p + r.TopLeft(); coco_mouse_pos = p + r.TopLeft();
if(event == Ctrl::MOUSEMOVE) { if(event == Ctrl::MOUSEMOVE) {
@ -300,7 +300,7 @@ struct MMImp {
clip.action = info.draggingSourceOperationMask & NSDragOperationMove ? DND_MOVE clip.action = info.draggingSourceOperationMask & NSDragOperationMove ? DND_MOVE
: DND_COPY; : DND_COPY;
NSPoint np = [nsview convertPoint:[info draggingLocation] fromView:nil]; NSPoint np = [nsview convertPoint:[info draggingLocation] fromView:nil];
coco_mouse_pos = Upp::Point(DPI(np.x), DPI(np.y)) + ctrl->GetScreenRect().TopLeft(); coco_mouse_pos = Upp::Point(Upp::Ctrl::SCL(np.x), Upp::Ctrl::SCL(np.y)) + ctrl->GetScreenRect().TopLeft();
ctrl->DnD(coco_mouse_pos, clip); ctrl->DnD(coco_mouse_pos, clip);
if(paste && clip.IsAccepted() && clip.GetAction() == DND_COPY) if(paste && clip.IsAccepted() && clip.GetAction() == DND_COPY)
Ctrl::local_dnd_copy = true; Ctrl::local_dnd_copy = true;
@ -358,7 +358,7 @@ struct MMImp {
Upp::GuiLock __; Upp::GuiLock __;
if(ctrl) { if(ctrl) {
Upp::SystemDraw w([[NSGraphicsContext currentContext] CGContext], self); Upp::SystemDraw w([[NSGraphicsContext currentContext] CGContext], self);
Upp::MMImp::Paint(ctrl, w, MakeRect(r, Upp::DPI(1))); Upp::MMImp::Paint(ctrl, w, MakeRect(r, Upp::Ctrl::SCL(1)));
} }
} }

View file

@ -86,7 +86,7 @@ bool Ctrl::IsWndForeground() const
NSRect DesktopRect(const Rect& r) NSRect DesktopRect(const Rect& r)
{ {
double scalei = 1.0 / DPI(1); double scalei = 1.0 / Upp::Ctrl::SCL(1);
return NSMakeRect(scalei * r.left, return NSMakeRect(scalei * r.left,
scalei * (Ctrl::GetScreenArea(r.TopLeft()).GetHeight() - r.top - r.GetHeight()), scalei * (Ctrl::GetScreenArea(r.TopLeft()).GetHeight() - r.top - r.GetHeight()),
scalei * r.GetWidth(), scalei * r.GetHeight()); scalei * r.GetWidth(), scalei * r.GetHeight());
@ -187,6 +187,11 @@ Vector<Ctrl *> Ctrl::GetTopCtrls()
void WakeUpGuiThread(); void WakeUpGuiThread();
inline CGRect CGRectDPI(const Upp::Rect& r) {
double sc = 1.0 / Upp::Ctrl::SCL(1);
return CGRectMake(sc * r.left, sc * r.top, sc * r.GetWidth(), sc * r.GetHeight());
}
void Ctrl::WndInvalidateRect(const Rect& r) void Ctrl::WndInvalidateRect(const Rect& r)
{ {
GuiLock __; GuiLock __;
@ -317,7 +322,7 @@ void TopWindow::SyncCaption()
CGSize MMFrameSize(Size sz, dword style) CGSize MMFrameSize(Size sz, dword style)
{ {
double scale = 1.0 / DPI(1); double scale = 1.0 / Upp::Ctrl::SCL(1);
return [NSWindow frameRectForContentRect: return [NSWindow frameRectForContentRect:
(NSRect)CGRectMake(100, 100, scale * sz.cx, scale * sz.cy) styleMask:style].size; (NSRect)CGRectMake(100, 100, scale * sz.cx, scale * sz.cy) styleMask:style].size;
} }

View file

@ -140,11 +140,20 @@ void ChHostSkin()
SColorPaper_Write(CocoColor(COCO_PAPER)); SColorPaper_Write(CocoColor(COCO_PAPER));
if(Atoi(GetEnv("UPP_SCALE__"))) {
if(IsDarkTheme())
ChDarkSkin();
else
ChStdSkin();
return;
}
SColorFace_Write(CocoColor(COCO_WINDOW, White())); SColorFace_Write(CocoColor(COCO_WINDOW, White()));
SColorHighlight_Write(CocoColor(COCO_SELECTEDPAPER)); SColorHighlight_Write(CocoColor(COCO_SELECTEDPAPER));
SColorHighlightText_Write(CocoColor(COCO_SELECTEDTEXT)); SColorHighlightText_Write(CocoColor(COCO_SELECTEDTEXT));
SColorText_Write(CocoColor(COCO_TEXT)); SColorText_Write(CocoColor(COCO_TEXT));
SColorDisabled_Write(CocoColor(COCO_DISABLED)); SColorDisabled_Write(CocoColor(COCO_DISABLED));
ChBaseSkin(); ChBaseSkin();

View file

@ -189,7 +189,9 @@ TestChStyle::TestChStyle()
GUI_APP_MAIN GUI_APP_MAIN
{ {
RDUMPM(Environment()); RDUMPM(Environment());
RDUMP(GetDPIScale()); RDUMP(GetDPIScale());
RDUMP(GetDPIScaleRatio());
RDUMP(SColorDisabled()); RDUMP(SColorDisabled());
RDUMP(SColorText()); RDUMP(SColorText());