- Update brushes at the good moment in different places

svn path=/branches/reactos-yarotows/; revision=46965
This commit is contained in:
Jérôme Gardou 2010-04-20 20:23:15 +00:00
parent 650b476440
commit f2a22bfe7a
5 changed files with 52 additions and 34 deletions

View file

@ -219,12 +219,6 @@ IntGdiArcInternal(
pdcattr = dc->pdcattr; pdcattr = dc->pdcattr;
if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc);
if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(dc);
if (arctype == GdiTypeArcTo) if (arctype == GdiTypeArcTo)
{ {
if (dc->dclevel.flPath & DCPATH_CLOCKWISE) if (dc->dclevel.flPath & DCPATH_CLOCKWISE)
@ -331,6 +325,10 @@ NtGdiAngleArc(
worker1.l = dwSweepAngle; worker1.l = dwSweepAngle;
DC_vPrepareDCsForBlit(pDC, pDC->rosdc.CombinedClip->rclBounds, DC_vPrepareDCsForBlit(pDC, pDC->rosdc.CombinedClip->rclBounds,
NULL, pDC->rosdc.CombinedClip->rclBounds); NULL, pDC->rosdc.CombinedClip->rclBounds);
if (pDC->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(pDC);
if (pDC->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(pDC);
Ret = IntGdiAngleArc( pDC, x, y, dwRadius, worker.f, worker1.f); Ret = IntGdiAngleArc( pDC, x, y, dwRadius, worker.f, worker1.f);
DC_vFinishBlit(pDC, NULL); DC_vFinishBlit(pDC, NULL);
DC_UnlockDc( pDC ); DC_UnlockDc( pDC );
@ -370,6 +368,12 @@ NtGdiArcInternal(
DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds, DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds,
NULL, dc->rosdc.CombinedClip->rclBounds); NULL, dc->rosdc.CombinedClip->rclBounds);
if (dc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc);
if (dc->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(dc);
Ret = IntGdiArcInternal( Ret = IntGdiArcInternal(
arctype, arctype,
dc, dc,

View file

@ -64,7 +64,7 @@ typedef struct _Rect
} Rect, *PRect; } Rect, *PRect;
int FASTCALL IntFillRect(DC *dc, INT XLeft, INT YLeft, INT Width, INT Height, PBRUSH pbrush, BOOL Pen); int FASTCALL IntFillRect(DC *dc, INT XLeft, INT YLeft, INT Width, INT Height, PBRUSH pbrush, BOOL Pen);
int FASTCALL app_fill_rect(DC *dc, Rect r, PBRUSH pbrush, BOOL Pen); //int FASTCALL app_fill_rect(DC *dc, Rect r, PBRUSH pbrush, BOOL Pen);
static static
POINT POINT

View file

@ -481,6 +481,12 @@ NtGdiPolyPolyDraw( IN HDC hDC,
DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds, DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds,
NULL, dc->rosdc.CombinedClip->rclBounds); NULL, dc->rosdc.CombinedClip->rclBounds);
if (dc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc);
if (dc->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(dc);
/* Perform the actual work */ /* Perform the actual work */
switch (iFunc) switch (iFunc)
{ {
@ -681,6 +687,12 @@ NtGdiRectangle(HDC hDC,
} }
DC_vPrepareDCsForBlit(dc, rect, NULL, rect); DC_vPrepareDCsForBlit(dc, rect, NULL, rect);
if (dc->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc);
if (dc->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(dc);
ret = IntRectangle ( dc, LeftRect, TopRect, RightRect, BottomRect ); ret = IntRectangle ( dc, LeftRect, TopRect, RightRect, BottomRect );
DC_vFinishBlit(dc, NULL); DC_vFinishBlit(dc, NULL);
DC_UnlockDc ( dc ); DC_UnlockDc ( dc );

View file

@ -113,9 +113,6 @@ IntGdiLineTo(DC *dc,
} }
else else
{ {
if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(dc);
psurf = dc->dclevel.pSurface; psurf = dc->dclevel.pSurface;
if (NULL == psurf) if (NULL == psurf)
{ {
@ -250,6 +247,9 @@ IntGdiPolyline(DC *dc,
if (PATH_IsPathOpen(dc->dclevel)) if (PATH_IsPathOpen(dc->dclevel))
return PATH_Polyline(dc, pt, Count); return PATH_Polyline(dc, pt, Count);
DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds,
NULL, dc->rosdc.CombinedClip->rclBounds);
if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc); DC_vUpdateFillBrush(dc);
@ -265,8 +265,6 @@ IntGdiPolyline(DC *dc,
Points = EngAllocMem(0, Count * sizeof(POINT), TAG_COORD); Points = EngAllocMem(0, Count * sizeof(POINT), TAG_COORD);
if (Points != NULL) if (Points != NULL)
{ {
DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds,
NULL, dc->rosdc.CombinedClip->rclBounds);
psurf = dc->dclevel.pSurface; psurf = dc->dclevel.pSurface;
/* FIXME - psurf can be NULL!!!! /* FIXME - psurf can be NULL!!!!
Don't assert but handle this case gracefully! */ Don't assert but handle this case gracefully! */
@ -290,7 +288,6 @@ IntGdiPolyline(DC *dc,
ROP2_TO_MIX(pdcattr->jROP2)); ROP2_TO_MIX(pdcattr->jROP2));
EngFreeMem(Points); EngFreeMem(Points);
DC_vFinishBlit(dc, NULL);
} }
else else
{ {
@ -298,6 +295,8 @@ IntGdiPolyline(DC *dc,
} }
} }
DC_vFinishBlit(dc, NULL);
return Ret; return Ret;
} }
@ -409,6 +408,9 @@ NtGdiLineTo(HDC hDC,
DC_vPrepareDCsForBlit(dc, rcLockRect, NULL, rcLockRect); DC_vPrepareDCsForBlit(dc, rcLockRect, NULL, rcLockRect);
if (dc->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(dc);
Ret = IntGdiLineTo(dc, XEnd, YEnd); Ret = IntGdiLineTo(dc, XEnd, YEnd);
DC_vFinishBlit(dc, NULL); DC_vFinishBlit(dc, NULL);

View file

@ -2291,6 +2291,9 @@ NtGdiFillPath(HDC hDC)
return FALSE; return FALSE;
} }
DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds,
NULL, dc->rosdc.CombinedClip->rclBounds);
pdcattr = dc->pdcattr; pdcattr = dc->pdcattr;
if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY)) if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
@ -2299,9 +2302,6 @@ NtGdiFillPath(HDC hDC)
if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
DC_vUpdateFillBrush(dc); DC_vUpdateFillBrush(dc);
DC_vPrepareDCsForBlit(dc, dc->rosdc.CombinedClip->rclBounds,
NULL, dc->rosdc.CombinedClip->rclBounds);
ret = PATH_FillPath( dc, pPath ); ret = PATH_FillPath( dc, pPath );
if ( ret ) if ( ret )
{ {
@ -2573,6 +2573,9 @@ NtGdiStrokeAndFillPath(HDC hDC)
return FALSE; return FALSE;
} }
DC_vPrepareDCsForBlit(pDc, pDc->rosdc.CombinedClip->rclBounds,
NULL, pDc->rosdc.CombinedClip->rclBounds);
pdcattr = pDc->pdcattr; pdcattr = pDc->pdcattr;
if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
@ -2581,9 +2584,6 @@ NtGdiStrokeAndFillPath(HDC hDC)
if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY)) if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(pDc); DC_vUpdateLineBrush(pDc);
DC_vPrepareDCsForBlit(pDc, pDc->rosdc.CombinedClip->rclBounds,
NULL, pDc->rosdc.CombinedClip->rclBounds);
bRet = PATH_FillPath(pDc, pPath); bRet = PATH_FillPath(pDc, pPath);
if (bRet) bRet = PATH_StrokePath(pDc, pPath); if (bRet) bRet = PATH_StrokePath(pDc, pPath);
if (bRet) PATH_EmptyPath(pPath); if (bRet) PATH_EmptyPath(pPath);
@ -2617,14 +2617,14 @@ NtGdiStrokePath(HDC hDC)
return FALSE; return FALSE;
} }
DC_vPrepareDCsForBlit(pDc, pDc->rosdc.CombinedClip->rclBounds,
NULL, pDc->rosdc.CombinedClip->rclBounds);
pdcattr = pDc->pdcattr; pdcattr = pDc->pdcattr;
if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY)) if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
DC_vUpdateLineBrush(pDc); DC_vUpdateLineBrush(pDc);
DC_vPrepareDCsForBlit(pDc, pDc->rosdc.CombinedClip->rclBounds,
NULL, pDc->rosdc.CombinedClip->rclBounds);
bRet = PATH_StrokePath(pDc, pPath); bRet = PATH_StrokePath(pDc, pPath);
DC_vFinishBlit(pDc, NULL); DC_vFinishBlit(pDc, NULL);