mirror of
https://github.com/reactos/reactos.git
synced 2025-08-02 18:05:46 +00:00
Move NtGdiSelectClipPath, Nt/IntGdiSelectBrush, Nt/IntGdiSelectpen to dcobj.c, improve formatting, no code change.
svn path=/trunk/; revision=40242
This commit is contained in:
parent
ea055dde70
commit
cac93ee776
4 changed files with 303 additions and 289 deletions
|
@ -484,50 +484,6 @@ IntGdiCreateNullBrush(VOID)
|
||||||
return hBrush;
|
return hBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
HBRUSH
|
|
||||||
FASTCALL
|
|
||||||
IntGdiSelectBrush(
|
|
||||||
PDC pDC,
|
|
||||||
HBRUSH hBrush)
|
|
||||||
{
|
|
||||||
PDC_ATTR pdcattr;
|
|
||||||
HBRUSH hOrgBrush;
|
|
||||||
PBRUSH pbrush;
|
|
||||||
XLATEOBJ *XlateObj;
|
|
||||||
BOOLEAN bFailed;
|
|
||||||
|
|
||||||
if (pDC == NULL || hBrush == NULL) return NULL;
|
|
||||||
|
|
||||||
pdcattr = pDC->pdcattr;
|
|
||||||
|
|
||||||
pbrush = BRUSH_LockBrush(hBrush);
|
|
||||||
if (pbrush == NULL)
|
|
||||||
{
|
|
||||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
XlateObj = IntGdiCreateBrushXlate(pDC, pbrush, &bFailed);
|
|
||||||
BRUSH_UnlockBrush(pbrush);
|
|
||||||
if(bFailed)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
hOrgBrush = pdcattr->hbrush;
|
|
||||||
pdcattr->hbrush = hBrush;
|
|
||||||
|
|
||||||
if (pDC->rosdc.XlateBrush != NULL)
|
|
||||||
{
|
|
||||||
EngDeleteXlate(pDC->rosdc.XlateBrush);
|
|
||||||
}
|
|
||||||
pDC->rosdc.XlateBrush = XlateObj;
|
|
||||||
|
|
||||||
pdcattr->ulDirty_ &= ~DC_BRUSH_DIRTY;
|
|
||||||
|
|
||||||
return hOrgBrush;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* PUBLIC FUNCTIONS ***********************************************************/
|
/* PUBLIC FUNCTIONS ***********************************************************/
|
||||||
|
|
||||||
|
@ -675,31 +631,4 @@ IntGdiSetSolidBrushColor(HBRUSH hBrush, COLORREF Color)
|
||||||
BRUSH_UnlockBrush(pbrush);
|
BRUSH_UnlockBrush(pbrush);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* @implemented
|
|
||||||
*/
|
|
||||||
HBRUSH
|
|
||||||
APIENTRY
|
|
||||||
NtGdiSelectBrush(
|
|
||||||
IN HDC hDC,
|
|
||||||
IN HBRUSH hBrush)
|
|
||||||
{
|
|
||||||
PDC pDC;
|
|
||||||
HBRUSH hOrgBrush;
|
|
||||||
|
|
||||||
if (hDC == NULL || hBrush == NULL) return NULL;
|
|
||||||
|
|
||||||
pDC = DC_LockDc(hDC);
|
|
||||||
if (!pDC)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
hOrgBrush = IntGdiSelectBrush(pDC,hBrush);
|
|
||||||
|
|
||||||
DC_UnlockDc(pDC);
|
|
||||||
|
|
||||||
return hOrgBrush;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -164,8 +164,309 @@ DC_vUpdateBackgroundBrush(PDC pdc)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HPALETTE
|
||||||
|
FASTCALL
|
||||||
|
GdiSelectPalette(
|
||||||
|
HDC hDC,
|
||||||
|
HPALETTE hpal,
|
||||||
|
BOOL ForceBackground)
|
||||||
|
{
|
||||||
|
PDC pdc;
|
||||||
|
HPALETTE oldPal = NULL;
|
||||||
|
PPALGDI ppal;
|
||||||
|
|
||||||
|
// FIXME: mark the palette as a [fore\back]ground pal
|
||||||
|
pdc = DC_LockDc(hDC);
|
||||||
|
if (!pdc)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if this is a valid palette handle */
|
||||||
|
ppal = PALETTE_LockPalette(hpal);
|
||||||
|
if (!ppal)
|
||||||
|
{
|
||||||
|
DC_UnlockDc(pdc);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Is this a valid palette for this depth? */
|
||||||
|
if ((pdc->rosdc.bitsPerPixel <= 8 && ppal->Mode == PAL_INDEXED) ||
|
||||||
|
(pdc->rosdc.bitsPerPixel > 8 && ppal->Mode != PAL_INDEXED))
|
||||||
|
{
|
||||||
|
oldPal = pdc->dclevel.hpal;
|
||||||
|
pdc->dclevel.hpal = hpal;
|
||||||
|
}
|
||||||
|
else if (pdc->rosdc.bitsPerPixel > 8 && ppal->Mode == PAL_INDEXED)
|
||||||
|
{
|
||||||
|
oldPal = pdc->dclevel.hpal;
|
||||||
|
pdc->dclevel.hpal = hpal;
|
||||||
|
}
|
||||||
|
|
||||||
|
PALETTE_UnlockPalette(ppal);
|
||||||
|
DC_UnlockDc(pdc);
|
||||||
|
|
||||||
|
return oldPal;
|
||||||
|
}
|
||||||
|
|
||||||
|
HBRUSH
|
||||||
|
FASTCALL
|
||||||
|
IntGdiSelectBrush(
|
||||||
|
PDC pDC,
|
||||||
|
HBRUSH hBrush)
|
||||||
|
{
|
||||||
|
PDC_ATTR pdcattr;
|
||||||
|
HBRUSH hOrgBrush;
|
||||||
|
PBRUSH pbrush;
|
||||||
|
XLATEOBJ *XlateObj;
|
||||||
|
BOOLEAN bFailed;
|
||||||
|
|
||||||
|
if (pDC == NULL || hBrush == NULL) return NULL;
|
||||||
|
|
||||||
|
pdcattr = pDC->pdcattr;
|
||||||
|
|
||||||
|
pbrush = BRUSH_LockBrush(hBrush);
|
||||||
|
if (pbrush == NULL)
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
XlateObj = IntGdiCreateBrushXlate(pDC, pbrush, &bFailed);
|
||||||
|
BRUSH_UnlockBrush(pbrush);
|
||||||
|
if(bFailed)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hOrgBrush = pdcattr->hbrush;
|
||||||
|
pdcattr->hbrush = hBrush;
|
||||||
|
|
||||||
|
if (pDC->rosdc.XlateBrush != NULL)
|
||||||
|
{
|
||||||
|
EngDeleteXlate(pDC->rosdc.XlateBrush);
|
||||||
|
}
|
||||||
|
pDC->rosdc.XlateBrush = XlateObj;
|
||||||
|
|
||||||
|
pdcattr->ulDirty_ &= ~DC_BRUSH_DIRTY;
|
||||||
|
|
||||||
|
return hOrgBrush;
|
||||||
|
}
|
||||||
|
|
||||||
|
HPEN
|
||||||
|
FASTCALL
|
||||||
|
IntGdiSelectPen(
|
||||||
|
PDC pDC,
|
||||||
|
HPEN hPen)
|
||||||
|
{
|
||||||
|
PDC_ATTR pdcattr;
|
||||||
|
HPEN hOrgPen = NULL;
|
||||||
|
PBRUSH pbrushPen;
|
||||||
|
XLATEOBJ *XlateObj;
|
||||||
|
BOOLEAN bFailed;
|
||||||
|
|
||||||
|
if (pDC == NULL || hPen == NULL) return NULL;
|
||||||
|
|
||||||
|
pdcattr = pDC->pdcattr;
|
||||||
|
|
||||||
|
pbrushPen = PEN_LockPen(hPen);
|
||||||
|
if (pbrushPen == NULL)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
XlateObj = IntGdiCreateBrushXlate(pDC, pbrushPen, &bFailed);
|
||||||
|
PEN_UnlockPen(pbrushPen);
|
||||||
|
if (bFailed)
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hOrgPen = pdcattr->hpen;
|
||||||
|
pdcattr->hpen = hPen;
|
||||||
|
|
||||||
|
if (pDC->rosdc.XlatePen != NULL)
|
||||||
|
{
|
||||||
|
EngDeleteXlate(pDC->rosdc.XlatePen);
|
||||||
|
}
|
||||||
|
pdcattr->ulDirty_ &= ~DC_PEN_DIRTY;
|
||||||
|
|
||||||
|
pDC->rosdc.XlatePen = XlateObj;
|
||||||
|
|
||||||
|
return hOrgPen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
HBRUSH
|
||||||
|
APIENTRY
|
||||||
|
NtGdiSelectBrush(
|
||||||
|
IN HDC hDC,
|
||||||
|
IN HBRUSH hBrush)
|
||||||
|
{
|
||||||
|
PDC pDC;
|
||||||
|
HBRUSH hOrgBrush;
|
||||||
|
|
||||||
|
if (hDC == NULL || hBrush == NULL) return NULL;
|
||||||
|
|
||||||
|
pDC = DC_LockDc(hDC);
|
||||||
|
if (!pDC)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hOrgBrush = IntGdiSelectBrush(pDC,hBrush);
|
||||||
|
|
||||||
|
DC_UnlockDc(pDC);
|
||||||
|
|
||||||
|
return hOrgBrush;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @implemented
|
||||||
|
*/
|
||||||
|
HPEN
|
||||||
|
APIENTRY
|
||||||
|
NtGdiSelectPen(
|
||||||
|
IN HDC hDC,
|
||||||
|
IN HPEN hPen)
|
||||||
|
{
|
||||||
|
PDC pDC;
|
||||||
|
HPEN hOrgPen;
|
||||||
|
|
||||||
|
if (hDC == NULL || hPen == NULL) return NULL;
|
||||||
|
|
||||||
|
pDC = DC_LockDc(hDC);
|
||||||
|
if (!pDC)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
hOrgPen = IntGdiSelectPen(pDC, hPen);
|
||||||
|
|
||||||
|
DC_UnlockDc(pDC);
|
||||||
|
|
||||||
|
return hOrgPen;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL
|
||||||
|
APIENTRY
|
||||||
|
NtGdiSelectClipPath(
|
||||||
|
HDC hDC,
|
||||||
|
int Mode)
|
||||||
|
{
|
||||||
|
HRGN hrgnPath;
|
||||||
|
PPATH pPath;
|
||||||
|
BOOL success = FALSE;
|
||||||
|
PDC_ATTR pdcattr;
|
||||||
|
PDC pdc;
|
||||||
|
|
||||||
|
pdc = DC_LockDc(hDC);
|
||||||
|
if (!pdc)
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
pdcattr = pdc->pdcattr;
|
||||||
|
|
||||||
|
pPath = PATH_LockPath(pdc->dclevel.hPath);
|
||||||
|
if (!pPath)
|
||||||
|
{
|
||||||
|
DC_UnlockDc(pdc);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check that path is closed */
|
||||||
|
if (pPath->state != PATH_Closed)
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_CAN_NOT_COMPLETE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Construct a region from the path */
|
||||||
|
else if (PATH_PathToRegion(pPath, pdcattr->jFillMode, &hrgnPath))
|
||||||
|
{
|
||||||
|
success = GdiExtSelectClipRgn(pdc, hrgnPath, Mode) != ERROR;
|
||||||
|
GreDeleteObject( hrgnPath );
|
||||||
|
|
||||||
|
/* Empty the path */
|
||||||
|
if (success)
|
||||||
|
PATH_EmptyPath(pPath);
|
||||||
|
|
||||||
|
/* FIXME: Should this function delete the path even if it failed? */
|
||||||
|
}
|
||||||
|
|
||||||
|
PATH_UnlockPath(pPath);
|
||||||
|
DC_UnlockDc(pdc);
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
|
HANDLE
|
||||||
|
APIENTRY
|
||||||
|
NtGdiGetDCObject(HDC hDC, INT ObjectType)
|
||||||
|
{
|
||||||
|
HGDIOBJ SelObject;
|
||||||
|
DC *pdc;
|
||||||
|
PDC_ATTR pdcattr;
|
||||||
|
|
||||||
|
/* From Wine: GetCurrentObject does not SetLastError() on a null object */
|
||||||
|
if(!hDC) return NULL;
|
||||||
|
|
||||||
|
if(!(pdc = DC_LockDc(hDC)))
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
pdcattr = pdc->pdcattr;
|
||||||
|
|
||||||
|
if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
|
||||||
|
IntGdiSelectBrush(pdc, pdcattr->hbrush);
|
||||||
|
|
||||||
|
if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
|
||||||
|
IntGdiSelectPen(pdc, pdcattr->hpen);
|
||||||
|
|
||||||
|
switch(ObjectType)
|
||||||
|
{
|
||||||
|
case GDI_OBJECT_TYPE_EXTPEN:
|
||||||
|
case GDI_OBJECT_TYPE_PEN:
|
||||||
|
SelObject = pdcattr->hpen;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDI_OBJECT_TYPE_BRUSH:
|
||||||
|
SelObject = pdcattr->hbrush;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDI_OBJECT_TYPE_PALETTE:
|
||||||
|
SelObject = pdc->dclevel.hpal;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDI_OBJECT_TYPE_FONT:
|
||||||
|
SelObject = pdcattr->hlfntNew;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDI_OBJECT_TYPE_BITMAP:
|
||||||
|
SelObject = pdc->rosdc.hBitmap;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDI_OBJECT_TYPE_COLORSPACE:
|
||||||
|
DPRINT1("FIXME: NtGdiGetCurrentObject() ObjectType OBJ_COLORSPACE not supported yet!\n");
|
||||||
|
// SelObject = dc->dclevel.pColorSpace.BaseObject.hHmgr; ?
|
||||||
|
SelObject = NULL;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
SelObject = NULL;
|
||||||
|
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
DC_UnlockDc(pdc);
|
||||||
|
return SelObject;
|
||||||
|
}
|
||||||
|
|
||||||
ULONG
|
ULONG
|
||||||
APIENTRY
|
APIENTRY
|
||||||
|
@ -175,107 +476,7 @@ NtGdiEnumObjects(
|
||||||
IN ULONG cjBuf,
|
IN ULONG cjBuf,
|
||||||
OUT OPTIONAL PVOID pvBuf)
|
OUT OPTIONAL PVOID pvBuf)
|
||||||
{
|
{
|
||||||
UNIMPLEMENTED;
|
UNIMPLEMENTED;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
HANDLE
|
|
||||||
APIENTRY
|
|
||||||
NtGdiGetDCObject(HDC hDC, INT ObjectType)
|
|
||||||
{
|
|
||||||
HGDIOBJ SelObject;
|
|
||||||
DC *dc;
|
|
||||||
PDC_ATTR pdcattr;
|
|
||||||
|
|
||||||
/* From Wine: GetCurrentObject does not SetLastError() on a null object */
|
|
||||||
if(!hDC) return NULL;
|
|
||||||
|
|
||||||
if(!(dc = DC_LockDc(hDC)))
|
|
||||||
{
|
|
||||||
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
pdcattr = dc->pdcattr;
|
|
||||||
|
|
||||||
if (pdcattr->ulDirty_ & DC_BRUSH_DIRTY)
|
|
||||||
IntGdiSelectBrush(dc,pdcattr->hbrush);
|
|
||||||
|
|
||||||
if (pdcattr->ulDirty_ & DC_PEN_DIRTY)
|
|
||||||
IntGdiSelectPen(dc,pdcattr->hpen);
|
|
||||||
|
|
||||||
switch(ObjectType)
|
|
||||||
{
|
|
||||||
case GDI_OBJECT_TYPE_EXTPEN:
|
|
||||||
case GDI_OBJECT_TYPE_PEN:
|
|
||||||
SelObject = pdcattr->hpen;
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_BRUSH:
|
|
||||||
SelObject = pdcattr->hbrush;
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_PALETTE:
|
|
||||||
SelObject = dc->dclevel.hpal;
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_FONT:
|
|
||||||
SelObject = pdcattr->hlfntNew;
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_BITMAP:
|
|
||||||
SelObject = dc->rosdc.hBitmap;
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_COLORSPACE:
|
|
||||||
DPRINT1("FIXME: NtGdiGetCurrentObject() ObjectType OBJ_COLORSPACE not supported yet!\n");
|
|
||||||
// SelObject = dc->dclevel.pColorSpace.BaseObject.hHmgr; ?
|
|
||||||
SelObject = NULL;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
SelObject = NULL;
|
|
||||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
DC_UnlockDc(dc);
|
|
||||||
return SelObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
HPALETTE
|
|
||||||
FASTCALL
|
|
||||||
GdiSelectPalette(HDC hDC,
|
|
||||||
HPALETTE hpal,
|
|
||||||
BOOL ForceBackground)
|
|
||||||
{
|
|
||||||
PDC dc;
|
|
||||||
HPALETTE oldPal = NULL;
|
|
||||||
PPALGDI PalGDI;
|
|
||||||
|
|
||||||
// FIXME: mark the palette as a [fore\back]ground pal
|
|
||||||
dc = DC_LockDc(hDC);
|
|
||||||
if (!dc)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Check if this is a valid palette handle */
|
|
||||||
PalGDI = PALETTE_LockPalette(hpal);
|
|
||||||
if (!PalGDI)
|
|
||||||
{
|
|
||||||
DC_UnlockDc(dc);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Is this a valid palette for this depth? */
|
|
||||||
if ((dc->rosdc.bitsPerPixel <= 8 && PalGDI->Mode == PAL_INDEXED) ||
|
|
||||||
(dc->rosdc.bitsPerPixel > 8 && PalGDI->Mode != PAL_INDEXED))
|
|
||||||
{
|
|
||||||
oldPal = dc->dclevel.hpal;
|
|
||||||
dc->dclevel.hpal = hpal;
|
|
||||||
}
|
|
||||||
else if (8 < dc->rosdc.bitsPerPixel && PAL_INDEXED == PalGDI->Mode)
|
|
||||||
{
|
|
||||||
oldPal = dc->dclevel.hpal;
|
|
||||||
dc->dclevel.hpal = hpal;
|
|
||||||
}
|
|
||||||
|
|
||||||
PALETTE_UnlockPalette(PalGDI);
|
|
||||||
DC_UnlockDc(dc);
|
|
||||||
|
|
||||||
return oldPal;
|
|
||||||
}
|
|
||||||
|
|
|
@ -2635,51 +2635,4 @@ NtGdiWidenPath(HDC hDC)
|
||||||
return Ret;
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL
|
|
||||||
APIENTRY
|
|
||||||
NtGdiSelectClipPath(HDC hDC,
|
|
||||||
int Mode)
|
|
||||||
{
|
|
||||||
HRGN hrgnPath;
|
|
||||||
PPATH pPath;
|
|
||||||
BOOL success = FALSE;
|
|
||||||
PDC_ATTR pdcattr;
|
|
||||||
PDC dc = DC_LockDc ( hDC );
|
|
||||||
|
|
||||||
if ( !dc )
|
|
||||||
{
|
|
||||||
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
pdcattr = dc->pdcattr;
|
|
||||||
|
|
||||||
pPath = PATH_LockPath( dc->dclevel.hPath );
|
|
||||||
if (!pPath)
|
|
||||||
{
|
|
||||||
DC_UnlockDc ( dc );
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
/* Check that path is closed */
|
|
||||||
if( pPath->state != PATH_Closed )
|
|
||||||
{
|
|
||||||
SetLastWin32Error(ERROR_CAN_NOT_COMPLETE);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
/* Construct a region from the path */
|
|
||||||
else if( PATH_PathToRegion( pPath, pdcattr->jFillMode, &hrgnPath ) )
|
|
||||||
{
|
|
||||||
success = GdiExtSelectClipRgn( dc, hrgnPath, Mode ) != ERROR;
|
|
||||||
GreDeleteObject( hrgnPath );
|
|
||||||
|
|
||||||
/* Empty the path */
|
|
||||||
if( success )
|
|
||||||
PATH_EmptyPath( pPath);
|
|
||||||
/* FIXME: Should this function delete the path even if it failed? */
|
|
||||||
}
|
|
||||||
PATH_UnlockPath( pPath );
|
|
||||||
DC_UnlockDc ( dc );
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -276,50 +276,6 @@ PEN_GetObject(PBRUSH pbrushPen, INT cbCount, PLOGPEN pBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HPEN
|
|
||||||
FASTCALL
|
|
||||||
IntGdiSelectPen(
|
|
||||||
PDC pDC,
|
|
||||||
HPEN hPen)
|
|
||||||
{
|
|
||||||
PDC_ATTR pdcattr;
|
|
||||||
HPEN hOrgPen = NULL;
|
|
||||||
PBRUSH pbrushPen;
|
|
||||||
XLATEOBJ *XlateObj;
|
|
||||||
BOOLEAN bFailed;
|
|
||||||
|
|
||||||
if (pDC == NULL || hPen == NULL) return NULL;
|
|
||||||
|
|
||||||
pdcattr = pDC->pdcattr;
|
|
||||||
|
|
||||||
pbrushPen = PEN_LockPen(hPen);
|
|
||||||
if (pbrushPen == NULL)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
XlateObj = IntGdiCreateBrushXlate(pDC, pbrushPen, &bFailed);
|
|
||||||
PEN_UnlockPen(pbrushPen);
|
|
||||||
if (bFailed)
|
|
||||||
{
|
|
||||||
SetLastWin32Error(ERROR_NO_SYSTEM_RESOURCES);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
hOrgPen = pdcattr->hpen;
|
|
||||||
pdcattr->hpen = hPen;
|
|
||||||
|
|
||||||
if (pDC->rosdc.XlatePen != NULL)
|
|
||||||
{
|
|
||||||
EngDeleteXlate(pDC->rosdc.XlatePen);
|
|
||||||
}
|
|
||||||
pdcattr->ulDirty_ &= ~DC_PEN_DIRTY;
|
|
||||||
|
|
||||||
pDC->rosdc.XlatePen = XlateObj;
|
|
||||||
|
|
||||||
return hOrgPen;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* PUBLIC FUNCTIONS ***********************************************************/
|
/* PUBLIC FUNCTIONS ***********************************************************/
|
||||||
|
|
||||||
HPEN APIENTRY
|
HPEN APIENTRY
|
||||||
|
@ -439,31 +395,6 @@ NtGdiExtCreatePen(
|
||||||
return hPen;
|
return hPen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* @implemented
|
|
||||||
*/
|
|
||||||
HPEN
|
|
||||||
APIENTRY
|
|
||||||
NtGdiSelectPen(
|
|
||||||
IN HDC hDC,
|
|
||||||
IN HPEN hPen)
|
|
||||||
{
|
|
||||||
PDC pDC;
|
|
||||||
HPEN hOrgPen;
|
|
||||||
|
|
||||||
if (hDC == NULL || hPen == NULL) return NULL;
|
|
||||||
|
|
||||||
pDC = DC_LockDc(hDC);
|
|
||||||
if (!pDC)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
hOrgPen = IntGdiSelectPen(pDC,hPen);
|
|
||||||
|
|
||||||
DC_UnlockDc(pDC);
|
|
||||||
|
|
||||||
return hOrgPen;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue