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