Author: tkreuzer Date: Thu Apr 26 09:30:15 2012 New Revision: 56427
URL: http://svn.reactos.org/svn/reactos?rev=56427&view=rev Log: [WIN32K] Pass EBRUSHOBJ to IntPatBlt instead of the BRUSH. This way we can use the DC's eboFill, instead of initializing a new EBRUSHOBJ.
Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c
Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/bitblt.c?... ============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] Thu Apr 26 09:30:15 2012 @@ -733,15 +733,15 @@ INT Width, INT Height, DWORD dwRop, - PBRUSH pbrush) + PEBRUSHOBJ pebo) { RECTL DestRect; SURFACE *psurf; - EBRUSHOBJ eboFill ; POINTL BrushOrigin; BOOL ret; - - ASSERT(pbrush); + PBRUSH pbrush = pebo->pbrush; + + ASSERT(pebo);
FIXUP_ROP(dwRop);
@@ -790,11 +790,6 @@
psurf = pdc->dclevel.pSurface;
- if (pdc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) - DC_vUpdateFillBrush(pdc); - - EBRUSHOBJ_vInit(&eboFill, pbrush, pdc); - ret = IntEngBitBlt( &psurf->SurfObj, NULL, @@ -804,13 +799,11 @@ &DestRect, NULL, NULL, - &eboFill.BrushObject, + &pebo->BrushObject, &BrushOrigin, ROP_TO_ROP4(dwRop));
DC_vFinishBlit(pdc, NULL); - - EBRUSHOBJ_vCleanup(&eboFill);
return ret; } @@ -826,6 +819,7 @@ INT i; PBRUSH pbrush; PDC pdc; + EBRUSHOBJ eboFill;
pdc = DC_LockDc(hDC); if (!pdc) @@ -844,8 +838,13 @@ for (i = 0; i < cRects; i++) { pbrush = BRUSH_ShareLockBrush(pRects->hBrush); - if(pbrush != NULL) - { + + /* Check if we could lock the brush */ + if (pbrush != NULL) + { + /* Initialize a brush object */ + EBRUSHOBJ_vInit(&eboFill, pbrush, pdc); + IntPatBlt( pdc, pRects->r.left, @@ -853,7 +852,10 @@ pRects->r.right, pRects->r.bottom, dwRop, - pbrush); + &eboFill); + + /* Cleanup the brush object and unlock the brush */ + EBRUSHOBJ_vCleanup(&eboFill); BRUSH_ShareUnlockBrush(pbrush); } pRects++; @@ -873,7 +875,6 @@ INT Height, DWORD ROP) { - PBRUSH pbrush; DC *dc; PDC_ATTR pdcattr; BOOL ret; @@ -884,8 +885,6 @@ /* In this case we call on GdiMaskBlt */ return NtGdiMaskBlt(hDC, XLeft, YLeft, Width, Height, 0,0,0,0,0,0,ROP,0); } - -if ((XLeft == 0) && (YLeft == 0) && (Width == 592) && (Height == 362)) __debugbreak();
dc = DC_LockDc(hDC); if (dc == NULL) @@ -906,17 +905,8 @@ if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) DC_vUpdateFillBrush(dc);
- pbrush = BRUSH_ShareLockBrush(pdcattr->hbrush); - if (pbrush == NULL) - { - EngSetLastError(ERROR_INVALID_HANDLE); - DC_UnlockDc(dc); - return FALSE; - } - - ret = IntPatBlt(dc, XLeft, YLeft, Width, Height, ROP, pbrush); - - BRUSH_ShareUnlockBrush(pbrush); + ret = IntPatBlt(dc, XLeft, YLeft, Width, Height, ROP, &dc->eboFill); + DC_UnlockDc(dc);
return ret;