Jacek Caban : win32u: Use NtUserCallOneParam instead of GDIRealizePalette.

Alexandre Julliard julliard at winehq.org
Fri Dec 3 15:18:59 CST 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Dec  3 12:56:30 2021 +0100

win32u: Use NtUserCallOneParam instead of GDIRealizePalette.

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/dc.c              | 10 +++++++---
 dlls/win32u/gdiobj.c         |  2 +-
 dlls/win32u/ntgdi_private.h  |  1 +
 dlls/win32u/palette.c        |  7 ++++---
 dlls/win32u/sysparams.c      | 18 ++++++++++++++++++
 dlls/win32u/win32u.spec      |  3 +--
 dlls/win32u/win32u_private.h |  3 +--
 dlls/win32u/wrappers.c       | 10 +++++-----
 include/ntuser.h             |  8 ++++++++
 9 files changed, 46 insertions(+), 16 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 1511c565194..705593ac6f7 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -22,7 +22,7 @@
  */
 
 #include "gdi_private.h"
-#include "winternl.h"
+#include "ntuser.h"
 #include "ddrawgdi.h"
 #include "winnls.h"
 
@@ -2090,12 +2090,16 @@ BOOL WINAPI ScaleWindowExtEx( HDC hdc, INT x_num, INT x_denom,
     return NtGdiScaleWindowExtEx( hdc, x_num, x_denom, y_num, y_denom, size );
 }
 
+static UINT WINAPI realize_palette( HDC hdc )
+{
+    return NtUserCallOneParam( HandleToUlong(hdc), NtUserRealizePalette );
+}
+
 /* Pointers to USER implementation of SelectPalette/RealizePalette */
 /* they will be patched by USER on startup */
 extern HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg );
-extern UINT WINAPI GDIRealizePalette( HDC hdc );
 HPALETTE (WINAPI *pfnSelectPalette)( HDC hdc, HPALETTE hpal, WORD bkgnd ) = GDISelectPalette;
-UINT (WINAPI *pfnRealizePalette)( HDC hdc ) = GDIRealizePalette;
+UINT (WINAPI *pfnRealizePalette)( HDC hdc ) = realize_palette;
 
 /***********************************************************************
  *           SelectPalette    (GDI32.@)
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index e68c9126cd6..3dc87509313 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1168,6 +1168,7 @@ static struct unix_funcs unix_funcs =
     NtGdiUpdateColors,
     NtGdiWidenPath,
     NtUserActivateKeyboardLayout,
+    NtUserCallOneParam,
     NtUserCallTwoParam,
     NtUserChangeDisplaySettings,
     NtUserCountClipboardFormats,
@@ -1187,7 +1188,6 @@ static struct unix_funcs unix_funcs =
     NtUserUnregisterHotKey,
     NtUserVkKeyScanEx,
 
-    GDIRealizePalette,
     GDISelectPalette,
     GetDCHook,
     MirrorRgn,
diff --git a/dlls/win32u/ntgdi_private.h b/dlls/win32u/ntgdi_private.h
index 8aaf8ba231d..0244882ce3e 100644
--- a/dlls/win32u/ntgdi_private.h
+++ b/dlls/win32u/ntgdi_private.h
@@ -403,6 +403,7 @@ extern HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg) DECL
 extern HPALETTE PALETTE_Init(void) DECLSPEC_HIDDEN;
 extern UINT get_palette_entries( HPALETTE hpalette, UINT start, UINT count,
                                  PALETTEENTRY *entries ) DECLSPEC_HIDDEN;
+extern UINT realize_palette( HDC hdc ) DECLSPEC_HIDDEN;
 
 /* pen.c */
 extern HPEN create_pen( INT style, INT width, COLORREF color ) DECLSPEC_HIDDEN;
diff --git a/dlls/win32u/palette.c b/dlls/win32u/palette.c
index 8e9e51295bb..b59a196caff 100644
--- a/dlls/win32u/palette.c
+++ b/dlls/win32u/palette.c
@@ -539,16 +539,17 @@ HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg)
 
 
 /***********************************************************************
- *           GDIRealizePalette    (Not a Windows API)
+ *           realize_palette
  */
-UINT WINAPI GDIRealizePalette( HDC hdc )
+UINT realize_palette( HDC hdc )
 {
     UINT realized = 0;
     DC* dc = get_dc_ptr( hdc );
 
+    TRACE( "%p\n", hdc );
     if (!dc) return 0;
 
-    TRACE("%p...\n", hdc );
+    /* FIXME: move primary palette handling from user32 */
 
     if( dc->hPalette == get_stock_object( DEFAULT_PALETTE ))
     {
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index e0de4edc6e5..095a6cfe680 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -1657,6 +1657,24 @@ void sysparams_init(void)
     }
 }
 
