From c3334d86b35685c8a2f263f285c898dea92eaf4a Mon Sep 17 00:00:00 2001 From: vcaesar Date: Wed, 4 Dec 2019 10:08:09 -0400 Subject: [PATCH] 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;