Module: wine Branch: master Commit: 2aba4c58391bb9e1c6318efd371073d570907a6b URL: https://source.winehq.org/git/wine.git/?a=commit;h=2aba4c58391bb9e1c6318efd3...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Dec 7 15:28:46 2021 +0100
win32u: Use NtUserCallTwoParam for MirrorRgn implementation.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/objects.c | 10 +++++++++- dlls/win32u/gdiobj.c | 1 - dlls/win32u/ntgdi_private.h | 1 + dlls/win32u/region.c | 4 ++-- dlls/win32u/sysparams.c | 2 ++ dlls/win32u/win32u.spec | 1 - dlls/win32u/win32u_private.h | 1 - dlls/win32u/wrappers.c | 6 ------ include/ntuser.h | 1 + 9 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/dlls/gdi32/objects.c b/dlls/gdi32/objects.c index 04b91cfd60f..42d2c202e98 100644 --- a/dlls/gdi32/objects.c +++ b/dlls/gdi32/objects.c @@ -24,7 +24,7 @@ #include "ntstatus.h" #define WIN32_NO_STATUS #include "gdi_private.h" -#include "winuser.h" +#include "ntuser.h" #include "winreg.h" #include "winnls.h" #include "initguid.h" @@ -707,6 +707,14 @@ HRGN WINAPI CreatePolygonRgn( const POINT *points, INT count, INT mode ) return CreatePolyPolygonRgn( points, &count, 1, mode ); }
+/*********************************************************************** + * MirrorRgn (GDI32.@) + */ +BOOL WINAPI MirrorRgn( HWND hwnd, HRGN hrgn ) +{ + return NtUserCallTwoParam( HandleToUlong(hwnd), HandleToUlong(hrgn), NtUserMirrorRgn ); +} + /*********************************************************************** * CreateColorSpaceA (GDI32.@) */ diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c index b6bd5b60626..a771f10d20b 100644 --- a/dlls/win32u/gdiobj.c +++ b/dlls/win32u/gdiobj.c @@ -1183,7 +1183,6 @@ static struct unix_funcs unix_funcs = NtUserVkKeyScanEx,
GetDCHook, - MirrorRgn, SetDCHook, SetDIBits, SetHookFlags, diff --git a/dlls/win32u/ntgdi_private.h b/dlls/win32u/ntgdi_private.h index 13c365c075d..b42ff024b59 100644 --- a/dlls/win32u/ntgdi_private.h +++ b/dlls/win32u/ntgdi_private.h @@ -409,6 +409,7 @@ extern HPEN create_pen( INT style, INT width, COLORREF color ) DECLSPEC_HIDDEN; /* region.c */ extern BOOL add_rect_to_region( HRGN rgn, const RECT *rect ) DECLSPEC_HIDDEN; extern INT mirror_region( HRGN dst, HRGN src, INT width ) DECLSPEC_HIDDEN; +extern BOOL mirror_window_region( HWND hwnd, HRGN hrgn ) DECLSPEC_HIDDEN; extern BOOL REGION_FrameRgn( HRGN dest, HRGN src, INT x, INT y ) DECLSPEC_HIDDEN; extern HRGN create_polypolygon_region( const POINT *pts, const INT *count, INT nbpolygons, INT mode, const RECT *clip_rect ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/region.c b/dlls/win32u/region.c index e3e840a1554..86554f21e1c 100644 --- a/dlls/win32u/region.c +++ b/dlls/win32u/region.c @@ -1375,9 +1375,9 @@ INT mirror_region( HRGN dst, HRGN src, INT width ) }
/*********************************************************************** - * MirrorRgn (GDI32.@) + * mirror_window_region */ -BOOL WINAPI MirrorRgn( HWND hwnd, HRGN hrgn ) +BOOL mirror_window_region( HWND hwnd, HRGN hrgn ) { RECT rect;
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 15416a695f2..9d600d10fe8 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4422,6 +4422,8 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code return get_monitor_info( UlongToHandle(arg1), (MONITORINFO *)arg2 ); case NtUserGetSystemMetricsForDpi: return get_system_metrics_for_dpi( arg1, arg2 ); + case NtUserMirrorRgn: + return mirror_window_region( UlongToHandle(arg1), UlongToHandle(arg2) ); default: FIXME( "invalid code %u\n", code ); return 0; diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 17fdb7f4959..cb06e06d2a9 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1337,7 +1337,6 @@ @ cdecl __wine_get_vulkan_driver(long long)
# gdi32 -@ stdcall MirrorRgn(long long) @ stdcall SetDIBits(long long long long ptr ptr long) @ cdecl __wine_get_brush_bitmap_info(long ptr ptr ptr) @ cdecl __wine_get_icm_profile(long long ptr ptr) diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 7e867d4f736..46893760356 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -225,7 +225,6 @@ struct unix_funcs
/* Wine-specific functions */ DWORD_PTR (WINAPI *pGetDCHook)( HDC hdc, DCHOOKPROC *proc ); - BOOL (WINAPI *pMirrorRgn)( HWND hwnd, HRGN hrgn ); BOOL (WINAPI *pSetDCHook)( HDC hdc, DCHOOKPROC proc, DWORD_PTR data ); INT (WINAPI *pSetDIBits)( HDC hdc, HBITMAP hbitmap, UINT startscan, UINT lines, const void *bits, const BITMAPINFO *info, diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index 9bdd3ec3634..3402c09f023 100644 --- a/dlls/win32u/wrappers.c +++ b/dlls/win32u/wrappers.c @@ -857,12 +857,6 @@ BOOL WINAPI SetDCHook( HDC hdc, DCHOOKPROC proc, DWORD_PTR data ) return unix_funcs->pSetDCHook( hdc, proc, data ); }
-BOOL WINAPI MirrorRgn( HWND hwnd, HRGN hrgn ) -{ - if (!unix_funcs) return FALSE; - return unix_funcs->pMirrorRgn( hwnd, hrgn ); -} - INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan, UINT lines, const void *bits, const BITMAPINFO *info, UINT coloruse ) diff --git a/include/ntuser.h b/include/ntuser.h index 7a465824d7c..4cb090c4a31 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -63,6 +63,7 @@ enum { NtUserGetMonitorInfo, NtUserGetSystemMetricsForDpi, + NtUserMirrorRgn, };
/* this is the structure stored in TEB->Win32ClientInfo */