mirror of
https://github.com/reactos/reactos.git
synced 2025-04-21 04:37:15 +00:00
Get rid of the DCs XlateBrush and XlatePen. The resulting code isn't any better yet, but this step is needed for the upcoming xlateobj rewrite.
svn path=/trunk/; revision=41820
This commit is contained in:
parent
903a26ae64
commit
69d04cfc34
6 changed files with 72 additions and 78 deletions
|
@ -671,4 +671,53 @@ XLATEOBJ_cGetPalette(XLATEOBJ *XlateObj, ULONG PalOutType, ULONG cPal,
|
|||
return 0;
|
||||
}
|
||||
|
||||
// HACK!
|
||||
XLATEOBJ*
|
||||
IntCreateBrushXlate(PDC pdc, BRUSH *pbrush)
|
||||
{
|
||||
SURFACE * psurf;
|
||||
XLATEOBJ *pxlo = NULL;
|
||||
HPALETTE hPalette = NULL;
|
||||
|
||||
psurf = pdc->dclevel.pSurface;
|
||||
if (psurf)
|
||||
{
|
||||
hPalette = psurf->hDIBPalette;
|
||||
}
|
||||
if (!hPalette) hPalette = pPrimarySurface->DevInfo.hpalDefault;
|
||||
|
||||
if (pbrush->flAttrs & GDIBRUSH_IS_NULL)
|
||||
{
|
||||
pxlo = NULL;
|
||||
}
|
||||
else if (pbrush->flAttrs & GDIBRUSH_IS_SOLID)
|
||||
{
|
||||
pxlo = IntEngCreateXlate(0, PAL_RGB, hPalette, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
SURFACE *psurfPattern = SURFACE_LockSurface(pbrush->hbmPattern);
|
||||
if (psurfPattern == NULL)
|
||||
return FALSE;
|
||||
|
||||
/* Special case: 1bpp pattern */
|
||||
if (psurfPattern->SurfObj.iBitmapFormat == BMF_1BPP)
|
||||
{
|
||||
if (pdc->rosdc.bitsPerPixel != 1)
|
||||
pxlo = IntEngCreateSrcMonoXlate(hPalette,
|
||||
pdc->pdcattr->crBackgroundClr,
|
||||
pbrush->BrushAttr.lbColor);
|
||||
}
|
||||
else if (pbrush->flAttrs & GDIBRUSH_IS_DIB)
|
||||
{
|
||||
pxlo = IntEngCreateXlate(0, 0, hPalette, psurfPattern->hDIBPalette);
|
||||
}
|
||||
|
||||
SURFACE_UnlockSurface(psurfPattern);
|
||||
}
|
||||
|
||||
return pxlo;
|
||||
}
|
||||
|
||||
|
||||
/* EOF */
|
||||
|
|
|
@ -21,8 +21,6 @@ typedef struct _ROS_DC_INFO
|
|||
BYTE bitsPerPixel;
|
||||
|
||||
CLIPOBJ *CombinedClip;
|
||||
XLATEOBJ *XlateBrush;
|
||||
XLATEOBJ *XlatePen;
|
||||
|
||||
UNICODE_STRING DriverName;
|
||||
|
||||
|
|
|
@ -107,6 +107,9 @@ IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
|
|||
ULONG Color0,
|
||||
ULONG Color1);
|
||||
|
||||
XLATEOBJ*
|
||||
IntCreateBrushXlate(PDC pdc, BRUSH *pbrush);
|
||||
|
||||
HPALETTE FASTCALL
|
||||
IntEngGetXlatePalette(XLATEOBJ *XlateObj,
|
||||
ULONG Palette);
|
||||
|
|
|
@ -941,6 +941,7 @@ IntPatBlt(
|
|||
EBRUSHOBJ eboFill;
|
||||
POINTL BrushOrigin;
|
||||
BOOL ret;
|
||||
XLATEOBJ *pxlo;
|
||||
|
||||
ASSERT(pbrush);
|
||||
|
||||
|
@ -988,7 +989,8 @@ IntPatBlt(
|
|||
BrushOrigin.x = pbrush->ptOrigin.x + pdc->ptlDCOrig.x;
|
||||
BrushOrigin.y = pbrush->ptOrigin.y + pdc->ptlDCOrig.y;
|
||||
|
||||
EBRUSHOBJ_vInit(&eboFill, pbrush, pdc->rosdc.XlateBrush);
|
||||
pxlo = IntCreateBrushXlate(pdc, pbrush);
|
||||
EBRUSHOBJ_vInit(&eboFill, pbrush, pxlo);
|
||||
|
||||
ret = IntEngBitBlt(
|
||||
&psurf->SurfObj,
|
||||
|
@ -1003,6 +1005,8 @@ IntPatBlt(
|
|||
&BrushOrigin,
|
||||
ROP3_TO_ROP4(dwRop));
|
||||
|
||||
EngDeleteXlate(pxlo);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -500,10 +500,6 @@ IntGdiDeleteDC(HDC hDC, BOOL Force)
|
|||
NtGdiSelectBrush (DCHandle, STOCK_WHITE_BRUSH);
|
||||
NtGdiSelectFont (DCHandle, STOCK_SYSTEM_FONT);
|
||||
DC_LockDC (DCHandle); NtGdiSelectXxx does not recognize stock objects yet */
|
||||
if (DCToDelete->rosdc.XlateBrush != NULL)
|
||||
EngDeleteXlate(DCToDelete->rosdc.XlateBrush);
|
||||
if (DCToDelete->rosdc.XlatePen != NULL)
|
||||
EngDeleteXlate(DCToDelete->rosdc.XlatePen);
|
||||
}
|
||||
if (DCToDelete->rosdc.hClipRgn)
|
||||
{
|
||||
|
@ -719,7 +715,7 @@ NewNtGdiDeleteObjectApp(HANDLE DCHandle)
|
|||
return GreDeleteObject((HGDIOBJ) DCHandle);
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return (DCHandle != NULL);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/*
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
* PURPOSE: Functions for creation and destruction of DCs
|
||||
|
@ -11,60 +11,6 @@
|
|||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
// HACK!
|
||||
static
|
||||
BOOLEAN
|
||||
IntUpdateBrushXlate(PDC pdc, XLATEOBJ **ppxlo, BRUSH *pbrush)
|
||||
{
|
||||
SURFACE * psurf;
|
||||
XLATEOBJ *pxlo = NULL;
|
||||
HPALETTE hPalette = NULL;
|
||||
|
||||
psurf = pdc->dclevel.pSurface;
|
||||
if (psurf)
|
||||
{
|
||||
hPalette = psurf->hDIBPalette;
|
||||
}
|
||||
if (!hPalette) hPalette = pPrimarySurface->DevInfo.hpalDefault;
|
||||
|
||||
if (pbrush->flAttrs & GDIBRUSH_IS_NULL)
|
||||
{
|
||||
pxlo = NULL;
|
||||
}
|
||||
else if (pbrush->flAttrs & GDIBRUSH_IS_SOLID)
|
||||
{
|
||||
pxlo = IntEngCreateXlate(0, PAL_RGB, hPalette, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
SURFACE *psurfPattern = SURFACE_LockSurface(pbrush->hbmPattern);
|
||||
if (psurfPattern == NULL)
|
||||
return FALSE;
|
||||
|
||||
/* Special case: 1bpp pattern */
|
||||
if (psurfPattern->SurfObj.iBitmapFormat == BMF_1BPP)
|
||||
{
|
||||
if (pdc->rosdc.bitsPerPixel != 1)
|
||||
pxlo = IntEngCreateSrcMonoXlate(hPalette,
|
||||
pdc->pdcattr->crBackgroundClr,
|
||||
pbrush->BrushAttr.lbColor);
|
||||
}
|
||||
else if (pbrush->flAttrs & GDIBRUSH_IS_DIB)
|
||||
{
|
||||
pxlo = IntEngCreateXlate(0, 0, hPalette, psurfPattern->hDIBPalette);
|
||||
}
|
||||
|
||||
SURFACE_UnlockSurface(psurfPattern);
|
||||
}
|
||||
|
||||
if (*ppxlo != NULL)
|
||||
EngDeleteXlate(*ppxlo);
|
||||
|
||||
*ppxlo = pxlo;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
DC_vUpdateFillBrush(PDC pdc)
|
||||
|
@ -94,28 +40,27 @@ DC_vUpdateFillBrush(PDC pdc)
|
|||
}
|
||||
}
|
||||
|
||||
/* ROS HACK, should use surf xlate */
|
||||
pxlo = IntCreateBrushXlate(pdc, pdc->dclevel.pbrFill);
|
||||
|
||||
/* Check if the EBRUSHOBJ needs update */
|
||||
if (pdcattr->ulDirty_ & DIRTY_FILL)
|
||||
{
|
||||
pbrFill = pdc->dclevel.pbrFill;
|
||||
|
||||
/* ROS HACK, should use surf xlate */
|
||||
IntUpdateBrushXlate(pdc, &pdc->rosdc.XlateBrush, pbrFill);
|
||||
|
||||
/* Update eboFill, realizing it, if needed */
|
||||
EBRUSHOBJ_vUpdate(&pdc->eboFill, pbrFill, pdc->rosdc.XlateBrush);
|
||||
EBRUSHOBJ_vUpdate(&pdc->eboFill, pbrFill, pxlo);
|
||||
}
|
||||
|
||||
/* Check for DC brush */
|
||||
if (pdcattr->hbrush == StockObjects[DC_BRUSH])
|
||||
{
|
||||
/* ROS HACK, should use surf xlate */
|
||||
pxlo = pdc->rosdc.XlateBrush;
|
||||
|
||||
/* Update the eboFill's solid color */
|
||||
EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboFill, pdcattr->crPenClr, pxlo);
|
||||
}
|
||||
|
||||
EngDeleteXlate(pxlo);
|
||||
|
||||
/* Clear flags */
|
||||
pdcattr->ulDirty_ &= ~(DIRTY_FILL | DC_BRUSH_DIRTY);
|
||||
}
|
||||
|
@ -149,28 +94,27 @@ DC_vUpdateLineBrush(PDC pdc)
|
|||
}
|
||||
}
|
||||
|
||||
/* ROS HACK, should use surf xlate */
|
||||
pxlo = IntCreateBrushXlate(pdc, pdc->dclevel.pbrFill);
|
||||
|
||||
/* Check if the EBRUSHOBJ needs update */
|
||||
if (pdcattr->ulDirty_ & DIRTY_LINE)
|
||||
{
|
||||
pbrLine = pdc->dclevel.pbrLine;
|
||||
|
||||
/* ROS HACK, should use surf xlate */
|
||||
IntUpdateBrushXlate(pdc, &pdc->rosdc.XlatePen, pbrLine);
|
||||
|
||||
/* Update eboLine, realizing it, if needed */
|
||||
EBRUSHOBJ_vUpdate(&pdc->eboLine, pbrLine, pdc->rosdc.XlatePen);
|
||||
EBRUSHOBJ_vUpdate(&pdc->eboLine, pbrLine, pxlo);
|
||||
}
|
||||
|
||||
/* Check for DC pen */
|
||||
if (pdcattr->hpen == StockObjects[DC_PEN])
|
||||
{
|
||||
/* ROS HACK, should use surf xlate */
|
||||
pxlo = pdc->rosdc.XlatePen;
|
||||
|
||||
/* Update the eboLine's solid color */
|
||||
EBRUSHOBJ_vSetSolidBrushColor(&pdc->eboLine, pdcattr->crPenClr, pxlo);
|
||||
}
|
||||
|
||||
EngDeleteXlate(pxlo);
|
||||
|
||||
/* Clear flags */
|
||||
pdcattr->ulDirty_ &= ~(DIRTY_LINE | DC_PEN_DIRTY);
|
||||
}
|
||||
|
@ -434,7 +378,7 @@ NtGdiSelectClipPath(
|
|||
BOOL success = FALSE;
|
||||
PDC_ATTR pdcattr;
|
||||
PDC pdc;
|
||||
|
||||
|
||||
pdc = DC_LockDc(hDC);
|
||||
if (!pdc)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue