Module: wine Branch: master Commit: 50dea3817868f471549107ea992f67ddbd8b05dc URL: http://source.winehq.org/git/wine.git/?a=commit;h=50dea3817868f471549107ea99...
Author: Alexandre Julliard julliard@winehq.org Date: Sun Feb 17 20:29:55 2008 +0100
gdi32: Export the DC hook functions as 32-bit functions.
---
dlls/gdi32/clipping.c | 11 ++++++----- dlls/gdi32/dc.c | 25 ++++++++++++++++++++++--- dlls/gdi32/gdi16.c | 18 ++++++++++++++++++ dlls/gdi32/gdi32.spec | 5 +++-- dlls/wineps.drv/init.c | 3 +-- dlls/winex11.drv/dce.c | 13 +++++-------- include/wine/wingdi16.h | 9 --------- include/wingdi.h | 16 ++++++++++++++++ 8 files changed, 71 insertions(+), 29 deletions(-)
diff --git a/dlls/gdi32/clipping.c b/dlls/gdi32/clipping.c index 2c53dfb..e3a5851 100644 --- a/dlls/gdi32/clipping.c +++ b/dlls/gdi32/clipping.c @@ -163,22 +163,23 @@ INT WINAPI ExtSelectClipRgn( HDC hdc, HRGN hrgn, INT fnMode ) }
/*********************************************************************** - * SelectVisRgn (GDI.105) + * SelectVisRgn (GDI32.@) + * + * Note: not exported on Windows, only the 16-bit version is exported. */ -INT16 WINAPI SelectVisRgn16( HDC16 hdc16, HRGN16 hrgn ) +INT WINAPI SelectVisRgn( HDC hdc, HRGN hrgn ) { int retval; - HDC hdc = HDC_32( hdc16 ); DC * dc;
if (!hrgn) return ERROR; if (!(dc = get_dc_ptr( hdc ))) return ERROR;
- TRACE("%p %04x\n", hdc, hrgn ); + TRACE("%p %p\n", hdc, hrgn );
dc->dirty = 0;
- retval = CombineRgn( dc->hVisRgn, HRGN_32(hrgn), 0, RGN_COPY ); + retval = CombineRgn( dc->hVisRgn, hrgn, 0, RGN_COPY ); CLIPPING_UpdateGCRegion( dc ); release_dc_ptr( dc ); return retval; diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index ba59a8d..3678791 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -1395,6 +1395,24 @@ BOOL WINAPI SetDCHook( HDC hdc, DCHOOKPROC hookProc, DWORD_PTR dwHookData ) }
+/*********************************************************************** + * GetDCHook (GDI32.@) + * + * Note: this doesn't exist in Win32, we add it here because user32 needs it. + */ +DWORD_PTR WINAPI GetDCHook( HDC hdc, DCHOOKPROC *proc ) +{ + DC *dc = get_dc_ptr( hdc ); + 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 ) { @@ -1454,11 +1472,12 @@ DWORD WINAPI GetDCHook16( HDC16 hdc16, FARPROC16 *phookProc )
/*********************************************************************** - * SetHookFlags (GDI.192) + * SetHookFlags (GDI32.@) + * + * Note: this doesn't exist in Win32, we add it here because user32 needs it. */ -WORD WINAPI SetHookFlags16(HDC16 hdc16, WORD flags) +WORD WINAPI SetHookFlags( HDC hdc, WORD flags ) { - HDC hdc = HDC_32( hdc16 ); DC *dc = get_dc_obj( hdc ); /* not get_dc_ptr, this needs to work from any thread */ LONG ret = 0;
diff --git a/dlls/gdi32/gdi16.c b/dlls/gdi32/gdi16.c index 02bb16f..b0cea2e 100644 --- a/dlls/gdi32/gdi16.c +++ b/dlls/gdi32/gdi16.c @@ -1347,6 +1347,15 @@ BOOL16 WINAPI PtVisible16( HDC16 hdc, INT16 x, INT16 y )
/*********************************************************************** + * SelectVisRgn (GDI.105) + */ +INT16 WINAPI SelectVisRgn16( HDC16 hdc, HRGN16 hrgn ) +{ + return SelectVisRgn( HDC_32(hdc), HRGN_32(hrgn) ); +} + + +/*********************************************************************** * SetBitmapBits (GDI.106) */ LONG WINAPI SetBitmapBits16( HBITMAP16 hbitmap, LONG count, LPCVOID buffer ) @@ -1567,6 +1576,15 @@ void WINAPI PlayMetaFileRecord16( HDC16 hdc, HANDLETABLE16 *ht, METARECORD *mr,
/*********************************************************************** + * SetHookFlags (GDI.192) + */ +WORD WINAPI SetHookFlags16( HDC16 hdc, WORD flags ) +{ + return SetHookFlags( HDC_32(hdc), flags ); +} + + +/*********************************************************************** * SetBoundsRect (GDI.193) */ UINT16 WINAPI SetBoundsRect16( HDC16 hdc, const RECT16* rect, UINT16 flags ) diff --git a/dlls/gdi32/gdi32.spec b/dlls/gdi32/gdi32.spec index 1a41c20..4738a38 100644 --- a/dlls/gdi32/gdi32.spec +++ b/dlls/gdi32/gdi32.spec @@ -515,10 +515,11 @@ @ stdcall CloseJob16(long) @ stdcall DrvGetPrinterData16(str str ptr ptr long ptr) @ stdcall DrvSetPrinterData16(str str long ptr long) +@ stdcall GetDCHook(long ptr) @ stdcall OpenJob16(str str long) -@ stdcall SelectVisRgn16(long long) +@ stdcall SelectVisRgn(long long) @ stdcall SetDCHook(long ptr long) -@ stdcall SetHookFlags16(long long) +@ stdcall SetHookFlags(long long) @ stdcall WriteSpool16(long ptr long)
################################################################ diff --git a/dlls/wineps.drv/init.c b/dlls/wineps.drv/init.c index 0024640..e492730 100644 --- a/dlls/wineps.drv/init.c +++ b/dlls/wineps.drv/init.c @@ -37,7 +37,6 @@ #include "windef.h" #include "winbase.h" #include "winerror.h" -#include "wownt32.h" #include "winreg.h" #include "psdrv.h" #include "winspool.h" @@ -406,7 +405,7 @@ HDC PSDRV_ResetDC( PSDRV_PDEVICE *physDev, const DEVMODEW *lpInitData ) HeapFree(PSDRV_Heap, 0, devmodeA); PSDRV_UpdateDevCaps(physDev); hrgn = CreateRectRgn(0, 0, physDev->horzRes, physDev->vertRes); - SelectVisRgn16(HDC_16(physDev->hdc), HRGN_16(hrgn)); + SelectVisRgn( physDev->hdc, hrgn ); DeleteObject(hrgn); } return physDev->hdc; diff --git a/dlls/winex11.drv/dce.c b/dlls/winex11.drv/dce.c index 11d869e..a60ddb1 100644 --- a/dlls/winex11.drv/dce.c +++ b/dlls/winex11.drv/dce.c @@ -27,10 +27,7 @@ #include "win.h" #include "windef.h" #include "wingdi.h" -#include "wownt32.h" #include "x11drv.h" -#include "wine/winbase16.h" -#include "wine/wingdi16.h" #include "wine/server.h" #include "wine/list.h" #include "wine/debug.h" @@ -170,7 +167,7 @@ static void update_visible_region( struct dce *dce ) OffsetRgn( vis_rgn, -(escape.drawable_rect.left + escape.dc_rect.left), -(escape.drawable_rect.top + escape.dc_rect.top) ); - SelectVisRgn16( HDC_16(dce->hdc), HRGN_16(vis_rgn) ); + SelectVisRgn( dce->hdc, vis_rgn ); DeleteObject( vis_rgn ); }
@@ -214,7 +211,7 @@ static void delete_clip_rgn( struct dce *dce ) dce->clip_rgn = 0;
/* make it dirty so that the vis rgn gets recomputed next time */ - SetHookFlags16( HDC_16(dce->hdc), DCHF_INVALIDATEVISRGN ); + SetHookFlags( dce->hdc, DCHF_INVALIDATEVISRGN ); }
@@ -317,7 +314,7 @@ void alloc_window_dce( struct x11drv_win_data *data ) if (win_style & WS_CLIPCHILDREN) dce->flags |= DCX_CLIPCHILDREN; if (win_style & WS_CLIPSIBLINGS) dce->flags |= DCX_CLIPSIBLINGS; } - SetHookFlags16( HDC_16(dce->hdc), DCHF_INVALIDATEVISRGN ); + SetHookFlags( dce->hdc, DCHF_INVALIDATEVISRGN );
EnterCriticalSection( &dce_section ); list_add_tail( &dce_list, &dce->entry ); @@ -427,7 +424,7 @@ void invalidate_dce( HWND hwnd, const RECT *rect ) /* Set dirty bits in the hDC and DCE structs */
TRACE("\tfixed up %p dce [%p]\n", dce, dce->hwnd); - SetHookFlags16( HDC_16(dce->hdc), DCHF_INVALIDATEVISRGN ); + SetHookFlags( dce->hdc, DCHF_INVALIDATEVISRGN ); } } } /* dce list */ @@ -561,7 +558,7 @@ HDC X11DRV_GetDCEx( HWND hwnd, HRGN hrgnClip, DWORD flags ) dce->hwnd = hwnd; dce->flags = (dce->flags & ~clip_flags) | (flags & clip_flags);
- if (SetHookFlags16( HDC_16(dce->hdc), DCHF_VALIDATEVISRGN )) + if (SetHookFlags( dce->hdc, DCHF_VALIDATEVISRGN )) bUpdateVisRgn = TRUE; /* DC was dirty */
if (bUpdateVisRgn) update_visible_region( dce ); diff --git a/include/wine/wingdi16.h b/include/wine/wingdi16.h index c360d10..c56c7b1 100644 --- a/include/wine/wingdi16.h +++ b/include/wine/wingdi16.h @@ -269,7 +269,6 @@ typedef struct FONTSIGNATURE ntmFontSig; } NEWTEXTMETRICEX16,*LPNEWTEXTMETRICEX16;
-typedef BOOL (CALLBACK *DCHOOKPROC)(HDC,WORD,DWORD_PTR,LPARAM); typedef INT16 (CALLBACK *FONTENUMPROC16)(SEGPTR,SEGPTR,UINT16,LPARAM); typedef VOID (CALLBACK *LINEDDAPROC16)(INT16,INT16,LPARAM); typedef INT16 (CALLBACK *GOBJENUMPROC16)(SEGPTR,LPARAM); @@ -343,13 +342,6 @@ struct PATH_INFO { DWORD BkColor; };
-/* DC hook codes */ -#define DCHC_INVALIDVISRGN 0x0001 -#define DCHC_DELETEDC 0x0002 - -#define DCHF_INVALIDATEVISRGN 0x0001 -#define DCHF_VALIDATEVISRGN 0x0002 - /* RenderMode */ #define RENDERMODE_NO_DISPLAY 0 #define RENDERMODE_OPEN 1 @@ -577,7 +569,6 @@ COLORREF WINAPI SetBkColor16(HDC16,COLORREF); INT16 WINAPI SetBkMode16(HDC16,INT16); UINT16 WINAPI SetBoundsRect16(HDC16,const RECT16*,UINT16); DWORD WINAPI SetBrushOrg16(HDC16,INT16,INT16); -BOOL WINAPI SetDCHook(HDC,DCHOOKPROC,DWORD_PTR); BOOL16 WINAPI SetDCHook16(HDC16,FARPROC16,DWORD); DWORD WINAPI SetDCOrg16(HDC16,INT16,INT16); VOID WINAPI SetDCState16(HDC16,HDC16); diff --git a/include/wingdi.h b/include/wingdi.h index 6af58ff..ea65928 100644 --- a/include/wingdi.h +++ b/include/wingdi.h @@ -3725,6 +3725,22 @@ WINGDIAPI BOOL WINAPI wglSwapLayerBuffers(HDC,UINT); WINGDIAPI BOOL WINAPI wglUseFontBitmaps(HDC,DWORD,DWORD,DWORD); WINGDIAPI BOOL WINAPI wglUseFontOutlines(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,INT,LPGLYPHMETRICSFLOAT);
+#ifdef __WINESRC__ +/* the DC hook support is only exported on Win16, the 32-bit version is a Wine extension */ + +#define DCHC_INVALIDVISRGN 0x0001 +#define DCHC_DELETEDC 0x0002 +#define DCHF_INVALIDATEVISRGN 0x0001 +#define DCHF_VALIDATEVISRGN 0x0002 + +typedef BOOL (CALLBACK *DCHOOKPROC)(HDC,WORD,DWORD_PTR,LPARAM); + +WINGDIAPI DWORD_PTR WINAPI GetDCHook(HDC,DCHOOKPROC*); +WINGDIAPI BOOL WINAPI SetDCHook(HDC,DCHOOKPROC,DWORD_PTR); +WINGDIAPI WORD WINAPI SetHookFlags(HDC,WORD); +WINGDIAPI INT WINAPI SelectVisRgn(HDC,HRGN); +#endif /* __WINESRC__ */ + #ifdef __cplusplus } #endif