diff --git a/uppsrc/CtrlCore/CocoApp.mm b/uppsrc/CtrlCore/CocoApp.mm index f36e760f4..6b1b855d9 100644 --- a/uppsrc/CtrlCore/CocoApp.mm +++ b/uppsrc/CtrlCore/CocoApp.mm @@ -293,7 +293,7 @@ Rect Ctrl::GetWorkArea() const Rect MakeScreenRect(NSScreen *screen, CGRect r) { 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& rc) diff --git a/uppsrc/CtrlCore/CocoCtrl.h b/uppsrc/CtrlCore/CocoCtrl.h index 7bceccd1d..38fd07976 100644 --- a/uppsrc/CtrlCore/CocoCtrl.h +++ b/uppsrc/CtrlCore/CocoCtrl.h @@ -39,3 +39,4 @@ public: static Rect GetScreenArea(Point pt); static double GetDisplayScale() { return display_scale; } static double GetDisplayUnScale() { return display_unscale; } + static int SCL(int x) { return (int)(display_scale * x); } diff --git a/uppsrc/CtrlCore/CocoDraw.mm b/uppsrc/CtrlCore/CocoDraw.mm index aae95925f..a19d8a62b 100644 --- a/uppsrc/CtrlCore/CocoDraw.mm +++ b/uppsrc/CtrlCore/CocoDraw.mm @@ -153,7 +153,7 @@ bool SystemDraw::IsPaintingOp(const Rect& r) const if(cr.IsEmpty()) return false; 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 diff --git a/uppsrc/CtrlCore/CocoMM.h b/uppsrc/CtrlCore/CocoMM.h index cf51ce31d..9f48ae945 100644 --- a/uppsrc/CtrlCore/CocoMM.h +++ b/uppsrc/CtrlCore/CocoMM.h @@ -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); } -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 diff --git a/uppsrc/CtrlCore/CocoProc.mm b/uppsrc/CtrlCore/CocoProc.mm index 84d0ad282..fede219cc 100644 --- a/uppsrc/CtrlCore/CocoProc.mm +++ b/uppsrc/CtrlCore/CocoProc.mm @@ -124,7 +124,7 @@ struct MMImp { } NSPoint np = [view convertPoint:[e locationInWindow] fromView:nil]; 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(); if(event == Ctrl::MOUSEMOVE) { @@ -300,7 +300,7 @@ struct MMImp { clip.action = info.draggingSourceOperationMask & NSDragOperationMove ? DND_MOVE : DND_COPY; 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); if(paste && clip.IsAccepted() && clip.GetAction() == DND_COPY) Ctrl::local_dnd_copy = true; @@ -358,7 +358,7 @@ struct MMImp { Upp::GuiLock __; if(ctrl) { 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))); } } diff --git a/uppsrc/CtrlCore/CocoWin.mm b/uppsrc/CtrlCore/CocoWin.mm index 1323964ba..b87931086 100644 --- a/uppsrc/CtrlCore/CocoWin.mm +++ b/uppsrc/CtrlCore/CocoWin.mm @@ -86,7 +86,7 @@ bool Ctrl::IsWndForeground() const NSRect DesktopRect(const Rect& r) { - double scalei = 1.0 / DPI(1); + double scalei = 1.0 / Upp::Ctrl::SCL(1); return NSMakeRect(scalei * r.left, scalei * (Ctrl::GetScreenArea(r.TopLeft()).GetHeight() - r.top - r.GetHeight()), scalei * r.GetWidth(), scalei * r.GetHeight()); @@ -187,6 +187,11 @@ Vector Ctrl::GetTopCtrls() 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) { GuiLock __; @@ -317,7 +322,7 @@ void TopWindow::SyncCaption() CGSize MMFrameSize(Size sz, dword style) { - double scale = 1.0 / DPI(1); + double scale = 1.0 / Upp::Ctrl::SCL(1); return [NSWindow frameRectForContentRect: (NSRect)CGRectMake(100, 100, scale * sz.cx, scale * sz.cy) styleMask:style].size; } diff --git a/uppsrc/CtrlLib/ChCoco.cpp b/uppsrc/CtrlLib/ChCoco.cpp index 1c4066321..6d8842271 100644 --- a/uppsrc/CtrlLib/ChCoco.cpp +++ b/uppsrc/CtrlLib/ChCoco.cpp @@ -140,11 +140,20 @@ void ChHostSkin() SColorPaper_Write(CocoColor(COCO_PAPER)); + if(Atoi(GetEnv("UPP_SCALE__"))) { + if(IsDarkTheme()) + ChDarkSkin(); + else + ChStdSkin(); + return; + } + SColorFace_Write(CocoColor(COCO_WINDOW, White())); SColorHighlight_Write(CocoColor(COCO_SELECTEDPAPER)); SColorHighlightText_Write(CocoColor(COCO_SELECTEDTEXT)); SColorText_Write(CocoColor(COCO_TEXT)); SColorDisabled_Write(CocoColor(COCO_DISABLED)); + ChBaseSkin(); diff --git a/upptst/TestChStyle/main.cpp b/upptst/TestChStyle/main.cpp index 82854cd2e..2449d67da 100644 --- a/upptst/TestChStyle/main.cpp +++ b/upptst/TestChStyle/main.cpp @@ -189,7 +189,9 @@ TestChStyle::TestChStyle() GUI_APP_MAIN { RDUMPM(Environment()); + RDUMP(GetDPIScale()); + RDUMP(GetDPIScaleRatio()); RDUMP(SColorDisabled()); RDUMP(SColorText());