Author: tkreuzer
Date: Wed Apr 1 05:49:18 2009
New Revision: 40306
URL:
http://svn.reactos.org/svn/reactos?rev=40306&view=rev
Log:
win32k brush update:
- fix EBRUSHOBJ_vSetSolidBrushColor
- Initialize text and background brush in DC_AllocDC
- Update the DCs EBRUSHOBJs on demand
- Use the DCs EBRUSHOBJs for drawing where appropriate
This makes things faster and finally adds support for DC_BRUSH and DC_PEN
Modified:
trunk/reactos/subsystems/win32/win32k/eng/engbrush.c
trunk/reactos/subsystems/win32/win32k/include/brush.h
trunk/reactos/subsystems/win32/win32k/include/dc.h
trunk/reactos/subsystems/win32/win32k/objects/arc.c
trunk/reactos/subsystems/win32/win32k/objects/bitblt.c
trunk/reactos/subsystems/win32/win32k/objects/dclife.c
trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c
trunk/reactos/subsystems/win32/win32k/objects/dcutil.c
trunk/reactos/subsystems/win32/win32k/objects/drawing.c
trunk/reactos/subsystems/win32/win32k/objects/fillshap.c
trunk/reactos/subsystems/win32/win32k/objects/freetype.c
trunk/reactos/subsystems/win32/win32k/objects/line.c
trunk/reactos/subsystems/win32/win32k/objects/region.c
Modified: trunk/reactos/subsystems/win32/win32k/eng/engbrush.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/en…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/engbrush.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/engbrush.c [iso-8859-1] Wed Apr 1 05:49:18
2009
@@ -111,10 +111,20 @@
VOID
FASTCALL
-EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, ULONG iSolidColor)
-{
+EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, COLORREF crColor, XLATEOBJ *pxlo)
+{
+ ULONG iSolidColor;
+
/* Never use with non-solid brushes */
ASSERT(pebo->flattrs & GDIBRUSH_IS_SOLID);
+
+ /* Set the RGB color */
+ pebo->crRealize = crColor;
+ pebo->ulRGBColor = crColor;
+
+ /* Translate the brush color to the target format */
+ iSolidColor = XLATEOBJ_iXlate(pxlo, crColor);
+ pebo->BrushObject.iSolidColor = iSolidColor;
pebo->BrushObject.iSolidColor = iSolidColor;
}
@@ -169,7 +179,7 @@
/* Check if it's a GDI realisation */
if (pebo->pengbrush)
{
-
+ EngDeleteSurface(pebo->pengbrush);
}
else if (pebo->BrushObject.pvRbrush)
{
Modified: trunk/reactos/subsystems/win32/win32k/include/brush.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/in…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/brush.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/include/brush.h [iso-8859-1] Wed Apr 1 05:49:18
2009
@@ -110,7 +110,7 @@
VOID
FASTCALL
-EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, ULONG iSolidColor);
+EBRUSHOBJ_vSetSolidBrushColor(EBRUSHOBJ *pebo, COLORREF crColor, XLATEOBJ *pxlo);
VOID
FASTCALL
Modified: trunk/reactos/subsystems/win32/win32k/include/dc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/in…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/dc.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/include/dc.h [iso-8859-1] Wed Apr 1 05:49:18
2009
@@ -246,6 +246,10 @@
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
VOID FASTCALL DC_vUpdateViewportExt(PDC pdc);
VOID FASTCALL DC_vCopyState(PDC pdcSrc, PDC pdcDst);
+VOID FASTCALL DC_vUpdateFillBrush(PDC pdc);
+VOID FASTCALL DC_vUpdateLineBrush(PDC pdc);
+VOID FASTCALL DC_vUpdateTextBrush(PDC pdc);
+VOID FASTCALL DC_vUpdateBackgroundBrush(PDC pdc);
BOOL FASTCALL DCU_SyncDcAttrtoUser(PDC);
BOOL FASTCALL DCU_SynchDcAttrtoUser(HDC);
Modified: trunk/reactos/subsystems/win32/win32k/objects/arc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/arc.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/arc.c [iso-8859-1] Wed Apr 1 05:49:18
2009
@@ -165,8 +165,6 @@
return FALSE;
}
- EBRUSHOBJ_vInit(&dc->eboLine, pbrushPen, dc->rosdc.XlatePen);
-
if (arctype == GdiTypePie)
{
PUTLINE(CenterX, CenterY, SfCx + CenterX, SfCy + CenterY, dc->eboLine);
@@ -222,11 +220,11 @@
pdcattr = dc->pdcattr;
- if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
- IntGdiSelectBrush(dc,pdcattr->hbrush);
-
- if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
- IntGdiSelectPen(dc,pdcattr->hpen);
+ 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)
{
Modified: trunk/reactos/subsystems/win32/win32k/objects/bitblt.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/bitblt.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/bitblt.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -192,10 +192,7 @@
POINTL SourcePoint, BrushOrigin;
BOOL Status = FALSE;
XLATEOBJ *XlateObj = NULL;
- PBRUSH pbrush = NULL;
- EBRUSHOBJ BrushInst;
BOOL UsesSource = ROP3_USES_SOURCE(ROP);
- BOOL UsesPattern = ROP3_USES_PATTERN(ROP);
DCDest = DC_LockDc(hDCDest);
if (NULL == DCDest)
@@ -237,8 +234,8 @@
pdcattr = DCDest->pdcattr;
- if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
- IntGdiSelectBrush(DCDest,pdcattr->hbrush);
+ if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
+ DC_vUpdateFillBrush(DCDest);
/* Offset the destination and source by the origin of their DCs. */
XDest += DCDest->ptlDCOrig.x;
@@ -283,18 +280,6 @@
}
}
- if (UsesPattern)
- {
- pbrush = BRUSH_LockBrush(pdcattr->hbrush);
- if (NULL == pbrush)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- goto cleanup;
- }
- BrushOrigin = *((PPOINTL)&pbrush->ptOrigin);
- EBRUSHOBJ_vInit(&BrushInst, pbrush, DCDest->rosdc.XlateBrush);
- }
-
/* Create the XLATEOBJ. */
if (UsesSource)
{
@@ -310,11 +295,17 @@
}
/* Perform the bitblt operation */
- Status = IntEngBitBlt(&BitmapDest->SurfObj, BitmapSrc ?
&BitmapSrc->SurfObj : NULL, NULL,
- DCDest->rosdc.CombinedClip, XlateObj, &DestRect,
- &SourcePoint, NULL,
- pbrush ? &BrushInst.BrushObject : NULL,
- &BrushOrigin, ROP3_TO_ROP4(ROP));
+ Status = IntEngBitBlt(&BitmapDest->SurfObj,
+ BitmapSrc ? &BitmapSrc->SurfObj : NULL,
+ NULL,
+ DCDest->rosdc.CombinedClip,
+ XlateObj,
+ &DestRect,
+ &SourcePoint,
+ NULL,
+ &DCDest->eboFill.BrushObject,
+ &DCDest->dclevel.pbrFill->ptOrigin,
+ ROP3_TO_ROP4(ROP));
cleanup:
if (UsesSource && XlateObj != NULL)
@@ -327,10 +318,6 @@
if (BitmapSrc != NULL && BitmapSrc != BitmapDest)
{
SURFACE_UnlockSurface(BitmapSrc);
- }
- if (pbrush != NULL)
- {
- BRUSH_UnlockBrush(pbrush);
}
if (UsesSource && hDCSrc != hDCDest)
{
@@ -756,10 +743,7 @@
BOOL Status = FALSE;
XLATEOBJ *XlateObj = NULL;
POINTL BrushOrigin;
- PBRUSH pbrush = NULL;
- EBRUSHOBJ BrushInst;
BOOL UsesSource = ROP3_USES_SOURCE(ROP);
- BOOL UsesPattern = ROP3_USES_PATTERN(ROP);
if (0 == WidthDest || 0 == HeightDest || 0 == WidthSrc || 0 == HeightSrc)
{
@@ -808,8 +792,8 @@
pdcattr = DCDest->pdcattr;
- if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
- IntGdiSelectBrush(DCDest,pdcattr->hbrush);
+ if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
+ DC_vUpdateFillBrush(DCDest);
/* Offset the destination and source by the origin of their DCs. */
XOriginDest += DCDest->ptlDCOrig.x;
@@ -865,37 +849,27 @@
}
}
- if (UsesPattern)
- {
- pbrush = BRUSH_LockBrush(pdcattr->hbrush);
- if (NULL == pbrush)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- goto failed;
- }
- BrushOrigin = *((PPOINTL)&pbrush->ptOrigin);
- EBRUSHOBJ_vInit(&BrushInst, pbrush, DCDest->rosdc.XlateBrush);
- }
-
/* Offset the brush */
BrushOrigin.x += DCDest->ptlDCOrig.x;
BrushOrigin.y += DCDest->ptlDCOrig.y;
/* Perform the bitblt operation */
- Status = IntEngStretchBlt(&BitmapDest->SurfObj, &BitmapSrc->SurfObj,
- NULL, DCDest->rosdc.CombinedClip, XlateObj,
- &DestRect, &SourceRect, NULL,
- pbrush ? &BrushInst.BrushObject : NULL,
- &BrushOrigin, ROP3_TO_ROP4(ROP));
+ Status = IntEngStretchBlt(&BitmapDest->SurfObj,
+ &BitmapSrc->SurfObj,
+ NULL,
+ DCDest->rosdc.CombinedClip,
+ XlateObj,
+ &DestRect,
+ &SourceRect,
+ NULL,
+ &DCDest->eboFill.BrushObject,
+ &BrushOrigin,
+ ROP3_TO_ROP4(ROP));
failed:
if (XlateObj)
{
EngDeleteXlate(XlateObj);
- }
- if (pbrush)
- {
- BRUSH_UnlockBrush(pbrush);
}
if (BitmapSrc && DCSrc->rosdc.hBitmap != DCDest->rosdc.hBitmap)
{
Modified: trunk/reactos/subsystems/win32/win32k/objects/dclife.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dclife.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dclife.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -22,6 +22,7 @@
HDC hDC;
PWSTR Buf = NULL;
XFORM xformTemplate;
+ PBRUSH pbrush;
if (Driver != NULL)
{
@@ -104,8 +105,16 @@
/* Create the default pen / line brush */
pdcattr->hpen = NtGdiGetStockObject(BLACK_PEN);
NewDC->dclevel.pbrLine = PEN_ShareLockPen(pdcattr->hpen);
- EBRUSHOBJ_vInit(&NewDC->eboLine, NewDC->dclevel.pbrFill, NULL);
-
+ EBRUSHOBJ_vInit(&NewDC->eboLine, NewDC->dclevel.pbrLine, NULL);
+
+ /* Create the default text brush */
+ pbrush = BRUSH_ShareLockBrush(NtGdiGetStockObject(BLACK_BRUSH));
+ EBRUSHOBJ_vInit(&NewDC->eboText, pbrush, NULL);
+ pdcattr->ulDirty_ |= DIRTY_TEXT;
+
+ /* Create the default background brush */
+ pbrush = BRUSH_ShareLockBrush(NtGdiGetStockObject(WHITE_BRUSH));
+ EBRUSHOBJ_vInit(&NewDC->eboBackground, pbrush, NULL);
pdcattr->hlfntNew = NtGdiGetStockObject(SYSTEM_FONT);
TextIntRealizeFont(pdcattr->hlfntNew,NULL);
@@ -148,6 +157,10 @@
DC_vSelectSurface(pDC, NULL);
DC_vSelectFillBrush(pDC, NULL);
DC_vSelectLineBrush(pDC, NULL);
+
+ /* Dereference default brushes */
+ BRUSH_ShareUnlockBrush(pDC->eboText.pbrush);
+ BRUSH_ShareUnlockBrush(pDC->eboBackground.pbrush);
return TRUE;
}
Modified: trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -73,7 +73,6 @@
PDC_ATTR pdcattr = pdc->pdcattr;
PBRUSH pbrFill;
XLATEOBJ *pxlo = NULL;
- ULONG iSolidColor;
/* Check if the brush handle has changed */
if (pdcattr->hbrush != pdc->dclevel.pbrFill->BaseObject.hHmgr)
@@ -96,9 +95,6 @@
{
/* Invalid brush handle, restore old one */
pdcattr->hbrush = pdc->dclevel.pbrFill->BaseObject.hHmgr;
-
- /* ROS HACK, should use surf xlate */
- IntUpdateBrushXlate(pdc, &pdc->rosdc.XlateBrush,
pdc->dclevel.pbrFill);
}
}
@@ -108,11 +104,8 @@
/* Check for DC brush */
if (pdcattr->hbrush == StockObjects[DC_BRUSH])
{
- /* Translate the color to the target format */
- iSolidColor = XLATEOBJ_iXlate(pxlo, pdcattr->crPenClr);
-
/* Update the eboFill's solid color */
- EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboFill, iSolidColor);
+ EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboFill, pdcattr->crPenClr, pxlo);
}
/* Clear flags */
@@ -126,16 +119,12 @@
PDC_ATTR pdcattr = pdc->pdcattr;
PBRUSH pbrLine;
XLATEOBJ *pxlo;
- ULONG iSolidColor;
-
- /* ROS HACK, should use surf xlate */
- pxlo = pdc->rosdc.XlatePen;
/* Check if the pen handle has changed */
if (pdcattr->hpen != pdc->dclevel.pbrLine->BaseObject.hHmgr)
{
/* Try to lock the new pen */
- pbrLine = BRUSH_ShareLockBrush(pdcattr->hpen);
+ pbrLine = PEN_ShareLockPen(pdcattr->hpen);
if (pbrLine)
{
/* Unlock old brush, set new brush */
@@ -152,9 +141,6 @@
{
/* Invalid pen handle, restore old one */
pdcattr->hpen = pdc->dclevel.pbrLine->BaseObject.hHmgr;
-
- /* ROS HACK, should use surf xlate */
- IntUpdateBrushXlate(pdc, &pdc->rosdc.XlatePen,
pdc->dclevel.pbrLine);
}
}
@@ -164,11 +150,8 @@
/* Check for DC pen */
if (pdcattr->hpen == StockObjects[DC_PEN])
{
- /* Translate the color to the target format */
- iSolidColor = XLATEOBJ_iXlate(pxlo, pdcattr->crPenClr);
-
/* Update the eboLine's solid color */
- EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboLine, iSolidColor);
+ EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboLine, pdcattr->crPenClr, pxlo);
}
/* Clear flags */
@@ -180,17 +163,27 @@
DC_vUpdateTextBrush(PDC pdc)
{
PDC_ATTR pdcattr = pdc->pdcattr;
- XLATEOBJ *pxlo;
- ULONG iSolidColor;
-
- /* ROS HACK, should use surf xlate */
- pxlo = pdc->rosdc.XlatePen;
-
- /* Translate the color to the target format */
- iSolidColor = XLATEOBJ_iXlate(pxlo, pdcattr->crForegroundClr);
+ XLATEOBJ *pxlo = NULL;
+ SURFACE *psurf;
+ HPALETTE hpal;
+
+// psurf = pdc->dclevel.pSurface;
+ psurf = SURFACE_LockSurface(pdc->rosdc.hBitmap);
+ if (psurf)
+ {
+ hpal = psurf->hDIBPalette;
+ if (!hpal) hpal = pPrimarySurface->DevInfo.hpalDefault;
+ pxlo = IntEngCreateXlate(0, PAL_RGB, hpal, NULL);
+ SURFACE_UnlockSurface(psurf);
+ }
/* Update the eboText's solid color */
- EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboText, iSolidColor);
+ EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboText, pdcattr->crForegroundClr,
pxlo);
+
+ if (pxlo)
+ {
+ EngDeleteXlate(pxlo);
+ }
/* Clear flag */
pdcattr->ulDirty_ &= ~DIRTY_TEXT;
@@ -201,17 +194,27 @@
DC_vUpdateBackgroundBrush(PDC pdc)
{
PDC_ATTR pdcattr = pdc->pdcattr;
- XLATEOBJ *pxlo;
- ULONG iSolidColor;
-
- /* ROS HACK, should use surf xlate */
- pxlo = pdc->rosdc.XlatePen;
-
- /* Translate the color to the target format */
- iSolidColor = XLATEOBJ_iXlate(pxlo, pdcattr->crBackgroundClr);
+ XLATEOBJ *pxlo = NULL;
+ SURFACE *psurf;
+ HPALETTE hpal;
+
+// psurf = pdc->dclevel.pSurface;
+ psurf = SURFACE_LockSurface(pdc->rosdc.hBitmap);
+ if (psurf)
+ {
+ hpal = psurf->hDIBPalette;
+ if (!hpal) hpal = pPrimarySurface->DevInfo.hpalDefault;
+ pxlo = IntEngCreateXlate(0, PAL_RGB, hpal, NULL);
+ SURFACE_UnlockSurface(psurf);
+ }
/* Update the eboBackground's solid color */
- EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboBackground, iSolidColor);
+ EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboBackground,
pdcattr->crBackgroundClr, pxlo);
+
+ if (pxlo)
+ {
+ EngDeleteXlate(pxlo);
+ }
/* Clear flag */
pdcattr->ulDirty_ &= ~DIRTY_BACKGROUND;
@@ -270,33 +273,15 @@
{
PDC_ATTR pdcattr;
HBRUSH hOrgBrush;
- PBRUSH pbrush;
- BOOLEAN bSuccess;
if (pDC == NULL || hBrush == NULL) return NULL;
pdcattr = pDC->pdcattr;
-
- pbrush = BRUSH_LockBrush(hBrush);
- if (pbrush == NULL)
- {
- SetLastWin32Error(ERROR_INVALID_HANDLE);
- return NULL;
- }
hOrgBrush = pdcattr->hbrush;
pdcattr->hbrush = hBrush;
- DC_vSelectFillBrush(pDC, pbrush);
-
- bSuccess = IntUpdateBrushXlate(pDC, &pDC->rosdc.XlateBrush, pbrush);
- BRUSH_UnlockBrush(pbrush);
- if(!bSuccess)
- {
- return NULL;
- }
-
- pdcattr->ulDirty_ &= ~DC_BRUSH_DIRTY;
+ DC_vUpdateFillBrush(pDC);
return hOrgBrush;
}
@@ -309,33 +294,15 @@
{
PDC_ATTR pdcattr;
HPEN hOrgPen = NULL;
- PBRUSH pbrushPen;
- BOOLEAN bSuccess;
if (pDC == NULL || hPen == NULL) return NULL;
pdcattr = pDC->pdcattr;
-
- pbrushPen = PEN_LockPen(hPen);
- if (pbrushPen == NULL)
- {
- return NULL;
- }
hOrgPen = pdcattr->hpen;
pdcattr->hpen = hPen;
- DC_vSelectLineBrush(pDC, pbrushPen);
-
- bSuccess = IntUpdateBrushXlate(pDC, &pDC->rosdc.XlatePen, pbrushPen);
- PEN_UnlockPen(pbrushPen);
- if (!bSuccess)
- {
- SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES);
- return NULL;
- }
-
- pdcattr->ulDirty_ &= ~DC_PEN_DIRTY;
+ DC_vUpdateLineBrush(pDC);
return hOrgPen;
}
@@ -361,7 +328,10 @@
return NULL;
}
- hOrgBrush = IntGdiSelectBrush(pDC,hBrush);
+// hOrgBrush = IntGdiSelectBrush(pDC,hBrush);
+ hOrgBrush = pDC->pdcattr->hbrush;
+ pDC->pdcattr->hbrush = hBrush;
+ DC_vUpdateFillBrush(pDC);
DC_UnlockDc(pDC);
@@ -388,7 +358,10 @@
return NULL;
}
- hOrgPen = IntGdiSelectPen(pDC, hPen);
+// hOrgPen = IntGdiSelectPen(pDC, hPen);
+ hOrgPen = pDC->pdcattr->hpen;
+ pDC->pdcattr->hpen = hPen;
+ DC_vUpdateLineBrush(pDC);
DC_UnlockDc(pDC);
Modified: trunk/reactos/subsystems/win32/win32k/objects/dcutil.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dcutil.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dcutil.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -75,25 +75,26 @@
IntGdiSetTextColor(HDC hDC,
COLORREF color)
{
- COLORREF oldColor;
- PDC dc = DC_LockDc(hDC);
- PDC_ATTR pdcattr;
- HBRUSH hBrush;
-
- if (!dc)
+ COLORREF crOldColor;
+ PDC pdc;
+ PDC_ATTR pdcattr;
+
+ pdc = DC_LockDc(hDC);
+ if (!pdc)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return CLR_INVALID;
}
- pdcattr = dc->pdcattr;
-
- oldColor = pdcattr->crForegroundClr;
+ pdcattr = pdc->pdcattr;
+
+ // What about ulForegroundClr, like in gdi32?
+ crOldColor = pdcattr->crForegroundClr;
pdcattr->crForegroundClr = color;
- hBrush = pdcattr->hbrush;
- pdcattr->ulDirty_ &= ~(DIRTY_TEXT|DIRTY_LINE|DIRTY_FILL);
- DC_UnlockDc(dc);
- NtGdiSelectBrush(hDC, hBrush);
- return oldColor;
+ DC_vUpdateTextBrush(pdc);
+
+ DC_UnlockDc(pdc);
+
+ return crOldColor;
}
VOID
Modified: trunk/reactos/subsystems/win32/win32k/objects/drawing.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/drawing.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/drawing.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -1192,7 +1192,6 @@
DWORD ROP = PATCOPY;
RECTL DestRect;
SURFACE *psurf;
- EBRUSHOBJ eboFill;
POINTL BrushOrigin;
BOOL Ret = TRUE;
PDC_ATTR pdcattr;
@@ -1236,11 +1235,6 @@
else
ROP = PATCOPY;
- if (Pen)
- EBRUSHOBJ_vInit(&eboFill, pbrush, dc->rosdc.XlatePen);
- else
- EBRUSHOBJ_vInit(&eboFill, pbrush, dc->rosdc.XlateBrush);
-
Ret = IntEngBitBlt(
&psurf->SurfObj,
NULL,
@@ -1250,7 +1244,7 @@
&DestRect,
NULL,
NULL,
- &eboFill.BrushObject, // use pDC->eboFill
+ Pen ? &dc->eboLine.BrushObject : &dc->eboFill.BrushObject,
&BrushOrigin,
ROP3_TO_ROP4(ROP));
}
Modified: trunk/reactos/subsystems/win32/win32k/objects/fillshap.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/fillshap.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/fillshap.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -36,8 +36,7 @@
int Count)
{
SURFACE *psurf;
- PBRUSH pbrushLine, pbrushFill;
- EBRUSHOBJ eboLine, eboFill;
+ PBRUSH pbrLine, pbrFill;
BOOL ret = FALSE; // default to failure
RECTL DestRect;
int CurrentPoint;
@@ -95,31 +94,31 @@
IntGdiSelectPen(dc,pdcattr->hpen);
/* Special locking order to avoid lock-ups */
- pbrushFill = BRUSH_LockBrush(pdcattr->hbrush);
- pbrushLine = PEN_LockPen(pdcattr->hpen);
+ pbrFill = dc->dclevel.pbrFill;
+ pbrLine = dc->dclevel.pbrLine;
psurf = SURFACE_LockSurface(dc->rosdc.hBitmap);
/* FIXME - psurf can be NULL!!!! don't assert but handle this case
gracefully! */
ASSERT(psurf);
- /* Now fill the polygon with the current brush. */
- if (pbrushFill && !(pbrushFill->flAttrs & GDIBRUSH_IS_NULL))
+ /* Now fill the polygon with the current fill brush. */
+ if (!(pbrFill->flAttrs & GDIBRUSH_IS_NULL))
{
- BrushOrigin = *((PPOINTL)&pbrushFill->ptOrigin);
+ BrushOrigin = *((PPOINTL)&pbrFill->ptOrigin);
BrushOrigin.x += dc->ptlDCOrig.x;
BrushOrigin.y += dc->ptlDCOrig.y;
- EBRUSHOBJ_vInit(&eboFill, pbrushFill, dc->rosdc.XlateBrush);
- ret = IntFillPolygon (dc, psurf, &eboFill.BrushObject, Points, Count,
- DestRect, &BrushOrigin);
+ ret = IntFillPolygon (dc,
+ psurf,
+ &dc->eboFill.BrushObject,
+ Points,
+ Count,
+ DestRect,
+ &BrushOrigin);
}
- if (pbrushFill)
- BRUSH_UnlockBrush(pbrushFill);
// Draw the Polygon Edges with the current pen ( if not a NULL pen )
- if (pbrushLine && !(pbrushLine->flAttrs & GDIBRUSH_IS_NULL))
+ if (!(pbrLine->flAttrs & GDIBRUSH_IS_NULL))
{
int i;
-
- EBRUSHOBJ_vInit(&eboLine, pbrushLine, dc->rosdc.XlatePen);
for (i = 0; i < Count-1; i++)
{
@@ -130,7 +129,7 @@
ret = IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
Points[i].x, /* From */
Points[i].y,
Points[i+1].x, /* To */
@@ -144,7 +143,7 @@
{
ret = IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
Points[Count-1].x, /* From */
Points[Count-1].y,
Points[0].x, /* To */
@@ -153,8 +152,6 @@
ROP2_TO_MIX(pdcattr->jROP2)); /* MIX */
}
}
- if (pbrushLine)
- PEN_UnlockPen(pbrushLine);
}
SURFACE_UnlockSurface(psurf);
@@ -522,8 +519,7 @@
int BottomRect)
{
SURFACE *psurf = NULL;
- PBRUSH pbrushLine = NULL, pbrushFill = NULL;
- EBRUSHOBJ eboLine, eboFill;
+ PBRUSH pbrLine, pbrFill;
BOOL ret = FALSE; // default to failure
RECTL DestRect;
MIX Mix;
@@ -578,10 +574,9 @@
if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
IntGdiSelectPen(dc,pdcattr->hpen);
- /* Special locking order to avoid lock-ups! */
- pbrushFill = BRUSH_LockBrush(pdcattr->hbrush);
- pbrushLine = PEN_LockPen(pdcattr->hpen);
- if (!pbrushLine)
+ pbrFill = dc->dclevel.pbrFill;
+ pbrLine = dc->dclevel.pbrLine;
+ if (!pbrLine)
{
ret = FALSE;
goto cleanup;
@@ -593,14 +588,13 @@
goto cleanup;
}
- if ( pbrushFill )
- {
- if (!(pbrushFill->flAttrs & GDIBRUSH_IS_NULL))
+ if (pbrFill)
+ {
+ if (!(pbrFill->flAttrs & GDIBRUSH_IS_NULL))
{
- BrushOrigin = *((PPOINTL)&pbrushFill->ptOrigin);
+ BrushOrigin = *((PPOINTL)&pbrFill->ptOrigin);
BrushOrigin.x += dc->ptlDCOrig.x;
BrushOrigin.y += dc->ptlDCOrig.y;
- EBRUSHOBJ_vInit(&eboFill, pbrushFill, dc->rosdc.XlateBrush);
ret = IntEngBitBlt(&psurf->SurfObj,
NULL,
NULL,
@@ -609,57 +603,49 @@
&DestRect,
NULL,
NULL,
- &eboFill.BrushObject,
+ &dc->eboFill.BrushObject,
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
}
}
- EBRUSHOBJ_vInit(&eboLine, pbrushLine, dc->rosdc.XlatePen);
-
// Draw the rectangle with the current pen
ret = TRUE; // change default to success
- if (!(pbrushLine->flAttrs & GDIBRUSH_IS_NULL))
+ if (!(pbrLine->flAttrs & GDIBRUSH_IS_NULL))
{
Mix = ROP2_TO_MIX(pdcattr->jROP2);
ret = ret && IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
DestRect.left, DestRect.top, DestRect.right,
DestRect.top,
&DestRect, // Bounding rectangle
Mix);
ret = ret && IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
DestRect.right, DestRect.top, DestRect.right,
DestRect.bottom,
&DestRect, // Bounding rectangle
Mix);
ret = ret && IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
DestRect.right, DestRect.bottom, DestRect.left,
DestRect.bottom,
&DestRect, // Bounding rectangle
Mix);
ret = ret && IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
DestRect.left, DestRect.bottom, DestRect.left,
DestRect.top,
&DestRect, // Bounding rectangle
Mix);
}
cleanup:
- if (pbrushFill)
- BRUSH_UnlockBrush(pbrushFill);
-
- if (pbrushLine)
- PEN_UnlockPen(pbrushLine);
-
if (psurf)
SURFACE_UnlockSurface(psurf);
@@ -1086,12 +1072,10 @@
PDC dc;
PDC_ATTR pdcattr;
SURFACE *psurf = NULL;
- PBRUSH pbrushFill = NULL;
- EBRUSHOBJ eboFill;
+ PBRUSH pbrFill = NULL;
BOOL Ret = FALSE;
RECTL DestRect;
POINTL Pt;
- POINTL BrushOrigin;
DPRINT1("FIXME: NtGdiExtFloodFill is UNIMPLEMENTED\n");
@@ -1110,11 +1094,11 @@
pdcattr = dc->pdcattr;
- if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
- IntGdiSelectPen(dc,pdcattr->hpen);
-
- if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
- IntGdiSelectBrush(dc,pdcattr->hbrush);
+ if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
+ DC_vUpdateFillBrush(dc);
+
+ if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
+ DC_vUpdateLineBrush(dc);
Pt.x = XStart;
Pt.y = YStart;
@@ -1126,8 +1110,8 @@
else
goto cleanup;
- pbrushFill = BRUSH_LockBrush(pdcattr->hbrush);
- if (!pbrushFill)
+ pbrFill = dc->dclevel.pbrFill;
+ if (!pbrFill)
{
Ret = FALSE;
goto cleanup;
@@ -1139,31 +1123,7 @@
goto cleanup;
}
- if ( pbrushFill && (FillType == FLOODFILLBORDER))
- {
- if (!(pbrushFill->flAttrs & GDIBRUSH_IS_NULL))
- {
- pbrushFill->BrushAttr.lbColor = Color;
- BrushOrigin = *((PPOINTL)&pbrushFill->ptOrigin);
- BrushOrigin.x += dc->ptlDCOrig.x;
- BrushOrigin.y += dc->ptlDCOrig.y;
- EBRUSHOBJ_vInit(&eboFill, pbrushFill, dc->rosdc.XlateBrush);
- Ret = IntEngBitBlt(&psurf->SurfObj, NULL, NULL,
- dc->rosdc.CombinedClip, NULL,
- &DestRect, NULL, NULL,
- &eboFill.BrushObject,
- &BrushOrigin,
- ROP3_TO_ROP4(PATCOPY));
- }
- }
- else
- {
- }
-
cleanup:
- if (pbrushFill)
- BRUSH_UnlockBrush(pbrushFill);
-
if (psurf)
SURFACE_UnlockSurface(psurf);
Modified: trunk/reactos/subsystems/win32/win32k/objects/freetype.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/freetype.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/freetype.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -3128,12 +3128,6 @@
FT_Bool use_kerning;
RECTL DestRect, MaskRect;
POINTL SourcePoint, BrushOrigin;
- HBRUSH hbrushText = NULL;
- PBRUSH pbrushText = NULL;
- EBRUSHOBJ eboText;
- HBRUSH hbrushBackGnd = NULL;
- PBRUSH pbrushBackGnd = NULL;
- EBRUSHOBJ eboBackGnd;
HBITMAP HSourceGlyph;
SURFOBJ *SourceGlyphSurf;
SIZEL bitSize;
@@ -3142,9 +3136,7 @@
FONTOBJ *FontObj;
PFONTGDI FontGDI;
PTEXTOBJ TextObj = NULL;
- PPALGDI PalDestGDI;
XLATEOBJ *XlateObj=NULL, *XlateObj2=NULL;
- ULONG Mode;
FT_Render_Mode RenderMode;
BOOLEAN Render;
POINT Start;
@@ -3168,6 +3160,15 @@
}
pdcattr = dc->pdcattr;
+
+ if (pdcattr->ulDirty_ & DIRTY_TEXT)
+ DC_vUpdateTextBrush(dc);
+
+ if ((fuOptions & ETO_OPAQUE) || pdcattr->jBkMode == OPAQUE)
+ {
+ if (pdcattr->ulDirty_ & DIRTY_BACKGROUND)
+ DC_vUpdateBackgroundBrush(dc);
+ }
/* Check if String is valid */
if ((Count > 0xFFFF) || (Count > 0 && String == NULL))
@@ -3202,7 +3203,6 @@
goto fail;
}
SurfObj = &psurf->SurfObj;
- ASSERT(SurfObj);
Start.x = XStart;
Start.y = YStart;
@@ -3214,45 +3214,12 @@
/* Create the brushes */
hDestPalette = psurf->hDIBPalette;
if (!hDestPalette) hDestPalette = pPrimarySurface->DevInfo.hpalDefault;
- PalDestGDI = PALETTE_LockPalette(hDestPalette);
- if ( !PalDestGDI )
- Mode = PAL_RGB;
- else
- {
- Mode = PalDestGDI->Mode;
- PALETTE_UnlockPalette(PalDestGDI);
- }
- XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, hDestPalette, NULL);
+ XlateObj = (XLATEOBJ*)IntEngCreateXlate(0, PAL_RGB, hDestPalette, NULL);
if ( !XlateObj )
{
goto fail;
}
- hbrushText = NtGdiCreateSolidBrush(XLATEOBJ_iXlate(XlateObj,
pdcattr->crForegroundClr), 0);
- if ( !hbrushText )
- {
- goto fail;
- }
- pbrushText = BRUSH_LockBrush(hbrushText);
- if ( !pbrushText )
- {
- goto fail;
- }
- EBRUSHOBJ_vInit(&eboText, pbrushText, NULL);
- if ((fuOptions & ETO_OPAQUE) || pdcattr->jBkMode == OPAQUE)
- {
- hbrushBackGnd = NtGdiCreateSolidBrush(XLATEOBJ_iXlate(XlateObj,
pdcattr->crBackgroundClr), 0);
- if ( !hbrushBackGnd )
- {
- goto fail;
- }
- pbrushBackGnd = BRUSH_LockBrush(hbrushBackGnd);
- if ( !pbrushBackGnd )
- {
- goto fail;
- }
- EBRUSHOBJ_vInit(&eboBackGnd, pbrushBackGnd, NULL);
- }
- XlateObj2 = (XLATEOBJ*)IntEngCreateXlate(PAL_RGB, Mode, NULL, hDestPalette);
+ XlateObj2 = (XLATEOBJ*)IntEngCreateXlate(PAL_RGB, 0, NULL, hDestPalette);
if ( !XlateObj2 )
{
goto fail;
@@ -3281,7 +3248,7 @@
&DestRect,
&SourcePoint,
&SourcePoint,
- &eboBackGnd.BrushObject,
+ &dc->eboBackground.BrushObject,
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
fuOptions &= ~ETO_OPAQUE;
@@ -3527,7 +3494,7 @@
&DestRect,
&SourcePoint,
&SourcePoint,
- &eboBackGnd.BrushObject,
+ &dc->eboBackground.BrushObject,
&BrushOrigin,
ROP3_TO_ROP4(PATCOPY));
BackgroundLeft = DestRect.right;
@@ -3599,7 +3566,7 @@
&DestRect,
&SourcePoint,
(PPOINTL)&MaskRect,
- &eboText.BrushObject,
+ &dc->eboText.BrushObject,
&BrushOrigin);
EngUnlockSurface(SourceGlyphSurf);
@@ -3638,13 +3605,6 @@
SURFACE_UnlockSurface(psurf);
if (TextObj != NULL)
TEXTOBJ_UnlockText(TextObj);
- if (hbrushBackGnd != NULL)
- {
- BRUSH_UnlockBrush(pbrushBackGnd);
- GreDeleteObject(hbrushBackGnd);
- }
- BRUSH_UnlockBrush(pbrushText);
- GreDeleteObject(hbrushText);
good:
DC_UnlockDc( dc );
@@ -3659,16 +3619,6 @@
TEXTOBJ_UnlockText(TextObj);
if (psurf != NULL)
SURFACE_UnlockSurface(psurf);
- if (hbrushBackGnd != NULL)
- {
- BRUSH_UnlockBrush(pbrushBackGnd);
- GreDeleteObject(hbrushBackGnd);
- }
- if (hbrushText != NULL)
- {
- BRUSH_UnlockBrush(pbrushText);
- GreDeleteObject(hbrushText);
- }
DC_UnlockDc(dc);
return FALSE;
Modified: trunk/reactos/subsystems/win32/win32k/objects/line.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/line.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/line.c [iso-8859-1] Wed Apr 1 05:49:18
2009
@@ -89,12 +89,10 @@
{
SURFACE *psurf;
BOOL Ret = TRUE;
- PBRUSH pbrushLine;
- EBRUSHOBJ eboLine;
+ PBRUSH pbrLine;
RECTL Bounds;
POINT Points[2];
PDC_ATTR pdcattr = dc->pdcattr;
-
if (PATH_IsPathOpen(dc->dclevel))
{
@@ -112,11 +110,8 @@
}
else
{
- if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
- IntGdiSelectBrush(dc,pdcattr->hbrush);
-
- if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
- IntGdiSelectPen(dc,pdcattr->hpen);
+ if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
+ DC_vUpdateLineBrush(dc);
psurf = SURFACE_LockSurface( dc->rosdc.hBitmap );
if (NULL == psurf)
@@ -144,20 +139,14 @@
Bounds.bottom = max(Points[0].y, Points[1].y);
/* get BRUSH from current pen. */
- pbrushLine = PEN_LockPen( pdcattr->hpen );
- if (!pbrushLine)
- {
- /* default to BLACK_PEN */
- pbrushLine = PEN_LockPen(NtGdiGetStockObject(BLACK_PEN));
- ASSERT(pbrushLine);
- }
-
- if (!(pbrushLine->flAttrs & GDIBRUSH_IS_NULL))
- {
- EBRUSHOBJ_vInit(&eboLine, pbrushLine, dc->rosdc.XlatePen);
+ pbrLine = dc->dclevel.pbrLine;
+ ASSERT(pbrLine);
+
+ if (!(pbrLine->flAttrs & GDIBRUSH_IS_NULL))
+ {
Ret = IntEngLineTo(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
Points[0].x, Points[0].y,
Points[1].x, Points[1].y,
&Bounds,
@@ -165,7 +154,6 @@
}
SURFACE_UnlockSurface(psurf);
- PEN_UnlockPen( pbrushLine );
}
if (Ret)
@@ -251,8 +239,7 @@
int Count)
{
SURFACE *psurf;
- BRUSH *pbrushLine;
- EBRUSHOBJ eboLine;
+ BRUSH *pbrLine;
LPPOINT Points;
BOOL Ret = TRUE;
LONG i;
@@ -261,18 +248,17 @@
if (PATH_IsPathOpen(dc->dclevel))
return PATH_Polyline(dc, pt, Count);
- if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
- IntGdiSelectBrush(dc,pdcattr->hbrush);
-
- if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
- IntGdiSelectPen(dc,pdcattr->hpen);
+ if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY))
+ DC_vUpdateFillBrush(dc);
+
+ if (pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY))
+ DC_vUpdateLineBrush(dc);
/* Get BRUSHOBJ from current pen. */
- pbrushLine = PEN_LockPen(pdcattr->hpen);
- /* FIXME - pbrushLine can be NULL! Don't assert here! */
- ASSERT(pbrushLine);
-
- if (!(pbrushLine->flAttrs & GDIBRUSH_IS_NULL))
+ pbrLine = dc->dclevel.pbrLine;
+ ASSERT(pbrLine);
+
+ if (!(pbrLine->flAttrs & GDIBRUSH_IS_NULL))
{
Points = EngAllocMem(0, Count * sizeof(POINT), TAG_COORD);
if (Points != NULL)
@@ -292,10 +278,9 @@
Points[i].y += dc->ptlDCOrig.y;
}
- EBRUSHOBJ_vInit(&eboLine, pbrushLine, dc->rosdc.XlatePen);
Ret = IntEngPolyline(&psurf->SurfObj,
dc->rosdc.CombinedClip,
- &eboLine.BrushObject,
+ &dc->eboLine.BrushObject,
Points,
Count,
ROP2_TO_MIX(pdcattr->jROP2));
@@ -308,8 +293,6 @@
Ret = FALSE;
}
}
-
- PEN_UnlockPen(pbrushLine);
return Ret;
}
Modified: trunk/reactos/subsystems/win32/win32k/objects/region.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ob…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/region.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/region.c [iso-8859-1] Wed Apr 1
05:49:18 2009
@@ -2903,14 +2903,14 @@
PROSRGNDATA visrgn;
CLIPOBJ* ClipRegion;
BOOL bRet = FALSE;
- PBRUSH pbrush;
- EBRUSHOBJ eboFill;
POINTL BrushOrigin;
SURFACE *psurf;
PDC_ATTR pdcattr;
if (!dc) return FALSE;
pdcattr = dc->pdcattr;
+
+ ASSERT(!(pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)));
if (!(tmpVisRgn = NtGdiCreateRectRgn(0, 0, 0, 0))) return FALSE;
@@ -2935,9 +2935,6 @@
visrgn->Buffer,
&visrgn->rdh.rcBound );
ASSERT(ClipRegion);
- pbrush = BRUSH_LockBrush(pdcattr->hbrush);
- ASSERT(pbrush);
- EBRUSHOBJ_vInit(&eboFill, pbrush, dc->rosdc.XlateBrush);
BrushOrigin.x = pdcattr->ptlBrushOrigin.x;
BrushOrigin.y = pdcattr->ptlBrushOrigin.y;
@@ -2946,12 +2943,11 @@
bRet = IntEngPaint(&psurf->SurfObj,
ClipRegion,
- &eboFill.BrushObject,
+ &dc->eboFill.BrushObject,
&BrushOrigin,
0xFFFF);//FIXME:don't know what to put here
SURFACE_UnlockSurface(psurf);
- BRUSH_UnlockBrush(pbrush);
REGION_UnlockRgn(visrgn);
GreDeleteObject(tmpVisRgn);