Track current window DPI
The WM_DPICHANGED event gives us the new DPI, but we also need the current DPI in order to determine the scale factor corresponding to the DPI change. Pick-to: 6.2 Change-Id: Ia61388415f57aa739397d3125b8751952e8fd392 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
This commit is contained in:
parent
7d7b484429
commit
f988386560
@ -218,6 +218,7 @@ void QWindowsUser32DLL::init()
|
|||||||
getWindowDpiAwarenessContext = (GetWindowDpiAwarenessContext)library.resolve("GetWindowDpiAwarenessContext");
|
getWindowDpiAwarenessContext = (GetWindowDpiAwarenessContext)library.resolve("GetWindowDpiAwarenessContext");
|
||||||
getAwarenessFromDpiAwarenessContext = (GetAwarenessFromDpiAwarenessContext)library.resolve("GetAwarenessFromDpiAwarenessContext");
|
getAwarenessFromDpiAwarenessContext = (GetAwarenessFromDpiAwarenessContext)library.resolve("GetAwarenessFromDpiAwarenessContext");
|
||||||
systemParametersInfoForDpi = (SystemParametersInfoForDpi)library.resolve("SystemParametersInfoForDpi");
|
systemParametersInfoForDpi = (SystemParametersInfoForDpi)library.resolve("SystemParametersInfoForDpi");
|
||||||
|
getDpiForWindow = (GetDpiForWindow)library.resolve("GetDpiForWindow");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1474,6 +1475,10 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message,
|
|||||||
#endif
|
#endif
|
||||||
} break;
|
} break;
|
||||||
case QtWindows::DpiChangedEvent: {
|
case QtWindows::DpiChangedEvent: {
|
||||||
|
|
||||||
|
const UINT dpi = HIWORD(wParam);
|
||||||
|
platformWindow->setSavedDpi(dpi);
|
||||||
|
|
||||||
// Try to apply the suggested size first and then notify ScreenChanged
|
// Try to apply the suggested size first and then notify ScreenChanged
|
||||||
// so that the resize event sent from QGuiApplication incorporates it
|
// so that the resize event sent from QGuiApplication incorporates it
|
||||||
// WM_DPICHANGED is sent with a size that avoids resize loops (by
|
// WM_DPICHANGED is sent with a size that avoids resize loops (by
|
||||||
|
@ -108,6 +108,7 @@ struct QWindowsUser32DLL
|
|||||||
typedef int (WINAPI *GetWindowDpiAwarenessContext)(HWND);
|
typedef int (WINAPI *GetWindowDpiAwarenessContext)(HWND);
|
||||||
typedef int (WINAPI *GetAwarenessFromDpiAwarenessContext)(int);
|
typedef int (WINAPI *GetAwarenessFromDpiAwarenessContext)(int);
|
||||||
typedef BOOL (WINAPI *SystemParametersInfoForDpi)(UINT, UINT, PVOID, UINT, UINT);
|
typedef BOOL (WINAPI *SystemParametersInfoForDpi)(UINT, UINT, PVOID, UINT, UINT);
|
||||||
|
typedef int (WINAPI *GetDpiForWindow)(HWND);
|
||||||
|
|
||||||
// Windows pointer functions (Windows 8 or later).
|
// Windows pointer functions (Windows 8 or later).
|
||||||
EnableMouseInPointer enableMouseInPointer = nullptr;
|
EnableMouseInPointer enableMouseInPointer = nullptr;
|
||||||
@ -124,6 +125,9 @@ struct QWindowsUser32DLL
|
|||||||
// Windows Vista onwards
|
// Windows Vista onwards
|
||||||
SetProcessDPIAware setProcessDPIAware = nullptr;
|
SetProcessDPIAware setProcessDPIAware = nullptr;
|
||||||
|
|
||||||
|
// Windows 10 version 1607 onwards
|
||||||
|
GetDpiForWindow getDpiForWindow = nullptr;
|
||||||
|
|
||||||
// Windows 10 version 1703 onwards
|
// Windows 10 version 1703 onwards
|
||||||
SetProcessDpiAwarenessContext setProcessDpiAwarenessContext = nullptr;
|
SetProcessDpiAwarenessContext setProcessDpiAwarenessContext = nullptr;
|
||||||
|
|
||||||
|
@ -1419,6 +1419,8 @@ void QWindowsWindow::initialize()
|
|||||||
if (obtainedScreen && screen() != obtainedScreen)
|
if (obtainedScreen && screen() != obtainedScreen)
|
||||||
QWindowSystemInterface::handleWindowScreenChanged<QWindowSystemInterface::SynchronousDelivery>(w, obtainedScreen->screen());
|
QWindowSystemInterface::handleWindowScreenChanged<QWindowSystemInterface::SynchronousDelivery>(w, obtainedScreen->screen());
|
||||||
}
|
}
|
||||||
|
QWindowsWindow::setSavedDpi(QWindowsContext::user32dll.getDpiForWindow ?
|
||||||
|
QWindowsContext::user32dll.getDpiForWindow(handle()) : 96);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSurfaceFormat QWindowsWindow::format() const
|
QSurfaceFormat QWindowsWindow::format() const
|
||||||
|
@ -372,6 +372,9 @@ public:
|
|||||||
static const char *embeddedNativeParentHandleProperty;
|
static const char *embeddedNativeParentHandleProperty;
|
||||||
static const char *hasBorderInFullScreenProperty;
|
static const char *hasBorderInFullScreenProperty;
|
||||||
|
|
||||||
|
void setSavedDpi(int dpi) { m_savedDpi = dpi; }
|
||||||
|
int savedDpi() const { return m_savedDpi; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline void show_sys() const;
|
inline void show_sys() const;
|
||||||
inline QWindowsWindowData setWindowFlags_sys(Qt::WindowFlags wt, unsigned flags = 0) const;
|
inline QWindowsWindowData setWindowFlags_sys(Qt::WindowFlags wt, unsigned flags = 0) const;
|
||||||
@ -405,6 +408,7 @@ private:
|
|||||||
HICON m_iconSmall = nullptr;
|
HICON m_iconSmall = nullptr;
|
||||||
HICON m_iconBig = nullptr;
|
HICON m_iconBig = nullptr;
|
||||||
void *m_surface = nullptr;
|
void *m_surface = nullptr;
|
||||||
|
int m_savedDpi = 96;
|
||||||
|
|
||||||
static bool m_screenForGLInitialized;
|
static bool m_screenForGLInitialized;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user