commit 4ce7dec3e96b00de05acb29e15939a9c460113e0
parent dfc0551579346ebe2dc15bd7fba8b36f6951b94f
Author: falkTX <falktx@falktx.com>
Date: Thu, 19 Aug 2021 12:52:42 +0100
Implement puglGetDesktopScaleFactor for windows
Signed-off-by: falkTX <falktx@falktx.com>
Diffstat:
1 file changed, 24 insertions(+), 0 deletions(-)
diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp
@@ -208,6 +208,30 @@ double puglGetDesktopScaleFactor(const PuglView* const view)
: [view->impl->wrapperView window])
return [window screen].backingScaleFactor;
return [NSScreen mainScreen].backingScaleFactor;
+#elif defined(DISTRHO_OS_WINDOWS)
+ if (const HMODULE Shcore = LoadLibraryA("Shcore.dll"))
+ {
+ typedef HRESULT(WINAPI* PFN_GetProcessDpiAwareness)(HANDLE, DWORD*);
+ typedef HRESULT(WINAPI* PFN_GetScaleFactorForMonitor)(HMONITOR, DWORD*);
+
+ const PFN_GetProcessDpiAwareness GetProcessDpiAwareness
+ = (PFN_GetProcessDpiAwareness)GetProcAddress(Shcore, "GetProcessDpiAwareness");
+ const PFN_GetScaleFactorForMonitor GetScaleFactorForMonitor
+ = (PFN_GetScaleFactorForMonitor)GetProcAddress(Shcore, "GetScaleFactorForMonitor");
+
+ DWORD dpiAware = 0;
+ if (GetProcessDpiAwareness && GetScaleFactorForMonitor
+ && GetProcessDpiAwareness(NULL, &dpiAware) == 0 && dpiAware != 0)
+ {
+ const HMONITOR hMon = MonitorFromWindow(view->impl->hwnd, MONITOR_DEFAULTTOPRIMARY);
+
+ DWORD scaleFactor = 0;
+ if (GetScaleFactorForMonitor(hMon, &scaleFactor) == 0 && scaleFactor != 0)
+ return static_cast<double>(scaleFactor) / 100.0;
+ }
+
+ FreeLibrary(Shcore);
+ }
#elif defined(HAVE_X11)
XrmInitialize();