DPF

DISTRHO Plugin Framework
Log | Files | Refs | Submodules | README | LICENSE

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:
Mdgl/src/pugl.cpp | 24++++++++++++++++++++++++
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();