Huw Davies : gdi32: Keep track of the combined clip region.
Alexandre Julliard
julliard at winehq.org
Fri Apr 15 10:19:25 CDT 2011
Module: wine
Branch: master
Commit: f33bbbfdd7f56701e91e96945f27b258fe73c6d4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f33bbbfdd7f56701e91e96945f27b258fe73c6d4
Author: Huw Davies <huw at 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 */
More information about the wine-cvs
mailing list