mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 02:25:40 +00:00
[GDI32]
- Finish object attribute support. svn path=/trunk/; revision=51170
This commit is contained in:
parent
8900f7d5d4
commit
34bb476056
3 changed files with 70 additions and 18 deletions
|
@ -275,7 +275,7 @@ HGDIOBJ
|
||||||
FASTCALL
|
FASTCALL
|
||||||
hGetPEBHandle(HANDLECACHETYPE Type, COLORREF cr)
|
hGetPEBHandle(HANDLECACHETYPE Type, COLORREF cr)
|
||||||
{
|
{
|
||||||
int Number;
|
int Number, Count, MaxNum, GdiType;
|
||||||
HANDLE Lock;
|
HANDLE Lock;
|
||||||
HGDIOBJ Handle = NULL;
|
HGDIOBJ Handle = NULL;
|
||||||
|
|
||||||
|
@ -287,23 +287,51 @@ hGetPEBHandle(HANDLECACHETYPE Type, COLORREF cr)
|
||||||
|
|
||||||
Number = GdiHandleCache->ulNumHandles[Type];
|
Number = GdiHandleCache->ulNumHandles[Type];
|
||||||
|
|
||||||
if ( Number && Number <= CACHE_REGION_ENTRIES )
|
if (Type == hctBrushHandle)
|
||||||
{
|
{
|
||||||
if ( Type == hctRegionHandle)
|
Count = 0;
|
||||||
|
MaxNum = CACHE_BRUSH_ENTRIES;
|
||||||
|
GdiType = GDILoObjType_LO_BRUSH_TYPE;
|
||||||
|
}
|
||||||
|
else if (Type == hctPenHandle)
|
||||||
{
|
{
|
||||||
PRGN_ATTR pRgn_Attr;
|
Count = CACHE_BRUSH_ENTRIES;
|
||||||
|
MaxNum = CACHE_PEN_ENTRIES;
|
||||||
|
GdiType = GDILoObjType_LO_PEN_TYPE;
|
||||||
|
}
|
||||||
|
else if (Type == hctRegionHandle)
|
||||||
|
{
|
||||||
|
Count = CACHE_BRUSH_ENTRIES+CACHE_PEN_ENTRIES;
|
||||||
|
MaxNum = CACHE_REGION_ENTRIES;
|
||||||
|
GdiType = GDILoObjType_LO_REGION_TYPE;
|
||||||
|
}
|
||||||
|
else // Font is not supported here.
|
||||||
|
{
|
||||||
|
return Handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Number && Number <= MaxNum )
|
||||||
|
{
|
||||||
|
PBRUSH_ATTR pBrush_Attr;
|
||||||
HGDIOBJ *hPtr;
|
HGDIOBJ *hPtr;
|
||||||
hPtr = GdiHandleCache->Handle + CACHE_BRUSH_ENTRIES+CACHE_PEN_ENTRIES;
|
hPtr = GdiHandleCache->Handle + Count;
|
||||||
Handle = hPtr[Number - 1];
|
Handle = hPtr[Number - 1];
|
||||||
|
|
||||||
if (GdiGetHandleUserData( Handle, GDI_OBJECT_TYPE_REGION, (PVOID) &pRgn_Attr))
|
if (GdiGetHandleUserData( Handle, GdiType, (PVOID) &pBrush_Attr))
|
||||||
{
|
{
|
||||||
if (pRgn_Attr->AttrFlags & ATTR_CACHED)
|
if (pBrush_Attr->AttrFlags & ATTR_CACHED)
|
||||||
{
|
{
|
||||||
DPRINT("Get Handle! Count %d PEB 0x%x\n", GdiHandleCache->ulNumHandles[Type], NtCurrentTeb()->ProcessEnvironmentBlock);
|
DPRINT("Get Handle! Type %d Count %d PEB 0x%x\n", Type, GdiHandleCache->ulNumHandles[Type], NtCurrentTeb()->ProcessEnvironmentBlock);
|
||||||
pRgn_Attr->AttrFlags &= ~ATTR_CACHED;
|
pBrush_Attr->AttrFlags &= ~ATTR_CACHED;
|
||||||
hPtr[Number - 1] = NULL;
|
hPtr[Number - 1] = NULL;
|
||||||
GdiHandleCache->ulNumHandles[Type]--;
|
GdiHandleCache->ulNumHandles[Type]--;
|
||||||
|
if ( Type == hctBrushHandle ) // Handle only brush.
|
||||||
|
{
|
||||||
|
if ( pBrush_Attr->lbColor != cr )
|
||||||
|
{
|
||||||
|
pBrush_Attr->lbColor = cr ;
|
||||||
|
pBrush_Attr->AttrFlags |= ATTR_NEW_COLOR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,6 +234,8 @@ CreateBrushIndirect(
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BS_SOLID:
|
case BS_SOLID:
|
||||||
|
/* hBrush = hGetPEBHandle(hctBrushHandle, LogBrush->lbColor);
|
||||||
|
if (!hBrush)*/
|
||||||
hBrush = NtGdiCreateSolidBrush(LogBrush->lbColor, 0);
|
hBrush = NtGdiCreateSolidBrush(LogBrush->lbColor, 0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,34 @@ CreatePen(
|
||||||
int nWidth,
|
int nWidth,
|
||||||
COLORREF crColor)
|
COLORREF crColor)
|
||||||
{
|
{
|
||||||
/* FIXME Some part need be done in user mode */
|
/* HPEN hPen;
|
||||||
|
PBRUSH_ATTR Pen_Attr;
|
||||||
|
*/
|
||||||
|
if (nPenStyle < PS_SOLID) nPenStyle = PS_SOLID;
|
||||||
if (nPenStyle > PS_DASHDOTDOT)
|
if (nPenStyle > PS_DASHDOTDOT)
|
||||||
{
|
{
|
||||||
if (nPenStyle == PS_NULL) return GetStockObject(NULL_PEN);
|
if (nPenStyle == PS_NULL) return GetStockObject(NULL_PEN);
|
||||||
if (nPenStyle != PS_INSIDEFRAME) nPenStyle = PS_SOLID;
|
if (nPenStyle != PS_INSIDEFRAME) nPenStyle = PS_SOLID;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
|
hPen = hGetPEBHandle(hctPenHandle, nPenStyle);
|
||||||
|
if ( nWidth || nPenStyle || !hPen )
|
||||||
|
{
|
||||||
|
return NtGdiCreatePen(nPenStyle, nWidth, crColor, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((GdiGetHandleUserData( hPen, GDI_OBJECT_TYPE_PEN, (PVOID) &Pen_Attr)) &&
|
||||||
|
( Pen_Attr != NULL ))
|
||||||
|
{
|
||||||
|
if ( Pen_Attr->lbColor != crColor)
|
||||||
|
{
|
||||||
|
Pen_Attr->lbColor = crColor;
|
||||||
|
Pen_Attr->AttrFlags |= ATTR_NEW_COLOR;
|
||||||
|
}
|
||||||
|
return hPen;
|
||||||
|
}
|
||||||
|
DeleteObject(hPen);
|
||||||
|
#endif
|
||||||
return NtGdiCreatePen(nPenStyle, nWidth, crColor, NULL);
|
return NtGdiCreatePen(nPenStyle, nWidth, crColor, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue