From 37871d87f4fb3ff2067d61e864fb16c49263a82e Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Sat, 7 Mar 2020 13:26:25 -0600 Subject: [PATCH] windows: Add a bunch of HighDPI functions. --- basis/windows/messages/messages.factor | 1 + basis/windows/user32/user32.factor | 137 +++++++++++++++++++++++++ 2 files changed, 138 insertions(+) diff --git a/basis/windows/messages/messages.factor b/basis/windows/messages/messages.factor index a0c18106ec..26247c1431 100644 --- a/basis/windows/messages/messages.factor +++ b/basis/windows/messages/messages.factor @@ -210,6 +210,7 @@ CONSTANT: WM_NCMOUSELEAVE 0x02A2 CONSTANT: WM_WTSSESSION_CHANGE 0x02B1 CONSTANT: WM_TABLET_FIRST 0x02c0 CONSTANT: WM_TABLET_LAST 0x02df +CONSTANT: WM_DPICHANGED 0x02E0 CONSTANT: WM_CUT 0x0300 CONSTANT: WM_COPY 0x0301 CONSTANT: WM_PASTE 0x0302 diff --git a/basis/windows/user32/user32.factor b/basis/windows/user32/user32.factor index 1b8a133687..b447943d5a 100644 --- a/basis/windows/user32/user32.factor +++ b/basis/windows/user32/user32.factor @@ -2259,3 +2259,140 @@ STRUCT: POWERBROADCAST_SETTING : msgbox ( str -- ) f swap "DebugMsg" MB_OK MessageBox drop ; + +! HighDPI +TYPEDEF: HANDLE DPI_AWARENESS_CONTEXT + +ENUM: PROCESS_DPI_AWARENESS + { PROCESS_DPI_UNAWARE 0 } + { PROCESS_SYSTEM_DPI_AWARE 1 } + { PROCESS_PER_MONITOR_DPI_AWARE 2 } ; + +ENUM: DPI_AWARENESS + { DPI_AWARENESS_INVALID -1 } + { DPI_AWARENESS_UNAWARE 0 } + { DPI_AWARENESS_SYSTEM_AWARE 1 } + { DPI_AWARENESS_PER_MONITOR_AWARE 2 } ; + +FUNCTION: BOOL AdjustWindowRectExForDpi ( + LPRECT lpRect, + DWORD dwStyle, + BOOL bMenu, + DWORD dwExStyle, + UINT dpi +) + +FUNCTION: BOOL EnableNonClientDpiScaling ( + HWND hwnd +) + +FUNCTION: BOOL AreDpiAwarenessContextsEqual ( + DPI_AWARENESS_CONTEXT dpiContextA, + DPI_AWARENESS_CONTEXT dpiContextB +) + +ENUM: DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS + DCDC_DEFAULT + DCDC_DISABLE_FONT_UPDATE + DCDC_DISABLE_RELAYOUT ; + +FUNCTION: DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS GetDialogControlDpiChangeBehavior ( + HWND hWnd +) + +ENUM: DIALOG_DPI_CHANGE_BEHAVIORS + DDC_DEFAULT + DDC_DISABLE_ALL + DDC_DISABLE_RESIZE + DDC_DISABLE_CONTROL_RELAYOUT ; + +FUNCTION: DIALOG_DPI_CHANGE_BEHAVIORS GetDialogDpiChangeBehavior ( + HWND hDlg +) + +FUNCTION: UINT GetDpiForSystem ( ) + +FUNCTION: UINT GetDpiForWindow ( HWND hwnd ) + +FUNCTION: HRESULT GetProcessDpiAwareness ( HANDLE hprocess, PROCESS_DPI_AWARENESS* value ) + +FUNCTION: UINT GetSystemDpiForProcess ( + HANDLE hProcess +) + +FUNCTION: int GetSystemMetricsForDpi ( + int nIndex, + UINT dpi +) + +FUNCTION: DPI_AWARENESS_CONTEXT GetThreadDpiAwarenessContext ( ) +FUNCTION: DPI_AWARENESS_CONTEXT SetThreadDpiAwarenessContext ( DPI_AWARENESS_CONTEXT dpiContext ) + +ENUM: DPI_HOSTING_BEHAVIOR + DPI_HOSTING_BEHAVIOR_INVALID + DPI_HOSTING_BEHAVIOR_DEFAULT + DPI_HOSTING_BEHAVIOR_MIXED ; + +FUNCTION: DPI_HOSTING_BEHAVIOR GetThreadDpiHostingBehavior ( ) + +FUNCTION: DPI_HOSTING_BEHAVIOR GetWindowDpiHostingBehavior ( + HWND hwnd +) + +FUNCTION: BOOL SetProcessDPIAware ( ) +FUNCTION: HRESULT SetProcessDpiAwareness ( PROCESS_DPI_AWARENESS value ) +FUNCTION: BOOL SetProcessDpiAwarenessContext ( DPI_AWARENESS_CONTEXT value ) + +FUNCTION: DPI_AWARENESS_CONTEXT GetWindowDpiAwarenessContext ( HWND hwnd ) +FUNCTION: DPI_AWARENESS GetAwarenessFromDpiAwarenessContext ( DPI_AWARENESS_CONTEXT value ) + +FUNCTION: BOOL IsValidDpiAwarenessContext ( + DPI_AWARENESS_CONTEXT value +) + +! Needs work +! GetThreadDpiAwarenessContext -8 swap IsValidDpiAwarenessContext ! 0, should be 1 +! : DPI_AWARENESS_CONTEXT_UNAWARE ( -- DPI_AWARENESS_CONTEXT ) +! GetThreadDpiAwarenessContext -1 swap ; +! : DPI_AWARENESS_CONTEXT_SYSTEM_AWARE ( -- DPI_AWARENESS_CONTEXT ) +! GetThreadDpiAwarenessContext -2 swap ; +! : DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE ( -- DPI_AWARENESS_CONTEXT ) +! GetThreadDpiAwarenessContext -3 swap ; +! : DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 ( -- DPI_AWARENESS_CONTEXT ) +! GetThreadDpiAwarenessContext -4 swap ; +! : DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED ( -- DPI_AWARENESS_CONTEXT ) +! GetThreadDpiAwarenessContext -5 swap ; + +FUNCTION: BOOL LogicalToPhysicalPointForPerMonitorDPI ( + HWND hWnd, + LPPOINT lpPoint +) + +FUNCTION: BOOL PhysicalToLogicalPointForPerMonitorDPI ( + HWND hWnd, + LPPOINT lpPoint +) + +FUNCTION: BOOL SetDialogControlDpiChangeBehavior ( + HWND hWnd, + DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS mask, + DIALOG_CONTROL_DPI_CHANGE_BEHAVIORS values +) + +FUNCTION: BOOL SetDialogDpiChangeBehavior ( + HWND hDlg, + DIALOG_DPI_CHANGE_BEHAVIORS mask, + DIALOG_DPI_CHANGE_BEHAVIORS values +) + +FUNCTION: DPI_HOSTING_BEHAVIOR SetThreadDpiHostingBehavior ( + DPI_HOSTING_BEHAVIOR value +) + +FUNCTION: BOOL SystemParametersInfoForDpi ( + UINT uiAction, + UINT uiParam, + PVOID pvParam, + UINT fWinIni, + UINT dpi +) -- 2.34.1