Module: wine Branch: master Commit: f33bbbfdd7f56701e91e96945f27b258fe73c6d4 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f33bbbfdd7f56701e91e96945f...
Author: Huw Davies huw@codeweavers.com Date: Wed Apr 13 14:57:44 2011 +0100
gdi32: Keep track of the combined clip region.
---
dlls/gdi32/dibdrv/dc.c | 18 +++++++++++++++++- dlls/gdi32/gdi_private.h | 1 + 2 files changed, 18 insertions(+), 1 deletions(-)
diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c index e5048d4..9e97177 100644 --- a/dlls/gdi32/dibdrv/dc.c +++ b/dlls/gdi32/dibdrv/dc.c @@ -32,7 +32,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(dib); */ static BOOL CDECL dibdrv_DeleteDC( PHYSDEV dev ) { + dibdrv_physdev *pdev = get_dibdrv_pdev(dev); TRACE("(%p)\n", dev); + DeleteObject(pdev->clip); return 0; }
@@ -129,6 +131,7 @@ static HBITMAP CDECL dibdrv_SelectBitmap( PHYSDEV dev, HBITMAP bitmap ) if (!bmp) return 0; assert(bmp->dib);
+ pdev->clip = CreateRectRgn(0, 0, 0, 0); pdev->defer = 0;
if(!init_dib(&pdev->dib, &bmp->dib->dsBmih, bmp->dib->dsBitfields, bmp->dib->dsBm.bmBits)) @@ -140,6 +143,19 @@ static HBITMAP CDECL dibdrv_SelectBitmap( PHYSDEV dev, HBITMAP bitmap ) }
/*********************************************************************** + * dibdrv_SetDeviceClipping + */ +static void CDECL dibdrv_SetDeviceClipping( PHYSDEV dev, HRGN vis_rgn, HRGN clip_rgn ) +{ + PHYSDEV next = GET_NEXT_PHYSDEV( dev, pSetDeviceClipping ); + dibdrv_physdev *pdev = get_dibdrv_pdev(dev); + TRACE("(%p, %p, %p)\n", dev, vis_rgn, clip_rgn); + + CombineRgn( pdev->clip, vis_rgn, clip_rgn, clip_rgn ? RGN_AND : RGN_COPY ); + return next->funcs->pSetDeviceClipping( next, vis_rgn, clip_rgn); +} + +/*********************************************************************** * dibdrv_SetROP2 */ static INT CDECL dibdrv_SetROP2( PHYSDEV dev, INT rop ) @@ -245,7 +261,7 @@ const DC_FUNCTIONS dib_driver = NULL, /* pSetDIBColorTable */ NULL, /* pSetDIBits */ NULL, /* pSetDIBitsToDevice */ - NULL, /* pSetDeviceClipping */ + dibdrv_SetDeviceClipping, /* pSetDeviceClipping */ NULL, /* pSetDeviceGammaRamp */ NULL, /* pSetLayout */ NULL, /* pSetMapMode */ diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index 91f4acb..e126aa1 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -97,6 +97,7 @@ typedef struct dibdrv_physdev struct gdi_physdev dev; dib_info dib;
+ HRGN clip; DWORD defer;
/* pen */