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