From f3b7247a43a32faa6fc041d1d6521444770b0a02 Mon Sep 17 00:00:00 2001 From: Zhiyi Zhang Date: Fri, 15 Oct 2021 09:56:51 +0800 Subject: [PATCH 48/51] winex11.drv: Add get_window_effective_dpi() helper. To: wine-devel@winehq.org Signed-off-by: Zhiyi Zhang --- dlls/winex11.drv/Makefile.in | 2 +- dlls/winex11.drv/window.c | 13 +++++++++++++ dlls/winex11.drv/x11drv.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dlls/winex11.drv/Makefile.in b/dlls/winex11.drv/Makefile.in index 6feba00ffcf..4674f84a02a 100644 --- a/dlls/winex11.drv/Makefile.in +++ b/dlls/winex11.drv/Makefile.in @@ -1,7 +1,7 @@ EXTRADEFS = -DWINE_NO_LONG_TYPES MODULE = winex11.drv IMPORTS = uuid user32 gdi32 win32u -DELAYIMPORTS = comctl32 ole32 shell32 imm32 +DELAYIMPORTS = comctl32 ole32 shell32 imm32 shcore EXTRAINCL = $(X_CFLAGS) EXTRALIBS = $(X_LIBS) $(X_EXTRA_LIBS) $(PTHREAD_LIBS) diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c index 0d2849ca3b6..0b076d8329f 100644 --- a/dlls/winex11.drv/window.c +++ b/dlls/winex11.drv/window.c @@ -45,6 +45,7 @@ #include "winbase.h" #include "wingdi.h" #include "winuser.h" +#include "shellscalingapi.h" #include "wine/unicode.h" #include "x11drv.h" @@ -1601,6 +1602,18 @@ RECT map_dpi_rect( RECT rect, UINT dpi_from, UINT dpi_to ) return rect; } +unsigned int get_window_effective_dpi(void) +{ + DPI_AWARENESS_CONTEXT context; + UINT dpi; + + /* Why using DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 doesn't work? */ + context = SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE); + dpi = GetDpiForSystem(); + SetThreadDpiAwarenessContext(context); + return dpi; +} + /********************************************************************** * create_whole_window * diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index ac7d1eb683d..5f02487c74f 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -713,6 +713,7 @@ extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN; /* DPI unaware scaling helpers */ extern RECT dpi_unaware_get_virtual_screen_rect(void) DECLSPEC_HIDDEN; +extern unsigned int get_window_effective_dpi( void ) DECLSPEC_HIDDEN; extern POINT map_dpi_point( POINT pt, UINT dpi_from, UINT dpi_to ) DECLSPEC_HIDDEN; extern RECT map_dpi_rect( RECT rect, UINT dpi_from, UINT dpi_to ) DECLSPEC_HIDDEN; -- 2.32.0