From 06483c9479fb0fc80d02e0a8a14c508a20bd4f42 Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Mon, 6 Apr 2026 11:49:07 +0200 Subject: [PATCH 1/2] Fixed gtk --- uppsrc/CtrlCore/GtkCustomBar.cpp | 4 ++-- uppsrc/ide/IconDes/Paint.cpp | 4 ---- uppsrc/ide/MainConfig.cpp | 1 - upptst/IMLScale/a.iml | 1 - 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/uppsrc/CtrlCore/GtkCustomBar.cpp b/uppsrc/CtrlCore/GtkCustomBar.cpp index 523c2a89b..8c454bceb 100644 --- a/uppsrc/CtrlCore/GtkCustomBar.cpp +++ b/uppsrc/CtrlCore/GtkCustomBar.cpp @@ -68,12 +68,12 @@ void TopWindow::Init() int Ctrl::GetGtkTitleBarHeight(const TopWindow *tw) { - return max(tw->custom_titlebar_cy, IsUHDMode() ? 60 : 31); + return max(tw->custom_titlebar_cy, DPI(31)); } int Ctrl::GetGtkTitleBarButtonWidth() { - return IsUHDMode() ? 94 : 47; + return DPI(47); } void TopWindow::SyncIcons() diff --git a/uppsrc/ide/IconDes/Paint.cpp b/uppsrc/ide/IconDes/Paint.cpp index 7ef2d1d1d..a55a42975 100644 --- a/uppsrc/ide/IconDes/Paint.cpp +++ b/uppsrc/ide/IconDes/Paint.cpp @@ -31,11 +31,7 @@ void IconShow::Paint(Draw& w) return DPISmartRescale(image, scale * image.GetSize() / image_scale); }; - Size sz100 = GetSize(DPI_100); - Size sz150 = GetSize(DPI_150); - Size sz200 = GetSize(DPI_200); Size sz300 = GetSize(DPI_300); - if(sz300.cx * sz300.cy > 20000) { w.DrawRect(sz, SColorPaper); w.DrawImage(DPI(5), DPI(5), image); diff --git a/uppsrc/ide/MainConfig.cpp b/uppsrc/ide/MainConfig.cpp index 3de281983..04550e85f 100644 --- a/uppsrc/ide/MainConfig.cpp +++ b/uppsrc/ide/MainConfig.cpp @@ -233,7 +233,6 @@ MainConfigDlg::MainConfigDlg(const Workspace& wspc_) : wspc(wspc_) { append.SetImage(IdeImg::add()) << [=] { FlagsDlg cfg; if(cfg.Run() == IDOK) { - int q = config.GetCount(); cfg.Set(config.Add()); LoadList(config.GetCount() - 1); } diff --git a/upptst/IMLScale/a.iml b/upptst/IMLScale/a.iml index 53545c392..10d55eb59 100644 --- a/upptst/IMLScale/a.iml +++ b/upptst/IMLScale/a.iml @@ -1,2 +1 @@ PREMULTIPLIED -VERSION(20260403) From bf0d63759470feefcc78d2848ff36b027f4afd8c Mon Sep 17 00:00:00 2001 From: Mirek Fidler Date: Mon, 6 Apr 2026 22:19:09 +0200 Subject: [PATCH 2/2] Fixed MACOS --- uppsrc/CtrlCore/CocoApp.mm | 18 +++++++++--------- uppsrc/CtrlCore/CocoCtrl.h | 6 ++++++ uppsrc/CtrlCore/CocoDraw.mm | 5 +++-- uppsrc/CtrlCore/CocoImage.mm | 9 +++------ uppsrc/CtrlCore/CocoMM.h | 7 ++----- uppsrc/CtrlLib/ChCocoMM.mm | 5 +++-- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/uppsrc/CtrlCore/CocoApp.mm b/uppsrc/CtrlCore/CocoApp.mm index 66d36fa59..43c5599af 100644 --- a/uppsrc/CtrlCore/CocoApp.mm +++ b/uppsrc/CtrlCore/CocoApp.mm @@ -73,6 +73,9 @@ extern const char *sClipFmtsRTF; id menubar; +double Ctrl::display_scale = 1; +double Ctrl::display_unscale = 1; + void CocoInit(int argc, const char **argv, const char **envptr) { Ctrl::GlobalBackBuffer(); @@ -102,16 +105,13 @@ void CocoInit(int argc, const char **argv, const char **envptr) Font::SetFace(0, ToString((CFStringRef)[sysfont familyName]), Font::TTF); Ctrl::SetUHDEnabled(true); - bool uhd = true; - for (NSScreen *screen in [NSScreen screens]) { - if([screen backingScaleFactor] < 2) { - uhd = false; - break; - } - } - SetUHDMode(uhd); + Ctrl::display_scale = 1; + for (NSScreen *screen in [NSScreen screens]) + Ctrl::display_scale = max(Ctrl::display_scale, [screen backingScaleFactor]); + + Ctrl::display_unscale = 1 / Ctrl::display_scale; - Font::SetDefaultFont(StdFont(fceil(DPI([sysfont pointSize])))); + Font::SetDefaultFont(StdFont(fceil(Ctrl::display_scale * [sysfont pointSize]))); GUI_DblClickTime_Write(1000 * NSEvent.doubleClickInterval); diff --git a/uppsrc/CtrlCore/CocoCtrl.h b/uppsrc/CtrlCore/CocoCtrl.h index aa215a04e..7bceccd1d 100644 --- a/uppsrc/CtrlCore/CocoCtrl.h +++ b/uppsrc/CtrlCore/CocoCtrl.h @@ -6,8 +6,12 @@ private: static Ptr lastActive; static bool always_use_bundled_icon; + + static double display_scale; + static double display_unscale; friend void CocoInit(int argc, const char **argv, const char **envptr); + friend void Coco_PaintCh(void *cgcontext, int type, int value, int state); protected: virtual void MMClose() {} @@ -33,3 +37,5 @@ public: void RegisterCocoaDropFormats(); static Rect GetScreenArea(Point pt); + static double GetDisplayScale() { return display_scale; } + static double GetDisplayUnScale() { return display_unscale; } diff --git a/uppsrc/CtrlCore/CocoDraw.mm b/uppsrc/CtrlCore/CocoDraw.mm index e6c5c20e9..aae95925f 100644 --- a/uppsrc/CtrlCore/CocoDraw.mm +++ b/uppsrc/CtrlCore/CocoDraw.mm @@ -12,8 +12,9 @@ void SystemDraw::Init(void *cgContext, void *view) CGContextSetBlendMode(cgHandle, kCGBlendModeNormal); CGContextSetTextPosition(cgHandle, 0, 0); CGContextSetTextDrawingMode(cgHandle, kCGTextFill); - if(IsUHDMode()) - CGContextScaleCTM(cgHandle, 0.5, 0.5); + double sc = Ctrl::GetDisplayUnScale(); + if(sc != 1) + CGContextScaleCTM(cgHandle, sc, sc); } SystemDraw::SystemDraw(void *cgContext, void *nsview) diff --git a/uppsrc/CtrlCore/CocoImage.mm b/uppsrc/CtrlCore/CocoImage.mm index ee5cfd5ae..d3db18d95 100644 --- a/uppsrc/CtrlCore/CocoImage.mm +++ b/uppsrc/CtrlCore/CocoImage.mm @@ -329,12 +329,9 @@ void ImageDraw::Init(int cx, int cy) colorSpace, kCGImageAlphaPremultipliedFirst, NULL, NULL), NULL); CGContextTranslateCTM(cgHandle, 0, cy); - if(IsUHDMode()) { - CGContextScaleCTM(cgHandle, 2, -2); - CGContextTranslateCTM(cgHandle, 0, -cy / 2.0); - } - else - CGContextScaleCTM(cgHandle, 1, -1); + double sc = Ctrl::GetDisplayScale(); + CGContextScaleCTM(cgHandle, sc, -sc); + CGContextTranslateCTM(cgHandle, 0, -cy / sc); } ImageDraw::ImageDraw(Size sz) diff --git a/uppsrc/CtrlCore/CocoMM.h b/uppsrc/CtrlCore/CocoMM.h index 6ba9eeb6c..cf51ce31d 100644 --- a/uppsrc/CtrlCore/CocoMM.h +++ b/uppsrc/CtrlCore/CocoMM.h @@ -112,11 +112,8 @@ inline Upp::Rect MakeRect(const CGRect& r, int dpi) { } inline CGRect CGRectDPI(const Upp::Rect& r) { - double sc = GetDPIUnScaleRatio(); - if(Upp::IsUHDMode()) - return CGRectMake(sc * r.left, sc * r.top, sc * r.GetWidth(), sc * r.GetHeight()); - else - return CGRectMake(r.left, r.top, r.GetWidth(), r.GetHeight()); + double sc = Upp::GetDPIUnScaleRatio(); + return CGRectMake(sc * r.left, sc * r.top, sc * r.GetWidth(), sc * r.GetHeight()); } #endif diff --git a/uppsrc/CtrlLib/ChCocoMM.mm b/uppsrc/CtrlLib/ChCocoMM.mm index 96e5b968c..d00d551e2 100644 --- a/uppsrc/CtrlLib/ChCocoMM.mm +++ b/uppsrc/CtrlLib/ChCocoMM.mm @@ -17,8 +17,9 @@ void Coco_PaintCh(void *cgcontext, int type, int value, int state) { auto dopaint = [&] { auto cg = (CGContextRef) cgcontext; - if(Upp::IsUHDMode()) - CGContextScaleCTM(cg, 2, 2); + double sc = Upp::Ctrl::GetDisplayScale(); + if(sc != 1) + CGContextScaleCTM(cg, sc, sc); CGRect cr = CGRectMake(0, 0, 140, 140); if(type == COCO_NSCOLOR) { CGContextSaveGState(cg);