From d86f96503f6c71695b5c6e7a4df7df28e95e7c02 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sun, 7 Jun 2020 17:49:04 +0200 Subject: [PATCH] app/internal/window: [macOS] fix window sizes for unit.Px values Signed-off-by: Elias Naur --- app/internal/window/os_macos.go | 8 ++++++-- app/internal/window/os_macos.m | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/internal/window/os_macos.go b/app/internal/window/os_macos.go index 6ca473f7..86cbed44 100644 --- a/app/internal/window/os_macos.go +++ b/app/internal/window/os_macos.go @@ -35,6 +35,7 @@ __attribute__ ((visibility ("hidden"))) void gio_main(void); __attribute__ ((visibility ("hidden"))) CGFloat gio_viewWidth(CFTypeRef viewRef); __attribute__ ((visibility ("hidden"))) CGFloat gio_viewHeight(CFTypeRef viewRef); __attribute__ ((visibility ("hidden"))) CGFloat gio_getViewBackingScale(CFTypeRef viewRef); +__attribute__ ((visibility ("hidden"))) CGFloat gio_getScreenBackingScale(void); __attribute__ ((visibility ("hidden"))) CFTypeRef gio_readClipboard(void); __attribute__ ((visibility ("hidden"))) void gio_writeClipboard(unichar *chars, NSUInteger length); __attribute__ ((visibility ("hidden"))) void gio_setNeedsDisplay(CFTypeRef viewRef); @@ -298,10 +299,13 @@ func NewWindow(win Callbacks, opts *Options) error { errch <- err return } - // Window sizes is in unscaled screen coordinates, not device pixels. - cfg := configFor(1.0) + screenScale := float32(C.gio_getScreenBackingScale()) + cfg := configFor(screenScale) width := cfg.Px(opts.Width) height := cfg.Px(opts.Height) + // Window sizes is in unscaled screen coordinates, not device pixels. + width = int(float32(width) / screenScale) + height = int(float32(height) / screenScale) title := C.CString(opts.Title) defer C.free(unsafe.Pointer(title)) errch <- nil diff --git a/app/internal/window/os_macos.m b/app/internal/window/os_macos.m index 67ea8535..942da09a 100644 --- a/app/internal/window/os_macos.m +++ b/app/internal/window/os_macos.m @@ -77,6 +77,10 @@ CGFloat gio_viewWidth(CFTypeRef viewRef) { return [view bounds].size.width; } +CGFloat gio_getScreenBackingScale(void) { + return [NSScreen.mainScreen backingScaleFactor]; +} + CGFloat gio_getViewBackingScale(CFTypeRef viewRef) { NSView *view = (__bridge NSView *)viewRef; return [view.window backingScaleFactor];