From 5efb3d3a61c1e2e133e2a0faa9f8318cdfaba27e Mon Sep 17 00:00:00 2001 From: Enrico Giordani Date: Thu, 29 Apr 2021 08:39:12 -0700 Subject: [PATCH] [KBM] scale editor window size based on DPI (#11006) --- src/common/Display/dpi_aware.cpp | 13 +++++++++++++ src/common/Display/dpi_aware.h | 1 + .../EditKeyboardWindow.cpp | 5 +++-- .../EditShortcutsWindow.cpp | 4 ++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/common/Display/dpi_aware.cpp b/src/common/Display/dpi_aware.cpp index da3b0a66ba..63f7424370 100644 --- a/src/common/Display/dpi_aware.cpp +++ b/src/common/Display/dpi_aware.cpp @@ -51,6 +51,19 @@ namespace DPIAware } } + void ConvertByCursorPosition(int& width, int& height) + { + HMONITOR targetMonitor = nullptr; + POINT currentCursorPos{}; + + if (GetCursorPos(¤tCursorPos)) + { + targetMonitor = MonitorFromPoint(currentCursorPos, MONITOR_DEFAULTTOPRIMARY); + } + + Convert(targetMonitor, width, height); + } + void InverseConvert(HMONITOR monitor_handle, int& width, int& height) { if (monitor_handle == NULL) diff --git a/src/common/Display/dpi_aware.h b/src/common/Display/dpi_aware.h index 093994153e..7f1f7b19f5 100644 --- a/src/common/Display/dpi_aware.h +++ b/src/common/Display/dpi_aware.h @@ -10,6 +10,7 @@ namespace DPIAware HRESULT GetScreenDPIForWindow(HWND hwnd, UINT& dpi_x, UINT& dpi_y); HRESULT GetScreenDPIForPoint(POINT p, UINT& dpi_x, UINT& dpi_y); void Convert(HMONITOR monitor_handle, int& width, int& height); + void ConvertByCursorPosition(int& width, int& height); void InverseConvert(HMONITOR monitor_handle, int& width, int& height); void EnableDPIAwarenessForThisProcess(); diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditKeyboardWindow.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditKeyboardWindow.cpp index 3e40b68d41..2265a917d9 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditKeyboardWindow.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditKeyboardWindow.cpp @@ -142,7 +142,8 @@ inline void CreateEditKeyboardWindowImpl(HINSTANCE hInst, KeyboardManagerState& // Calculate DPI dependent window size int windowWidth = KeyboardManagerConstants::DefaultEditKeyboardWindowWidth; int windowHeight = KeyboardManagerConstants::DefaultEditKeyboardWindowHeight; - DPIAware::Convert(nullptr, windowWidth, windowHeight); + + DPIAware::ConvertByCursorPosition(windowWidth, windowHeight); // Window Creation HWND _hWndEditKeyboardWindow = CreateWindow( @@ -422,7 +423,7 @@ LRESULT CALLBACK EditKeyboardWindowProc(HWND hWnd, UINT messageCode, WPARAM wPar LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam; int minWidth = KeyboardManagerConstants::MinimumEditKeyboardWindowWidth; int minHeight = KeyboardManagerConstants::MinimumEditKeyboardWindowHeight; - DPIAware::Convert(nullptr, minWidth, minHeight); + DPIAware::Convert(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONULL), minWidth, minHeight); lpMMI->ptMinTrackSize.x = minWidth; lpMMI->ptMinTrackSize.y = minHeight; } diff --git a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp index c42f8d3870..f850c156b7 100644 --- a/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp +++ b/src/modules/keyboardmanager/KeyboardManagerEditorLibrary/EditShortcutsWindow.cpp @@ -95,7 +95,7 @@ inline void CreateEditShortcutsWindowImpl(HINSTANCE hInst, KeyboardManagerState& // Calculate DPI dependent window size int windowWidth = KeyboardManagerConstants::DefaultEditShortcutsWindowWidth; int windowHeight = KeyboardManagerConstants::DefaultEditShortcutsWindowHeight; - DPIAware::Convert(nullptr, windowWidth, windowHeight); + DPIAware::ConvertByCursorPosition(windowWidth, windowHeight); // Window Creation HWND _hWndEditShortcutsWindow = CreateWindow( @@ -377,7 +377,7 @@ LRESULT CALLBACK EditShortcutsWindowProc(HWND hWnd, UINT messageCode, WPARAM wPa LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam; int minWidth = KeyboardManagerConstants::MinimumEditShortcutsWindowWidth; int minHeight = KeyboardManagerConstants::MinimumEditShortcutsWindowHeight; - DPIAware::Convert(nullptr, minWidth, minHeight); + DPIAware::Convert(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONULL), minWidth, minHeight); lpMMI->ptMinTrackSize.x = minWidth; lpMMI->ptMinTrackSize.y = minHeight; }