From 4ce7dec3e96b00de05acb29e15939a9c460113e0 Mon Sep 17 00:00:00 2001 From: falkTX Date: Thu, 19 Aug 2021 12:53:09 +0100 Subject: [PATCH] Implement puglGetDesktopScaleFactor for windows Signed-off-by: falkTX --- dgl/src/pugl.cpp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp index a835f1bb..6f682cb2 100644 --- 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(scaleFactor) / 100.0; + } + + FreeLibrary(Shcore); + } #elif defined(HAVE_X11) XrmInitialize();