Jacek Caban : win32u: Use NtUserCallTwoParam for MirrorRgn implementation.

Alexandre Julliard julliard at winehq.org
Tue Dec 7 15:58:45 CST 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Dec  7 15:28:46 2021 +0100

win32u: Use NtUserCallTwoParam for MirrorRgn implementation.

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/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 */




More information about the wine-cvs mailing list