summaryrefslogtreecommitdiffstats
path: root/widget/windows/WinUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'widget/windows/WinUtils.cpp')
-rw-r--r--widget/windows/WinUtils.cpp20
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);