From 3411821ff6a9e94b7fed330976736c0271f3954d Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 26 Sep 2009 13:32:47 +0200 Subject: [PATCH] gdi32: Get rid of the 16-bit DC hook support. It can only work with native user32 anyway. --- dlls/gdi32/dc.c | 72 ++++------------------------------------ dlls/gdi32/gdi16.c | 20 +++++++++++ dlls/gdi32/gdi_private.h | 3 +- 3 files changed, 27 insertions(+), 68 deletions(-) diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index db8a91bab74..f7b295ac594 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -87,7 +87,6 @@ DC *alloc_dc_ptr( const DC_FUNCTIONS *funcs, WORD magic ) dc->saved_dc = 0; dc->dwHookData = 0; dc->hookProc = NULL; - dc->hookThunk = NULL; dc->wndOrgX = 0; dc->wndOrgY = 0; dc->wndExtX = 1; @@ -224,8 +223,8 @@ void release_dc_ptr( DC *dc ) */ void update_dc( DC *dc ) { - if (InterlockedExchange( &dc->dirty, 0 ) && dc->hookThunk) - dc->hookThunk( dc->hSelf, DCHC_INVALIDVISRGN, dc->dwHookData, 0 ); + if (InterlockedExchange( &dc->dirty, 0 ) && dc->hookProc) + dc->hookProc( dc->hSelf, DCHC_INVALIDVISRGN, dc->dwHookData, 0 ); } @@ -403,8 +402,7 @@ INT save_dc_state( HDC hdc ) PATH_InitGdiPath( &newdc->path ); newdc->pAbortProc = NULL; - newdc->hookThunk = NULL; - newdc->hookProc = 0; + newdc->hookProc = NULL; newdc->saved_visrgn = NULL; if (!(newdc->hSelf = alloc_gdi_handle( &newdc->header, dc->header.type, &dc_funcs ))) @@ -820,7 +818,7 @@ BOOL WINAPI DeleteDC( HDC hdc ) } /* Call hook procedure to check whether is it OK to delete this DC */ - if (dc->hookThunk && !dc->hookThunk( hdc, DCHC_DELETEDC, dc->dwHookData, 0 )) + if (dc->hookProc && !dc->hookProc( hdc, DCHC_DELETEDC, dc->dwHookData, 0 )) { release_dc_ptr( dc ); return FALSE; @@ -1389,7 +1387,7 @@ BOOL WINAPI SetDCHook( HDC hdc, DCHOOKPROC hookProc, DWORD_PTR dwHookData ) if (!(dc->flags & DC_SAVED)) { dc->dwHookData = dwHookData; - dc->hookThunk = hookProc; + dc->hookProc = hookProc; } release_dc_ptr( dc ); return TRUE; @@ -1407,65 +1405,7 @@ DWORD_PTR WINAPI GetDCHook( HDC hdc, DCHOOKPROC *proc ) DWORD_PTR ret; if (!dc) return 0; - if (proc) *proc = dc->hookThunk; - ret = dc->dwHookData; - release_dc_ptr( dc ); - return ret; -} - - -/* relay function to call the 16-bit DC hook proc */ -static BOOL WINAPI call_dc_hook16( HDC hdc, WORD code, DWORD_PTR data, LPARAM lParam ) -{ - WORD args[6]; - DWORD ret = 0; - DC *dc = get_dc_ptr( hdc ); - - if (!dc) return FALSE; - if (dc->hookProc) - { - args[5] = HDC_16(hdc); - args[4] = code; - args[3] = HIWORD(data); - args[2] = LOWORD(data); - args[1] = HIWORD(lParam); - args[0] = LOWORD(lParam); - WOWCallback16Ex( (DWORD)dc->hookProc, WCB16_PASCAL, sizeof(args), args, &ret ); - } - release_dc_ptr( dc ); - return LOWORD(ret); -} - -/*********************************************************************** - * SetDCHook (GDI.190) - */ -BOOL16 WINAPI SetDCHook16( HDC16 hdc16, FARPROC16 hookProc, DWORD dwHookData ) -{ - DC *dc = get_dc_ptr( HDC_32(hdc16) ); - - if (!dc) return FALSE; - if (!(dc->flags & DC_SAVED)) - { - dc->dwHookData = dwHookData; - dc->hookThunk = call_dc_hook16; - dc->hookProc = hookProc; - } - release_dc_ptr( dc ); - return TRUE; -} - - -/*********************************************************************** - * GetDCHook (GDI.191) - */ -DWORD WINAPI GetDCHook16( HDC16 hdc16, FARPROC16 *phookProc ) -{ - HDC hdc = HDC_32( hdc16 ); - DC *dc = get_dc_ptr( hdc ); - DWORD ret; - - if (!dc) return 0; - *phookProc = dc->hookProc; + if (proc) *proc = dc->hookProc; ret = dc->dwHookData; release_dc_ptr( dc ); return ret; diff --git a/dlls/gdi32/gdi16.c b/dlls/gdi32/gdi16.c index f442d51c8c8..5fd779e68b3 100644 --- a/dlls/gdi32/gdi16.c +++ b/dlls/gdi32/gdi16.c @@ -1768,6 +1768,26 @@ void WINAPI PlayMetaFileRecord16( HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr, } +/*********************************************************************** + * SetDCHook (GDI.190) + */ +BOOL16 WINAPI SetDCHook16( HDC16 hdc16, FARPROC16 hookProc, DWORD dwHookData ) +{ + FIXME( "%04x %p %x: not supported\n", hdc16, hookProc, dwHookData ); + return FALSE; +} + + +/*********************************************************************** + * GetDCHook (GDI.191) + */ +DWORD WINAPI GetDCHook16( HDC16 hdc16, FARPROC16 *phookProc ) +{ + FIXME( "%04x: not supported\n", hdc16 ); + return 0; +} + + /*********************************************************************** * SetHookFlags (GDI.192) */ diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 03c63d44968..a637a9827e8 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -252,8 +252,7 @@ typedef struct tagDC INT saveLevel; HDC saved_dc; DWORD_PTR dwHookData; - FARPROC16 hookProc; /* the original SEGPTR ... */ - DCHOOKPROC hookThunk; /* ... and the thunk to call it */ + DCHOOKPROC hookProc; /* DC hook */ INT wndOrgX; /* Window origin */ INT wndOrgY;