diff options
author | Moonchild <moonchild@palemoon.org> | 2020-10-06 09:23:59 +0000 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2020-10-06 09:32:13 +0000 |
commit | 1e8d07cac205a5db3d7d416d7f414a213fd892ff (patch) | |
tree | 60452c5f39b8dc60a8e97454d4103baf2cd194ae /widget/windows/WinUtils.cpp | |
parent | e7a0013f81b1b73979f8673fd0ed88833c8f6313 (diff) | |
download | UXP-1e8d07cac205a5db3d7d416d7f414a213fd892ff.tar UXP-1e8d07cac205a5db3d7d416d7f414a213fd892ff.tar.gz UXP-1e8d07cac205a5db3d7d416d7f414a213fd892ff.tar.lz UXP-1e8d07cac205a5db3d7d416d7f414a213fd892ff.tar.xz UXP-1e8d07cac205a5db3d7d416d7f414a213fd892ff.zip |
Issue #1606 - Add support for multi-monitor DPI awareness v2 (W10 1706+)
Diffstat (limited to 'widget/windows/WinUtils.cpp')
-rw-r--r-- | widget/windows/WinUtils.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/widget/windows/WinUtils.cpp b/widget/windows/WinUtils.cpp index 28033193f..a43c92b69 100644 --- a/widget/windows/WinUtils.cpp +++ b/widget/windows/WinUtils.cpp @@ -449,10 +449,20 @@ WinUtils::Initialize() if (IsWin10OrLater()) { HMODULE user32Dll = ::GetModuleHandleW(L"user32"); if (user32Dll) { - sEnableNonClientDpiScaling = (EnableNonClientDpiScalingProc) - ::GetProcAddress(user32Dll, "EnableNonClientDpiScaling"); - sSetThreadDpiAwarenessContext = (SetThreadDpiAwarenessContextProc) - ::GetProcAddress(user32Dll, "SetThreadDpiAwarenessContext"); + auto getThreadDpiAwarenessContext = (decltype(GetThreadDpiAwarenessContext)*) + ::GetProcAddress(user32Dll, "GetThreadDpiAwarenessContext"); + auto areDpiAwarenessContextsEqual = (decltype(AreDpiAwarenessContextsEqual)*) + ::GetProcAddress(user32Dll, "AreDpiAwarenessContextsEqual"); + if (getThreadDpiAwarenessContext && areDpiAwarenessContextsEqual && + areDpiAwarenessContextsEqual(getThreadDpiAwarenessContext(), + DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE)) { + // Only per-monitor DPI awareness v1 requires these workarounds. + // Since this was introduced in Win 8.1 we'll need to keep this indefinitely. + sEnableNonClientDpiScaling = (EnableNonClientDpiScalingProc) + ::GetProcAddress(user32Dll, "EnableNonClientDpiScaling"); + sSetThreadDpiAwarenessContext = (SetThreadDpiAwarenessContextProc) + ::GetProcAddress(user32Dll, "SetThreadDpiAwarenessContext"); + } } } @@ -468,7 +478,7 @@ LRESULT WINAPI WinUtils::NonClientDpiScalingDefWindowProcW(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { - if (msg == WM_NCCREATE && sEnableNonClientDpiScaling) { + if (msg == WM_NCCREATE) { sEnableNonClientDpiScaling(hWnd); } return ::DefWindowProcW(hWnd, msg, wParam, lParam); |