Jacek Caban : win32u: Move NtUserExcludeUpdateRgn implementation from user32.

Alexandre Julliard julliard at winehq.org
Thu Apr 14 16:50:33 CDT 2022


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Apr 14 14:10:15 2022 +0200

win32u: Move NtUserExcludeUpdateRgn implementation from user32.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/painting.c       | 25 -------------------------
 dlls/user32/user32.spec      |  2 +-
 dlls/win32u/dce.c            | 24 ++++++++++++++++++++++++
 dlls/win32u/gdiobj.c         |  1 +
 dlls/win32u/win32u.spec      |  2 +-
 dlls/win32u/win32u_private.h |  1 +
 dlls/win32u/wrappers.c       |  6 ++++++
 include/ntuser.h             |  1 +
 8 files changed, 35 insertions(+), 27 deletions(-)

diff --git a/dlls/user32/painting.c b/dlls/user32/painting.c
index cabfe471e9d..94e462605dd 100644
--- a/dlls/user32/painting.c
+++ b/dlls/user32/painting.c
@@ -240,31 +240,6 @@ BOOL WINAPI ValidateRect( HWND hwnd, const RECT *rect )
 }
 
 
-/***********************************************************************
- *		ExcludeUpdateRgn (USER32.@)
- */
-INT WINAPI ExcludeUpdateRgn( HDC hdc, HWND hwnd )
-{
-    HRGN update_rgn = CreateRectRgn( 0, 0, 0, 0 );
-    INT ret = NtUserGetUpdateRgn( hwnd, update_rgn, FALSE );
-
-    if (ret != ERROR)
-    {
-        DPI_AWARENESS_CONTEXT context;
-        POINT pt;
-
-        context = SetThreadDpiAwarenessContext( GetWindowDpiAwarenessContext( hwnd ));
-        GetDCOrgEx( hdc, &pt );
-        MapWindowPoints( 0, hwnd, &pt, 1 );
-        OffsetRgn( update_rgn, -pt.x, -pt.y );
-        ret = ExtSelectClipRgn( hdc, update_rgn, RGN_DIFF );
-        SetThreadDpiAwarenessContext( context );
-    }
-    DeleteObject( update_rgn );
-    return ret;
-}
-
-
 static INT scroll_window( HWND hwnd, INT dx, INT dy, const RECT *rect, const RECT *clipRect,
                           HRGN hrgnUpdate, LPRECT rcUpdate, UINT flags, BOOL is_ex )
 {
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index af63ae007a1..fcc17aae18e 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -237,7 +237,7 @@
 @ stdcall EnumWindowStationsW(ptr long)
 @ stdcall EnumWindows(ptr long)
 @ stdcall EqualRect(ptr ptr)
-@ stdcall ExcludeUpdateRgn(long long)
+@ stdcall ExcludeUpdateRgn(long long) NtUserExcludeUpdateRgn
 @ stdcall ExitWindowsEx(long long)
 @ stdcall FillRect(long ptr long)
 @ stdcall FindWindowA(str str)
diff --git a/dlls/win32u/dce.c b/dlls/win32u/dce.c
index f0545c8bba4..740c7441a49 100644
--- a/dlls/win32u/dce.c
+++ b/dlls/win32u/dce.c
@@ -1546,3 +1546,27 @@ BOOL WINAPI NtUserGetUpdateRect( HWND hwnd, RECT *rect, BOOL erase )
     if (need_erase) flags |= UPDATE_DELAYED_ERASE;
     return get_update_flags( hwnd, NULL, &flags ) && (flags & UPDATE_PAINT);
 }
