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