mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 15:23:51 +00:00
Bug 1354020 - Use per-monitor v2 on Creators Update. r=jfkthame
MozReview-Commit-ID: FiO3DupULFu --HG-- extra : rebase_source : f2d2018cb549a07f89e18a42f842886a7ef9c063
This commit is contained in:
parent
be8a77b3bf
commit
ea4c0cc826
@ -35,6 +35,7 @@
|
||||
<ms_asmv3:application xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<ms_asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>True/PM</dpiAware>
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
|
||||
</ms_asmv3:windowsSettings>
|
||||
</ms_asmv3:application>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
@ -29,6 +29,7 @@
|
||||
<ms_asmv3:application xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<ms_asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>True/PM</dpiAware>
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
|
||||
</ms_asmv3:windowsSettings>
|
||||
</ms_asmv3:application>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
@ -35,6 +35,7 @@
|
||||
<ms_asmv3:application xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<ms_asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>True/PM</dpiAware>
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
|
||||
</ms_asmv3:windowsSettings>
|
||||
</ms_asmv3:application>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
@ -29,6 +29,7 @@
|
||||
<ms_asmv3:application xmlns:ms_asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<ms_asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
|
||||
<dpiAware>True/PM</dpiAware>
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2,PerMonitor</dpiAwareness>
|
||||
</ms_asmv3:windowsSettings>
|
||||
</ms_asmv3:application>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
|
@ -444,10 +444,19 @@ 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 v1 requires these workarounds.
|
||||
sEnableNonClientDpiScaling = (EnableNonClientDpiScalingProc)
|
||||
::GetProcAddress(user32Dll, "EnableNonClientDpiScaling");
|
||||
sSetThreadDpiAwarenessContext = (SetThreadDpiAwarenessContextProc)
|
||||
::GetProcAddress(user32Dll, "SetThreadDpiAwarenessContext");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -463,7 +472,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);
|
||||
|
@ -96,6 +96,11 @@ typedef enum DPI_AWARENESS {
|
||||
#define DPI_AWARENESS_CONTEXT_DECLARED
|
||||
#endif // (DPI_AWARENESS_CONTEXT_DECLARED)
|
||||
|
||||
#if WINVER < 0x0605
|
||||
WINUSERAPI DPI_AWARENESS_CONTEXT WINAPI GetThreadDpiAwarenessContext();
|
||||
WINUSERAPI BOOL WINAPI
|
||||
AreDpiAwarenessContextsEqual(DPI_AWARENESS_CONTEXT, DPI_AWARENESS_CONTEXT);
|
||||
#endif /* WINVER < 0x0605 */
|
||||
typedef DPI_AWARENESS_CONTEXT(WINAPI * SetThreadDpiAwarenessContextProc)(DPI_AWARENESS_CONTEXT);
|
||||
typedef BOOL(WINAPI * EnableNonClientDpiScalingProc)(HWND);
|
||||
|
||||
@ -152,6 +157,12 @@ class WinUtils
|
||||
static SetThreadDpiAwarenessContextProc sSetThreadDpiAwarenessContext;
|
||||
static EnableNonClientDpiScalingProc sEnableNonClientDpiScaling;
|
||||
|
||||
// Wrapper for DefWindowProc that will enable non-client dpi scaling on the
|
||||
// window during creation.
|
||||
static LRESULT WINAPI
|
||||
NonClientDpiScalingDefWindowProcW(HWND hWnd, UINT msg,
|
||||
WPARAM wParam, LPARAM lParam);
|
||||
|
||||
public:
|
||||
class AutoSystemDpiAware
|
||||
{
|
||||
@ -174,11 +185,11 @@ public:
|
||||
DPI_AWARENESS_CONTEXT mPrevContext;
|
||||
};
|
||||
|
||||
// Wrapper for DefWindowProc that will enable non-client dpi scaling on the
|
||||
// window during creation.
|
||||
static LRESULT WINAPI
|
||||
NonClientDpiScalingDefWindowProcW(HWND hWnd, UINT msg,
|
||||
WPARAM wParam, LPARAM lParam);
|
||||
static decltype(::DefWindowProcW)* GetDefWindowProc()
|
||||
{
|
||||
return sEnableNonClientDpiScaling ? NonClientDpiScalingDefWindowProcW :
|
||||
::DefWindowProcW;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the system's default logical-to-physical DPI scaling factor,
|
||||
|
@ -1015,7 +1015,7 @@ nsWindow::RegisterWindowClass(const wchar_t* aClassName,
|
||||
}
|
||||
|
||||
wc.style = CS_DBLCLKS | aExtraStyle;
|
||||
wc.lpfnWndProc = WinUtils::NonClientDpiScalingDefWindowProcW;
|
||||
wc.lpfnWndProc = WinUtils::GetDefWindowProc();
|
||||
wc.cbClsExtra = 0;
|
||||
wc.cbWndExtra = 0;
|
||||
wc.hInstance = nsToolkit::mDllInstance;
|
||||
|
Loading…
Reference in New Issue
Block a user