From c3334d86b35685c8a2f263f285c898dea92eaf4a Mon Sep 17 00:00:00 2001 From: vcaesar Date: Wed, 4 Dec 2019 10:08:09 -0400 Subject: [PATCH 1/2] add all platform system scale support --- robotgo.go | 6 ++++++ window/win_sys.h | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/robotgo.go b/robotgo.go index c05fe55..28b6568 100644 --- a/robotgo.go +++ b/robotgo.go @@ -214,6 +214,12 @@ func ScaleX() int { return int(C.scale_x()) } +// SysScale get the sys scale +func SysScale() float64 { + s := C.sys_scale() + return float64(s) +} + // ScaleY get primary display vertical DPI scale factor func ScaleY() int { return int(C.scale_y()) diff --git a/window/win_sys.h b/window/win_sys.h index 89c72ce..f002c9a 100644 --- a/window/win_sys.h +++ b/window/win_sys.h @@ -27,6 +27,39 @@ intptr scaleX(){ #endif } +double sys_scale() { + #if defined(IS_MACOSX) + + CGDirectDisplayID displayID = CGMainDisplayID(); + CGDisplayModeRef modeRef = CGDisplayCopyDisplayMode(displayID); + + double pixelWidth = CGDisplayModeGetPixelWidth(modeRef); + double targetWidth = CGDisplayModeGetWidth(modeRef); + + return pixelWidth / targetWidth; + #elif defined(USE_X11) + + double xres; + Display *dpy; + + char *displayname = NULL; + int scr = 0; /* Screen number */ + + if( (NULL == x) || (NULL == y)){ return ; } + + dpy = XOpenDisplay (displayname); + xres = ((((double) DisplayWidth(dpy, scr)) * 25.4) / + ((double) DisplayWidthMM(dpy, scr))); + + XCloseDisplay (dpy); + + return xres + 0.5; + #elif defined(IS_WINDOWS) + double s = scaleX() / 96.0; + return s; + #endif +} + intptr scaleY(){ #if defined(IS_MACOSX) return 0; From 10a550d9da75b3b13c0c312f7745eecda8734626 Mon Sep 17 00:00:00 2001 From: vcaesar Date: Wed, 4 Dec 2019 10:12:33 -0400 Subject: [PATCH 2/2] remove unused code fixed x11 build error --- window/win_sys.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/window/win_sys.h b/window/win_sys.h index f002c9a..4795d77 100644 --- a/window/win_sys.h +++ b/window/win_sys.h @@ -45,8 +45,6 @@ double sys_scale() { char *displayname = NULL; int scr = 0; /* Screen number */ - if( (NULL == x) || (NULL == y)){ return ; } - dpy = XOpenDisplay (displayname); xres = ((((double) DisplayWidth(dpy, scr)) * 25.4) / ((double) DisplayWidthMM(dpy, scr)));