2004-12-12 01:40:39 +00:00
|
|
|
/*
|
2011-09-20 19:41:33 +00:00
|
|
|
* PROJECT: ReactOS win32 kernel mode subsystem
|
|
|
|
* LICENSE: GPL - See COPYING in the top level directory
|
2015-11-10 17:41:55 +00:00
|
|
|
* FILE: win32ss/gdi/ntgdi/stockobj.c
|
2011-09-20 19:41:33 +00:00
|
|
|
* PURPOSE: Stock objects functions
|
2018-08-10 13:37:37 +00:00
|
|
|
* PROGRAMMERS: Colin Finck <colin@reactos.org>
|
|
|
|
* Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
|
2004-12-12 01:40:39 +00:00
|
|
|
*/
|
2005-06-29 07:09:25 +00:00
|
|
|
|
2010-04-26 13:58:46 +00:00
|
|
|
#include <win32k.h>
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
#define NDEBUG
|
|
|
|
#include <debug.h>
|
|
|
|
|
2008-05-29 18:51:17 +00:00
|
|
|
|
2009-06-27 23:33:57 +00:00
|
|
|
static const COLORREF SysColors[] =
|
2004-12-12 01:40:39 +00:00
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
RGB(212, 208, 200), /* COLOR_SCROLLBAR */
|
|
|
|
RGB(58, 110, 165), /* COLOR_BACKGROUND */
|
|
|
|
RGB(10, 36, 106), /* COLOR_ACTIVECAPTION */
|
|
|
|
RGB(128, 128, 128), /* COLOR_INACTIVECAPTION */
|
|
|
|
RGB(212, 208, 200), /* COLOR_MENU */
|
|
|
|
RGB(255, 255, 255), /* COLOR_WINDOW */
|
|
|
|
RGB(0, 0, 0), /* COLOR_WINDOWFRAME */
|
|
|
|
RGB(0, 0, 0), /* COLOR_MENUTEXT */
|
|
|
|
RGB(0, 0, 0), /* COLOR_WINDOWTEXT */
|
|
|
|
RGB(255, 255, 255), /* COLOR_CAPTIONTEXT */
|
|
|
|
RGB(212, 208, 200), /* COLOR_ACTIVEBORDER */
|
|
|
|
RGB(212, 208, 200), /* COLOR_INACTIVEBORDER */
|
|
|
|
RGB(128, 128, 128), /* COLOR_APPWORKSPACE */
|
|
|
|
RGB(10, 36, 106), /* COLOR_HIGHLIGHT */
|
|
|
|
RGB(255, 255, 255), /* COLOR_HIGHLIGHTTEXT */
|
|
|
|
RGB(212, 208, 200), /* COLOR_BTNFACE */
|
|
|
|
RGB(128, 128, 128), /* COLOR_BTNSHADOW */
|
|
|
|
RGB(128, 128, 128), /* COLOR_GRAYTEXT */
|
|
|
|
RGB(0, 0, 0), /* COLOR_BTNTEXT */
|
|
|
|
RGB(212, 208, 200), /* COLOR_INACTIVECAPTIONTEXT */
|
|
|
|
RGB(255, 255, 255), /* COLOR_BTNHIGHLIGHT */
|
|
|
|
RGB(64, 64, 64), /* COLOR_3DDKSHADOW */
|
|
|
|
RGB(212, 208, 200), /* COLOR_3DLIGHT */
|
|
|
|
RGB(0, 0, 0), /* COLOR_INFOTEXT */
|
|
|
|
RGB(255, 255, 225), /* COLOR_INFOBK */
|
|
|
|
RGB(181, 181, 181), /* COLOR_UNKNOWN */
|
|
|
|
RGB(0, 0, 128), /* COLOR_HOTLIGHT */
|
|
|
|
RGB(166, 202, 240), /* COLOR_GRADIENTACTIVECAPTION */
|
|
|
|
RGB(192, 192, 192), /* COLOR_GRADIENTINACTIVECAPTION */
|
|
|
|
RGB(49, 106, 197), /* COLOR_MENUHILIGHT */
|
|
|
|
RGB(236, 233, 216) /* COLOR_MENUBAR */
|
2004-12-12 01:40:39 +00:00
|
|
|
};
|
|
|
|
|
2008-05-30 04:56:10 +00:00
|
|
|
// System Bitmap DC
|
|
|
|
HDC hSystemBM;
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
/* GDI stock objects */
|
|
|
|
|
|
|
|
static LOGPEN WhitePen =
|
2009-06-27 23:54:02 +00:00
|
|
|
{ PS_SOLID, { 0, 0 }, RGB(255,255,255) };
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGPEN BlackPen =
|
2009-06-27 23:54:02 +00:00
|
|
|
{ PS_SOLID, { 0, 0 }, RGB(0,0,0) };
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGPEN NullPen =
|
2009-06-27 23:54:02 +00:00
|
|
|
{ PS_NULL, { 0, 0 }, 0 };
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGFONTW OEMFixedFont =
|
2012-12-24 17:31:30 +00:00
|
|
|
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET,
|
|
|
|
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Terminal"
|
|
|
|
};
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGFONTW AnsiFixedFont =
|
2018-08-10 13:37:37 +00:00
|
|
|
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
2012-12-24 17:31:30 +00:00
|
|
|
OUT_DEFAULT_PRECIS, /*CLIP_DEFAULT_PRECIS*/ CLIP_STROKE_PRECIS, /*DEFAULT_QUALITY*/ PROOF_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Courier"
|
|
|
|
};
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2008-09-18 12:43:21 +00:00
|
|
|
static LOGFONTW AnsiVarFont =
|
2018-08-10 13:37:37 +00:00
|
|
|
{ 12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
2012-12-24 17:31:30 +00:00
|
|
|
OUT_DEFAULT_PRECIS, /*CLIP_DEFAULT_PRECIS*/ CLIP_STROKE_PRECIS, /*DEFAULT_QUALITY*/ PROOF_QUALITY, FF_DONTCARE | VARIABLE_PITCH, L"MS Sans Serif"
|
2009-06-27 23:54:02 +00:00
|
|
|
};
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGFONTW SystemFont =
|
2018-08-10 13:37:37 +00:00
|
|
|
{ 16, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
2012-12-24 17:31:30 +00:00
|
|
|
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | VARIABLE_PITCH, L"System"
|
|
|
|
};
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGFONTW DeviceDefaultFont =
|
2018-08-10 13:37:37 +00:00
|
|
|
{ 16, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET,
|
|
|
|
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_SWISS | VARIABLE_PITCH, L"System"
|
2012-12-24 17:31:30 +00:00
|
|
|
};
|
2004-12-12 01:40:39 +00:00
|
|
|
|
|
|
|
static LOGFONTW SystemFixedFont =
|
2018-08-10 13:37:37 +00:00
|
|
|
{ 15, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
2012-12-24 17:31:30 +00:00
|
|
|
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE | FIXED_PITCH, L"Fixedsys"
|
|
|
|
};
|
2007-10-19 23:21:45 +00:00
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
static LOGFONTW DefaultGuiFont =
|
2018-08-10 13:37:37 +00:00
|
|
|
{ -11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
|
|
|
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, /*DEFAULT_QUALITY*/ PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, L"MS Shell Dlg"
|
2012-12-24 17:31:30 +00:00
|
|
|
};
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2008-11-26 20:44:41 +00:00
|
|
|
HGDIOBJ StockObjects[NB_STOCK_OBJECTS];
|
|
|
|
|
|
|
|
static
|
|
|
|
HPEN
|
|
|
|
FASTCALL
|
2009-06-27 23:54:02 +00:00
|
|
|
IntCreateStockPen(DWORD dwPenStyle,
|
|
|
|
DWORD dwWidth,
|
|
|
|
ULONG ulBrushStyle,
|
|
|
|
ULONG ulColor)
|
2008-11-26 20:44:41 +00:00
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
HPEN hPen;
|
2013-06-18 22:14:50 +00:00
|
|
|
PBRUSH pbrushPen;
|
|
|
|
|
|
|
|
pbrushPen = PEN_AllocPenWithHandle();
|
|
|
|
if (pbrushPen == NULL) return NULL;
|
2009-06-27 23:54:02 +00:00
|
|
|
|
|
|
|
if ((dwPenStyle & PS_STYLE_MASK) == PS_NULL) dwWidth = 1;
|
|
|
|
|
2015-02-11 21:33:50 +00:00
|
|
|
pbrushPen->iHatch = 0;
|
|
|
|
pbrushPen->lWidth = abs(dwWidth);
|
2017-05-06 12:18:21 +00:00
|
|
|
FLOATOBJ_SetLong(&pbrushPen->eWidth, pbrushPen->lWidth);
|
2009-06-27 23:54:02 +00:00
|
|
|
pbrushPen->ulPenStyle = dwPenStyle;
|
|
|
|
pbrushPen->BrushAttr.lbColor = ulColor;
|
2015-02-11 21:33:50 +00:00
|
|
|
pbrushPen->iBrushStyle = ulBrushStyle;
|
2009-06-27 23:54:02 +00:00
|
|
|
pbrushPen->hbmClient = (HANDLE)NULL;
|
|
|
|
pbrushPen->dwStyleCount = 0;
|
|
|
|
pbrushPen->pStyle = 0;
|
2012-05-04 17:37:07 +00:00
|
|
|
pbrushPen->flAttrs = BR_IS_OLDSTYLEPEN;
|
2009-06-27 23:54:02 +00:00
|
|
|
|
|
|
|
switch (dwPenStyle & PS_STYLE_MASK)
|
|
|
|
{
|
|
|
|
case PS_NULL:
|
2012-05-04 17:37:07 +00:00
|
|
|
pbrushPen->flAttrs |= BR_IS_NULL;
|
2009-06-27 23:54:02 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case PS_SOLID:
|
2012-05-04 17:37:07 +00:00
|
|
|
pbrushPen->flAttrs |= BR_IS_SOLID;
|
2009-06-27 23:54:02 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
hPen = pbrushPen->BaseObject.hHmgr;
|
|
|
|
PEN_UnlockPen(pbrushPen);
|
|
|
|
return hPen;
|
2008-11-26 20:44:41 +00:00
|
|
|
}
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2018-08-10 13:37:37 +00:00
|
|
|
static VOID FASTCALL
|
|
|
|
CreateStockFonts(void)
|
|
|
|
{
|
|
|
|
USHORT ActiveCodePage, OemCodePage;
|
|
|
|
BYTE bActiveCharSet, bOemCharSet;
|
|
|
|
BOOL bIsCJK;
|
|
|
|
static const WCHAR SimSun[] = { 0x5B8B, 0x4F53, 0 };
|
|
|
|
static const WCHAR MingLiU[] = { 0x7D30, 0x660E, 0x9AD4, 0 };
|
|
|
|
static const WCHAR Batang[] = { 0xBC14, 0xD0D5, 0 };
|
|
|
|
|
|
|
|
RtlGetDefaultCodePage(&ActiveCodePage, &OemCodePage);
|
|
|
|
bActiveCharSet = IntCharSetFromCodePage(ActiveCodePage);
|
|
|
|
bOemCharSet = IntCharSetFromCodePage(OemCodePage);
|
|
|
|
|
|
|
|
if (bOemCharSet == DEFAULT_CHARSET)
|
|
|
|
bOemCharSet = OEM_CHARSET;
|
|
|
|
|
|
|
|
switch (ActiveCodePage)
|
|
|
|
{
|
|
|
|
case 936:
|
|
|
|
/* Simplified Chinese */
|
|
|
|
bIsCJK = TRUE;
|
|
|
|
wcscpy(DefaultGuiFont.lfFaceName, SimSun);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 950:
|
|
|
|
/* Traditional Chinese */
|
|
|
|
bIsCJK = TRUE;
|
|
|
|
wcscpy(DefaultGuiFont.lfFaceName, MingLiU);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 932:
|
|
|
|
/* Japanese */
|
|
|
|
bIsCJK = TRUE;
|
|
|
|
wcscpy(DefaultGuiFont.lfFaceName, L"MS UI Gothic");
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 949:
|
|
|
|
case 1361:
|
|
|
|
/* Korean */
|
|
|
|
bIsCJK = TRUE;
|
|
|
|
wcscpy(DefaultGuiFont.lfFaceName, Batang);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
/* Otherwise */
|
|
|
|
bIsCJK = FALSE;
|
|
|
|
wcscpy(DefaultGuiFont.lfFaceName, L"MS Shell Dlg");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (bIsCJK)
|
|
|
|
{
|
|
|
|
OEMFixedFont.lfHeight = 18;
|
|
|
|
OEMFixedFont.lfPitchAndFamily = FF_DONTCARE | FIXED_PITCH;
|
|
|
|
SystemFont.lfHeight = 18;
|
|
|
|
SystemFont.lfPitchAndFamily = FF_DONTCARE | VARIABLE_PITCH;
|
|
|
|
DeviceDefaultFont.lfHeight = 18;
|
|
|
|
DeviceDefaultFont.lfPitchAndFamily = FF_DONTCARE | VARIABLE_PITCH;
|
|
|
|
SystemFixedFont.lfHeight = 18;
|
|
|
|
SystemFixedFont.lfPitchAndFamily = FF_DONTCARE | FIXED_PITCH;
|
|
|
|
DefaultGuiFont.lfHeight = -12;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
OEMFixedFont.lfHeight = 12;
|
|
|
|
OEMFixedFont.lfPitchAndFamily = FF_MODERN | FIXED_PITCH;
|
|
|
|
SystemFont.lfHeight = 16;
|
|
|
|
SystemFont.lfPitchAndFamily = FF_SWISS | VARIABLE_PITCH;
|
|
|
|
DeviceDefaultFont.lfHeight = 16;
|
|
|
|
DeviceDefaultFont.lfPitchAndFamily = FF_SWISS | VARIABLE_PITCH;
|
|
|
|
if (bActiveCharSet == RUSSIAN_CHARSET)
|
|
|
|
{
|
|
|
|
SystemFixedFont.lfHeight = 16;
|
|
|
|
SystemFixedFont.lfPitchAndFamily = FF_SWISS | FIXED_PITCH;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
SystemFixedFont.lfHeight = 15;
|
|
|
|
SystemFixedFont.lfPitchAndFamily = FF_MODERN | FIXED_PITCH;
|
|
|
|
}
|
|
|
|
DefaultGuiFont.lfHeight = -11;
|
|
|
|
}
|
|
|
|
|
|
|
|
OEMFixedFont.lfCharSet = bOemCharSet;
|
|
|
|
SystemFont.lfCharSet = bActiveCharSet;
|
|
|
|
DeviceDefaultFont.lfCharSet = bActiveCharSet;
|
|
|
|
SystemFixedFont.lfCharSet = bActiveCharSet;
|
|
|
|
DefaultGuiFont.lfCharSet = bActiveCharSet;
|
|
|
|
|
|
|
|
TextIntCreateFontIndirect(&OEMFixedFont, (HFONT*)&StockObjects[OEM_FIXED_FONT]);
|
|
|
|
TextIntCreateFontIndirect(&AnsiFixedFont, (HFONT*)&StockObjects[ANSI_FIXED_FONT]);
|
|
|
|
TextIntCreateFontIndirect(&AnsiVarFont, (HFONT*)&StockObjects[ANSI_VAR_FONT]);
|
|
|
|
TextIntCreateFontIndirect(&SystemFont, (HFONT*)&StockObjects[SYSTEM_FONT]);
|
|
|
|
TextIntCreateFontIndirect(&DeviceDefaultFont, (HFONT*)&StockObjects[DEVICE_DEFAULT_FONT]);
|
|
|
|
TextIntCreateFontIndirect(&SystemFixedFont, (HFONT*)&StockObjects[SYSTEM_FIXED_FONT]);
|
|
|
|
TextIntCreateFontIndirect(&DefaultGuiFont, (HFONT*)&StockObjects[DEFAULT_GUI_FONT]);
|
|
|
|
}
|
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
/*!
|
|
|
|
* Creates a bunch of stock objects: brushes, pens, fonts.
|
|
|
|
*/
|
|
|
|
VOID FASTCALL
|
|
|
|
CreateStockObjects(void)
|
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
UINT Object;
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
DPRINT("Beginning creation of stock objects\n");
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
/* Create GDI Stock Objects from the logical structures we've defined */
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
StockObjects[WHITE_BRUSH] = IntGdiCreateSolidBrush(RGB(255,255,255));
|
|
|
|
StockObjects[DC_BRUSH] = IntGdiCreateSolidBrush(RGB(255,255,255));
|
|
|
|
StockObjects[LTGRAY_BRUSH] = IntGdiCreateSolidBrush(RGB(192,192,192));
|
|
|
|
StockObjects[GRAY_BRUSH] = IntGdiCreateSolidBrush(RGB(128,128,128));
|
|
|
|
StockObjects[DKGRAY_BRUSH] = IntGdiCreateSolidBrush(RGB(64,64,64));
|
|
|
|
StockObjects[BLACK_BRUSH] = IntGdiCreateSolidBrush(RGB(0,0,0));
|
|
|
|
StockObjects[NULL_BRUSH] = IntGdiCreateNullBrush();
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
StockObjects[WHITE_PEN] = IntCreateStockPen(WhitePen.lopnStyle, WhitePen.lopnWidth.x, BS_SOLID, WhitePen.lopnColor);
|
|
|
|
StockObjects[BLACK_PEN] = IntCreateStockPen(BlackPen.lopnStyle, BlackPen.lopnWidth.x, BS_SOLID, BlackPen.lopnColor);
|
|
|
|
StockObjects[DC_PEN] = IntCreateStockPen(BlackPen.lopnStyle, BlackPen.lopnWidth.x, BS_SOLID, BlackPen.lopnColor);
|
|
|
|
StockObjects[NULL_PEN] = IntCreateStockPen(NullPen.lopnStyle, NullPen.lopnWidth.x, BS_SOLID, NullPen.lopnColor);
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
StockObjects[20] = NULL; /* TODO: Unknown internal stock object */
|
[WIN32K]
Rewrite the bitmap API. There were a lot of bugs. NtGdiCreateBitmap allowed a negative height, leading to either topdown or bottomup bitmaps, a behaviour that Windows doesn't have. The function copied the bitmap bits directly from the caller to the bitmap using RtlCopyMemory, ignoring different scanline length and direction (resulting in bitmaps being upside down), not SEH protected. This function (IntSetBitmapBits) is replaced by a better solution UnsafeSetBitmapBits, that takes these things into account. The name is chosen to give a hint that the function can/should be SEH protected. IntSetBitmapBits is still there, as its retarded behaviour is actually required in some places. There were also IntCreateBitmap and IntGdiCreateBitmap, now both being replaced by GreCreateBitmap. The code that set the palette is removed, as it's already done in SURFACE_AllocSurface, here gpalRGB is replaced with gpalBGR, fixing some inverted color issues. The alignment correction in SURFACE_bSetBitmapBits is reapplied, now that the callers are behaving as they are supposed to do.
svn path=/branches/reactos-yarotows/; revision=47641
2010-06-06 22:01:41 +00:00
|
|
|
StockObjects[DEFAULT_BITMAP] = GreCreateBitmap(1, 1, 1, 1, NULL);
|
2008-05-10 17:39:38 +00:00
|
|
|
|
2018-08-10 13:37:37 +00:00
|
|
|
CreateStockFonts();
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2010-06-09 02:57:52 +00:00
|
|
|
StockObjects[DEFAULT_PALETTE] = (HGDIOBJ)gppalDefault->BaseObject.hHmgr;
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
for (Object = 0; Object < NB_STOCK_OBJECTS; Object++)
|
2004-12-12 01:40:39 +00:00
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
if (NULL != StockObjects[Object])
|
|
|
|
{
|
|
|
|
GDIOBJ_ConvertToStockObj(&StockObjects[Object]);
|
|
|
|
}
|
2004-12-12 01:40:39 +00:00
|
|
|
}
|
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
DPRINT("Completed creation of stock objects\n");
|
2004-12-12 01:40:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*!
|
|
|
|
* Return stock object.
|
|
|
|
* \param Object - stock object id.
|
|
|
|
* \return Handle to the object.
|
|
|
|
*/
|
2008-11-29 22:48:58 +00:00
|
|
|
HGDIOBJ APIENTRY
|
2004-12-12 01:40:39 +00:00
|
|
|
NtGdiGetStockObject(INT Object)
|
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
DPRINT("NtGdiGetStockObject index %d\n", Object);
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
return ((Object < 0) || (NB_STOCK_OBJECTS <= Object)) ? NULL : StockObjects[Object];
|
2004-12-12 01:40:39 +00:00
|
|
|
}
|
|
|
|
|
2011-03-21 14:52:08 +00:00
|
|
|
VOID FASTCALL
|
|
|
|
IntSetSysColors(UINT nColors, CONST INT *Elements, CONST COLORREF *Colors)
|
2004-12-12 01:40:39 +00:00
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
UINT i;
|
2004-12-12 01:40:39 +00:00
|
|
|
|
2009-06-27 23:54:02 +00:00
|
|
|
for (i = 0; i < nColors; i++)
|
2004-12-12 01:40:39 +00:00
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
if ((UINT)(*Elements) < NUM_SYSCOLORS)
|
|
|
|
{
|
|
|
|
gpsi->argbSystem[*Elements] = *Colors;
|
|
|
|
IntGdiSetSolidBrushColor(gpsi->ahbrSystem[*Elements], *Colors);
|
|
|
|
}
|
|
|
|
Elements++;
|
|
|
|
Colors++;
|
2004-12-12 01:40:39 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-08-08 20:00:53 +00:00
|
|
|
HGDIOBJ FASTCALL
|
|
|
|
IntGetSysColorBrush(INT Object)
|
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
return ((Object < 0) || (NUM_SYSCOLORS <= Object)) ? NULL : gpsi->ahbrSystem[Object];
|
2006-08-08 20:00:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DWORD FASTCALL
|
|
|
|
IntGetSysColor(INT nIndex)
|
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
return (NUM_SYSCOLORS <= (UINT)nIndex) ? 0 : gpsi->argbSystem[nIndex];
|
2006-08-08 20:00:53 +00:00
|
|
|
}
|
|
|
|
|
2004-12-12 01:40:39 +00:00
|
|
|
VOID FASTCALL
|
|
|
|
CreateSysColorObjects(VOID)
|
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
UINT i;
|
|
|
|
|
|
|
|
for (i = 0; i < NUM_SYSCOLORS; i++)
|
2004-12-12 01:40:39 +00:00
|
|
|
{
|
2009-06-27 23:54:02 +00:00
|
|
|
gpsi->argbSystem[i] = SysColors[i];
|
2004-12-12 01:40:39 +00:00
|
|
|
}
|
2009-06-27 23:54:02 +00:00
|
|
|
|
|
|
|
/* Create the syscolor brushes */
|
|
|
|
for (i = 0; i < NUM_SYSCOLORS; i++)
|
|
|
|
{
|
|
|
|
if (gpsi->ahbrSystem[i] == NULL)
|
|
|
|
{
|
|
|
|
gpsi->ahbrSystem[i] = IntGdiCreateSolidBrush(SysColors[i]);
|
|
|
|
if (gpsi->ahbrSystem[i] != NULL)
|
|
|
|
{
|
|
|
|
GDIOBJ_ConvertToStockObj((HGDIOBJ*)&gpsi->ahbrSystem[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2004-12-12 01:40:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* EOF */
|