Zhiyi Zhang : user32: Use get_primary_monitor_rect() helper.

Alexandre Julliard julliard at winehq.org
Tue May 18 15:42:38 CDT 2021


Module: wine
Branch: master
Commit: 9b2f59cb94d5aa7b8fbe4e0373d933a630b51dc1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9b2f59cb94d5aa7b8fbe4e0373d933a630b51dc1

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Tue May 18 17:11:25 2021 +0800

user32: Use get_primary_monitor_rect() helper.

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/input.c        | 16 +++++++---------
 dlls/user32/sysparams.c    |  6 ++----
 dlls/user32/user_private.h |  1 +
 dlls/user32/win.c          |  3 +--
 dlls/user32/winpos.c       |  7 ++++---
 5 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index ba0292c8f88..b4e3579f5e8 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -195,17 +195,15 @@ static void update_mouse_coords( INPUT *input )
     if (input->u.mi.dwFlags & MOUSEEVENTF_ABSOLUTE)
     {
         DPI_AWARENESS_CONTEXT context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE );
+        RECT rc;
+
         if (input->u.mi.dwFlags & MOUSEEVENTF_VIRTUALDESK)
-        {
-            RECT rc = get_virtual_screen_rect();
-            input->u.mi.dx = rc.left + ((input->u.mi.dx * (rc.right - rc.left)) >> 16);
-            input->u.mi.dy = rc.top  + ((input->u.mi.dy * (rc.bottom - rc.top)) >> 16);
-        }
+            rc = get_virtual_screen_rect();
         else
-        {
-            input->u.mi.dx = (input->u.mi.dx * GetSystemMetrics( SM_CXSCREEN )) >> 16;
-            input->u.mi.dy = (input->u.mi.dy * GetSystemMetrics( SM_CYSCREEN )) >> 16;
-        }
+            rc = get_primary_monitor_rect();
+
+        input->u.mi.dx = rc.left + ((input->u.mi.dx * (rc.right - rc.left)) >> 16);
+        input->u.mi.dy = rc.top  + ((input->u.mi.dy * (rc.bottom - rc.top)) >> 16);
         SetThreadDpiAwarenessContext( context );
     }
     else
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 3d0cb2a6566..015db0db50e 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -366,7 +366,7 @@ static BOOL CALLBACK get_primary_monitor_proc( HMONITOR monitor, HDC hdc, LPRECT
     return TRUE;
 }
 
-static RECT get_primary_monitor_rect(void)
+RECT get_primary_monitor_rect(void)
 {
     RECT rect = {0};
 
@@ -1818,9 +1818,7 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam,
         spi_idx = SPI_SETWORKAREA_IDX;
         if (!spi_loaded[spi_idx])
         {
-            SetRect( &work_area, 0, 0,
-                     GetSystemMetrics( SM_CXSCREEN ),
-                     GetSystemMetrics( SM_CYSCREEN ) );
+            work_area = get_primary_monitor_rect();
             EnumDisplayMonitors( 0, NULL, enum_monitors, (LPARAM)&work_area );
             spi_loaded[spi_idx] = TRUE;
         }
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 974d18be482..82cf376ef54 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -261,6 +261,7 @@ extern void update_window_state( HWND hwnd ) DECLSPEC_HIDDEN;
 extern void wait_graphics_driver_ready(void) DECLSPEC_HIDDEN;
 extern void *get_hook_proc( void *proc, const WCHAR *module, HMODULE *free_module ) DECLSPEC_HIDDEN;
 extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN;
+extern RECT get_primary_monitor_rect(void) DECLSPEC_HIDDEN;
 extern LRESULT call_current_hook( HHOOK hhook, INT code, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
 extern DWORD get_input_codepage( void ) DECLSPEC_HIDDEN;
 extern BOOL map_wparam_AtoW( UINT message, WPARAM *wparam, enum wm_char_mapping mapping ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/win.c b/dlls/user32/win.c
index 680defc2071..86a1f50ca77 100644
--- a/dlls/user32/win.c
+++ b/dlls/user32/win.c
@@ -855,8 +855,7 @@ BOOL WIN_GetRectangles( HWND hwnd, enum coords_relative relative, RECT *rectWind
         }
         else
         {
-            rect.right  = GetSystemMetrics(SM_CXSCREEN);
-            rect.bottom = GetSystemMetrics(SM_CYSCREEN);
+            rect = get_primary_monitor_rect();
         }
         if (rectWindow) *rectWindow = rect;
         if (rectClient) *rectClient = rect;
diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c
index de5d50d4c3a..5a2b8ccdfe8 100644
--- a/dlls/user32/winpos.c
+++ b/dlls/user32/winpos.c
@@ -740,7 +740,7 @@ MINMAXINFO WINPOS_GetMinMaxInfo( HWND hwnd )
 
     if ((monitor = MonitorFromWindow( hwnd, MONITOR_DEFAULTTOPRIMARY )))
     {
-        RECT rc_work;
+        RECT rc_work, rc_primary;
         MONITORINFO mon_info;
 
         mon_info.cbSize = sizeof(mon_info);
@@ -754,8 +754,9 @@ MINMAXINFO WINPOS_GetMinMaxInfo( HWND hwnd )
                 rc_work = mon_info.rcWork;
         }
 
-        if (MinMax.ptMaxSize.x == GetSystemMetrics(SM_CXSCREEN) + 2 * xinc &&
-            MinMax.ptMaxSize.y == GetSystemMetrics(SM_CYSCREEN) + 2 * yinc)
+        rc_primary = get_primary_monitor_rect();
+        if (MinMax.ptMaxSize.x == (rc_primary.right - rc_primary.left) + 2 * xinc &&
+            MinMax.ptMaxSize.y == (rc_primary.bottom - rc_primary.top) + 2 * yinc)
         {
             MinMax.ptMaxSize.x = (rc_work.right - rc_work.left) + 2 * xinc;
             MinMax.ptMaxSize.y = (rc_work.bottom - rc_work.top) + 2 * yinc;




More information about the wine-cvs mailing list