+
+/***********************************************************************
+ *           NtUserExcludeUpdateRgn (win32u.@)
+ */
+INT WINAPI NtUserExcludeUpdateRgn( HDC hdc, HWND hwnd )
+{
+    HRGN update_rgn = NtGdiCreateRectRgn( 0, 0, 0, 0 );
+    INT ret = NtUserGetUpdateRgn( hwnd, update_rgn, FALSE );
+
+    if (ret != ERROR)
+    {
+        DPI_AWARENESS_CONTEXT context;
+        POINT pt;
+
+        context = set_thread_dpi_awareness_context( get_window_dpi_awareness_context( hwnd ));
+        NtGdiGetDCPoint( hdc, NtGdiGetDCOrg, &pt );
+        map_window_points( 0, hwnd, &pt, 1, get_thread_dpi() );
+        NtGdiOffsetRgn( update_rgn, -pt.x, -pt.y );
+        ret = NtGdiExtSelectClipRgn( hdc, update_rgn, RGN_DIFF );
+        set_thread_dpi_awareness_context( context );
+    }
+    NtGdiDeleteObjectApp( update_rgn );
+    return ret;
+}
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index d71807c8c04..d5538848a4f 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1155,6 +1155,7 @@ static struct unix_funcs unix_funcs =
     NtUserEnumDisplayDevices,
     NtUserEnumDisplayMonitors,
     NtUserEnumDisplaySettings,
+    NtUserExcludeUpdateRgn,
     NtUserFlashWindowEx,
     NtUserGetAsyncKeyState,
     NtUserGetClassInfoEx,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 8c2073d0fb1..0bc95daafc8 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -879,7 +879,7 @@
 @ stdcall NtUserEnumDisplayMonitors(long ptr ptr long)
 @ stdcall NtUserEnumDisplaySettings(ptr long ptr long)
 @ stub NtUserEvent
-@ stub NtUserExcludeUpdateRgn
+@ stdcall NtUserExcludeUpdateRgn(long long)
 @ stub NtUserFillWindow
 @ stdcall -syscall NtUserFindExistingCursorIcon(ptr ptr ptr)
 @ stub NtUserFindWindowEx
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 1ebb60ad6ca..69ddcc83c47 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -217,6 +217,7 @@ struct unix_funcs
     BOOL     (WINAPI *pNtUserEnumDisplayMonitors)( HDC hdc, RECT *rect, MONITORENUMPROC proc, LPARAM lp );
     BOOL     (WINAPI *pNtUserEnumDisplaySettings)( UNICODE_STRING *device, DWORD mode,
                                                    DEVMODEW *dev_mode, DWORD flags );
+    INT      (WINAPI *pNtUserExcludeUpdateRgn)( HDC hdc, HWND hwnd );
     BOOL     (WINAPI *pNtUserFlashWindowEx)( FLASHWINFO *info );
     SHORT    (WINAPI *pNtUserGetAsyncKeyState)( INT key );
     ATOM     (WINAPI *pNtUserGetClassInfoEx)( HINSTANCE instance, UNICODE_STRING *name, WNDCLASSEXW *wc,
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index f29d78c2c52..b5c2b49ce79 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -852,6 +852,12 @@ BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
     return unix_funcs->pNtUserEnumDisplaySettings( device, mode, dev_mode, flags );
 }
 
+INT WINAPI NtUserExcludeUpdateRgn( HDC hdc, HWND hwnd )
+{
+    if (!unix_funcs) return ERROR;
+    return unix_funcs->pNtUserExcludeUpdateRgn( hdc, hwnd );
+}
+
 BOOL WINAPI NtUserFlashWindowEx( FLASHWINFO *info )
 {
     if (!unix_funcs) return FALSE;
diff --git a/include/ntuser.h b/include/ntuser.h
index eed7e4e78c2..efabbe64ad7 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -436,6 +436,7 @@ NTSTATUS WINAPI NtUserEnumDisplayDevices( UNICODE_STRING *device, DWORD index,
 BOOL    WINAPI NtUserEnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPROC proc, LPARAM lp );
 BOOL    WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
                                           DEVMODEW *dev_mode, DWORD flags );
+INT     WINAPI NtUserExcludeUpdateRgn( HDC hdc, HWND hwnd );
 HICON   WINAPI NtUserFindExistingCursorIcon( UNICODE_STRING *module, UNICODE_STRING *res_name,
                                              void *desc );
 BOOL    WINAPI NtUserFlashWindowEx( FLASHWINFO *info );




More information about the wine-cvs mailing list