gdi32: Keep track of the combined clip region.

This commit is contained in:
Huw Davies 2011-04-13 14:57:44 +01:00 committed by Alexandre Julliard
parent 5d7e6b7506
commit f33bbbfdd7
2 changed files with 18 additions and 1 deletions

View File

@ -32,7 +32,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(dib);
*/ */
static BOOL CDECL dibdrv_DeleteDC( PHYSDEV dev ) static BOOL CDECL dibdrv_DeleteDC( PHYSDEV dev )
{ {
dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
TRACE("(%p)\n", dev); TRACE("(%p)\n", dev);
DeleteObject(pdev->clip);
return 0; return 0;
} }
@ -129,6 +131,7 @@ static HBITMAP CDECL dibdrv_SelectBitmap( PHYSDEV dev, HBITMAP bitmap )
if (!bmp) return 0; if (!bmp) return 0;
assert(bmp->dib); assert(bmp->dib);
pdev->clip = CreateRectRgn(0, 0, 0, 0);
pdev->defer = 0; pdev->defer = 0;
if(!init_dib(&pdev->dib, &bmp->dib->dsBmih, bmp->dib->dsBitfields, bmp->dib->dsBm.bmBits)) if(!init_dib(&pdev->dib, &bmp->dib->dsBmih, bmp->dib->dsBitfields, bmp->dib->dsBm.bmBits))
@ -139,6 +142,19 @@ static HBITMAP CDECL dibdrv_SelectBitmap( PHYSDEV dev, HBITMAP bitmap )
return next->funcs->pSelectBitmap( next, bitmap ); return next->funcs->pSelectBitmap( next, 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 * dibdrv_SetROP2
*/ */
@ -245,7 +261,7 @@ const DC_FUNCTIONS dib_driver =
NULL, /* pSetDIBColorTable */ NULL, /* pSetDIBColorTable */
NULL, /* pSetDIBits */ NULL, /* pSetDIBits */
NULL, /* pSetDIBitsToDevice */ NULL, /* pSetDIBitsToDevice */
NULL, /* pSetDeviceClipping */ dibdrv_SetDeviceClipping, /* pSetDeviceClipping */
NULL, /* pSetDeviceGammaRamp */ NULL, /* pSetDeviceGammaRamp */
NULL, /* pSetLayout */ NULL, /* pSetLayout */
NULL, /* pSetMapMode */ NULL, /* pSetMapMode */

View File

@ -97,6 +97,7 @@ typedef struct dibdrv_physdev
struct gdi_physdev dev; struct gdi_physdev dev;
dib_info dib; dib_info dib;
HRGN clip;
DWORD defer; DWORD defer;
/* pen */ /* pen */