+/***********************************************************************
+ *	     NtUserCallOneParam    (win32u.@)
+ */
+ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code )
+{
+    switch(code)
+    {
+    case NtUserRealizePalette:
+        return realize_palette( UlongToHandle(arg) );
+    default:
+        FIXME( "invalid code %u\n", code );
+        return 0;
+    }
+}
+
+/***********************************************************************
+ *	     NtUserCallTwoParam    (win32u.@)
+ */
 ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code )
 {
     switch(code)
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 8499d52e32c..8d1a1bbb234 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -779,7 +779,7 @@
 @ stub NtUserCallMsgFilter
 @ stub NtUserCallNextHookEx
 @ stub NtUserCallNoParam
-@ stub NtUserCallOneParam
+@ stdcall NtUserCallOneParam(long long)
 @ stdcall NtUserCallTwoParam(long long long)
 @ stub NtUserCanBrokerForceForeground
 @ stub NtUserChangeClipboardChain
@@ -1325,7 +1325,6 @@
 @ stdcall SetDCHook(long ptr long)
 @ stdcall SetHookFlags(long long)
 @ stdcall GDISelectPalette(long long long)
-@ stdcall GDIRealizePalette(long)
 @ cdecl __wine_make_gdi_object_system(long long)
 @ cdecl __wine_set_visible_region(long long ptr ptr ptr)
 
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 7fbc92cde7b..d6454b7ad47 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -195,6 +195,7 @@ struct unix_funcs
     BOOL     (WINAPI *pNtGdiUpdateColors)( HDC hdc );
     BOOL     (WINAPI *pNtGdiWidenPath)( HDC hdc );
     HKL      (WINAPI *pNtUserActivateKeyboardLayout)( HKL layout, UINT flags );
+    ULONG_PTR (WINAPI *pNtUserCallOneParam)( ULONG_PTR arg, ULONG code );
     ULONG_PTR (WINAPI *pNtUserCallTwoParam)( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code );
     LONG     (WINAPI *pNtUserChangeDisplaySettings)( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                                      DWORD flags, void *lparam );
@@ -221,7 +222,6 @@ struct unix_funcs
     WORD     (WINAPI *pNtUserVkKeyScanEx)( WCHAR chr, HKL layout );
 
     /* Wine-specific functions */
-    UINT (WINAPI *pGDIRealizePalette)( HDC hdc );
     HPALETTE (WINAPI *pGDISelectPalette)( HDC hdc, HPALETTE hpal, WORD bkg );
     DWORD_PTR (WINAPI *pGetDCHook)( HDC hdc, DCHOOKPROC *proc );
     BOOL (WINAPI *pMirrorRgn)( HWND hwnd, HRGN hrgn );
@@ -241,7 +241,6 @@ struct unix_funcs
                                       struct window_surface *surface );
 };
 
-UINT WINAPI GDIRealizePalette( HDC hdc );
 HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg );
 
 extern RECT get_virtual_screen_rect(void) DECLSPEC_HIDDEN;
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index a9a72eaa903..1ea45e42c21 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -601,6 +601,11 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags )
     return unix_funcs->pNtUserActivateKeyboardLayout( layout, flags );
 }
 
+ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code )
+{
+    return unix_funcs->pNtUserCallOneParam( arg, code );
+}
+
 ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code )
 {
     return unix_funcs->pNtUserCallTwoParam( arg1, arg2, code );
@@ -697,11 +702,6 @@ WORD WINAPI NtUserVkKeyScanEx( WCHAR chr, HKL layout )
     return unix_funcs->pNtUserVkKeyScanEx( chr, layout );
 }
 
-UINT WINAPI GDIRealizePalette( HDC hdc )
-{
-    return unix_funcs->pGDIRealizePalette( hdc );
-}
-
 HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD bkg )
 {
     return unix_funcs->pGDISelectPalette( hdc, hpal, bkg );
diff --git a/include/ntuser.h b/include/ntuser.h
index 3904daf5a82..3edfeab188e 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -39,6 +39,12 @@ struct enum_display_monitor_params
     LPARAM lparam;
 };
 
+/* NtUserCallOneParam codes, not compatible with Windows */
+enum
+{
+    NtUserRealizePalette,
+};
+
 /* NtUserCallTwoParam codes, not compatible with Windows */
 enum
 {
@@ -78,6 +84,7 @@ C_ASSERT( sizeof(struct user_thread_info) <= sizeof(((TEB *)0)->Win32ClientInfo)
 HKL     WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags );
 BOOL    WINAPI NtUserAddClipboardFormatListener( HWND hwnd );
 BOOL    WINAPI NtUserAttachThreadInput( DWORD from, DWORD to, BOOL attach );
+ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code );
 ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code );
 LONG    WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                             DWORD flags, void *lparam );
@@ -128,6 +135,7 @@ BOOL    WINAPI NtUserRemoveClipboardFormatListener( HWND hwnd );
 HANDLE  WINAPI NtUserRemoveProp( HWND hwnd, const WCHAR *str );
 BOOL    WINAPI NtUserScrollDC( HDC hdc, INT dx, INT dy, const RECT *scroll, const RECT *clip,
                                HRGN ret_update_rgn, RECT *update_rect );
+HPALETTE WINAPI NtUserSelectPalette( HDC hdc, HPALETTE palette, WORD force_background );
 BOOL    WINAPI NtUserSetKeyboardState( BYTE *state );
 BOOL    WINAPI NtUserSetProcessWindowStation( HWINSTA handle );
 BOOL    WINAPI NtUserSetProp( HWND hwnd, const WCHAR *str, HANDLE handle );




More information about the wine-cvs mailing list