Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenstockobj.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS win32 kernel mode subsystem 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: subsystems/win32/win32k/objects/stockobj.c 00005 * PURPOSE: Stock objects functions 00006 * PROGRAMMER: 00007 */ 00008 00009 #include <win32k.h> 00010 00011 #define NDEBUG 00012 #include <debug.h> 00013 00014 00015 static const COLORREF SysColors[] = 00016 { 00017 RGB(212, 208, 200), /* COLOR_SCROLLBAR */ 00018 RGB(58, 110, 165), /* COLOR_BACKGROUND */ 00019 RGB(10, 36, 106), /* COLOR_ACTIVECAPTION */ 00020 RGB(128, 128, 128), /* COLOR_INACTIVECAPTION */ 00021 RGB(212, 208, 200), /* COLOR_MENU */ 00022 RGB(255, 255, 255), /* COLOR_WINDOW */ 00023 RGB(0, 0, 0), /* COLOR_WINDOWFRAME */ 00024 RGB(0, 0, 0), /* COLOR_MENUTEXT */ 00025 RGB(0, 0, 0), /* COLOR_WINDOWTEXT */ 00026 RGB(255, 255, 255), /* COLOR_CAPTIONTEXT */ 00027 RGB(212, 208, 200), /* COLOR_ACTIVEBORDER */ 00028 RGB(212, 208, 200), /* COLOR_INACTIVEBORDER */ 00029 RGB(128, 128, 128), /* COLOR_APPWORKSPACE */ 00030 RGB(10, 36, 106), /* COLOR_HIGHLIGHT */ 00031 RGB(255, 255, 255), /* COLOR_HIGHLIGHTTEXT */ 00032 RGB(212, 208, 200), /* COLOR_BTNFACE */ 00033 RGB(128, 128, 128), /* COLOR_BTNSHADOW */ 00034 RGB(128, 128, 128), /* COLOR_GRAYTEXT */ 00035 RGB(0, 0, 0), /* COLOR_BTNTEXT */ 00036 RGB(212, 208, 200), /* COLOR_INACTIVECAPTIONTEXT */ 00037 RGB(255, 255, 255), /* COLOR_BTNHIGHLIGHT */ 00038 RGB(64, 64, 64), /* COLOR_3DDKSHADOW */ 00039 RGB(212, 208, 200), /* COLOR_3DLIGHT */ 00040 RGB(0, 0, 0), /* COLOR_INFOTEXT */ 00041 RGB(255, 255, 225), /* COLOR_INFOBK */ 00042 RGB(181, 181, 181), /* COLOR_UNKNOWN */ 00043 RGB(0, 0, 128), /* COLOR_HOTLIGHT */ 00044 RGB(166, 202, 240), /* COLOR_GRADIENTACTIVECAPTION */ 00045 RGB(192, 192, 192), /* COLOR_GRADIENTINACTIVECAPTION */ 00046 RGB(49, 106, 197), /* COLOR_MENUHILIGHT */ 00047 RGB(236, 233, 216) /* COLOR_MENUBAR */ 00048 }; 00049 00050 // System Bitmap DC 00051 HDC hSystemBM; 00052 00053 /* GDI stock objects */ 00054 00055 static LOGPEN WhitePen = 00056 { PS_SOLID, { 0, 0 }, RGB(255,255,255) }; 00057 00058 static LOGPEN BlackPen = 00059 { PS_SOLID, { 0, 0 }, RGB(0,0,0) }; 00060 00061 static LOGPEN NullPen = 00062 { PS_NULL, { 0, 0 }, 0 }; 00063 00064 static LOGFONTW OEMFixedFont = 00065 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, OEM_CHARSET, 00066 0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier New" 00067 }; // Bitstream Vera Sans Mono 00068 00069 static LOGFONTW AnsiFixedFont = 00070 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, 00071 0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier New" 00072 }; // Bitstream Vera Sans Mono 00073 00074 static LOGFONTW AnsiVarFont = 00075 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, 00076 0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif" 00077 }; 00078 00079 static LOGFONTW SystemFont = 00080 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, 00081 0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"Courier New" 00082 }; // Bitstream Vera Sans 00083 00084 static LOGFONTW DeviceDefaultFont = 00085 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, 00086 0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif" 00087 }; // Bitstream Vera Sans 00088 00089 static LOGFONTW SystemFixedFont = 00090 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, 00091 0, 0, DEFAULT_QUALITY, FIXED_PITCH | FF_MODERN, L"Courier New" 00092 }; // Bitstream Vera Sans Mono 00093 00094 /* FIXME: Is this correct? */ 00095 static LOGFONTW DefaultGuiFont = 00096 { 11, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, 00097 0, 0, DEFAULT_QUALITY, VARIABLE_PITCH | FF_SWISS, L"MS Sans Serif" 00098 }; // Bitstream Vera Sans 00099 00100 HGDIOBJ StockObjects[NB_STOCK_OBJECTS]; 00101 00102 static 00103 HPEN 00104 FASTCALL 00105 IntCreateStockPen(DWORD dwPenStyle, 00106 DWORD dwWidth, 00107 ULONG ulBrushStyle, 00108 ULONG ulColor) 00109 { 00110 HPEN hPen; 00111 PBRUSH pbrushPen = PEN_AllocPenWithHandle(); 00112 00113 if ((dwPenStyle & PS_STYLE_MASK) == PS_NULL) dwWidth = 1; 00114 00115 pbrushPen->ptPenWidth.x = abs(dwWidth); 00116 pbrushPen->ptPenWidth.y = 0; 00117 pbrushPen->ulPenStyle = dwPenStyle; 00118 pbrushPen->BrushAttr.lbColor = ulColor; 00119 pbrushPen->ulStyle = ulBrushStyle; 00120 pbrushPen->hbmClient = (HANDLE)NULL; 00121 pbrushPen->dwStyleCount = 0; 00122 pbrushPen->pStyle = 0; 00123 pbrushPen->flAttrs = BR_IS_OLDSTYLEPEN; 00124 00125 switch (dwPenStyle & PS_STYLE_MASK) 00126 { 00127 case PS_NULL: 00128 pbrushPen->flAttrs |= BR_IS_NULL; 00129 break; 00130 00131 case PS_SOLID: 00132 pbrushPen->flAttrs |= BR_IS_SOLID; 00133 break; 00134 } 00135 hPen = pbrushPen->BaseObject.hHmgr; 00136 PEN_UnlockPen(pbrushPen); 00137 return hPen; 00138 } 00139 00143 VOID FASTCALL 00144 CreateStockObjects(void) 00145 { 00146 UINT Object; 00147 00148 DPRINT("Beginning creation of stock objects\n"); 00149 00150 /* Create GDI Stock Objects from the logical structures we've defined */ 00151 00152 StockObjects[WHITE_BRUSH] = IntGdiCreateSolidBrush(RGB(255,255,255)); 00153 StockObjects[DC_BRUSH] = IntGdiCreateSolidBrush(RGB(255,255,255)); 00154 StockObjects[LTGRAY_BRUSH] = IntGdiCreateSolidBrush(RGB(192,192,192)); 00155 StockObjects[GRAY_BRUSH] = IntGdiCreateSolidBrush(RGB(128,128,128)); 00156 StockObjects[DKGRAY_BRUSH] = IntGdiCreateSolidBrush(RGB(64,64,64)); 00157 StockObjects[BLACK_BRUSH] = IntGdiCreateSolidBrush(RGB(0,0,0)); 00158 StockObjects[NULL_BRUSH] = IntGdiCreateNullBrush(); 00159 00160 StockObjects[WHITE_PEN] = IntCreateStockPen(WhitePen.lopnStyle, WhitePen.lopnWidth.x, BS_SOLID, WhitePen.lopnColor); 00161 StockObjects[BLACK_PEN] = IntCreateStockPen(BlackPen.lopnStyle, BlackPen.lopnWidth.x, BS_SOLID, BlackPen.lopnColor); 00162 StockObjects[DC_PEN] = IntCreateStockPen(BlackPen.lopnStyle, BlackPen.lopnWidth.x, BS_SOLID, BlackPen.lopnColor); 00163 StockObjects[NULL_PEN] = IntCreateStockPen(NullPen.lopnStyle, NullPen.lopnWidth.x, BS_SOLID, NullPen.lopnColor); 00164 00165 StockObjects[20] = NULL; /* TODO: Unknown internal stock object */ 00166 StockObjects[DEFAULT_BITMAP] = GreCreateBitmap(1, 1, 1, 1, NULL); 00167 00168 (void) TextIntCreateFontIndirect(&OEMFixedFont, (HFONT*)&StockObjects[OEM_FIXED_FONT]); 00169 (void) TextIntCreateFontIndirect(&AnsiFixedFont, (HFONT*)&StockObjects[ANSI_FIXED_FONT]); 00170 (void) TextIntCreateFontIndirect(&AnsiVarFont, (HFONT*)&StockObjects[ANSI_VAR_FONT]); 00171 (void) TextIntCreateFontIndirect(&SystemFont, (HFONT*)&StockObjects[SYSTEM_FONT]); 00172 (void) TextIntCreateFontIndirect(&DeviceDefaultFont, (HFONT*)&StockObjects[DEVICE_DEFAULT_FONT]); 00173 (void) TextIntCreateFontIndirect(&SystemFixedFont, (HFONT*)&StockObjects[SYSTEM_FIXED_FONT]); 00174 (void) TextIntCreateFontIndirect(&DefaultGuiFont, (HFONT*)&StockObjects[DEFAULT_GUI_FONT]); 00175 00176 StockObjects[DEFAULT_PALETTE] = (HGDIOBJ)gppalDefault->BaseObject.hHmgr; 00177 00178 for (Object = 0; Object < NB_STOCK_OBJECTS; Object++) 00179 { 00180 if (NULL != StockObjects[Object]) 00181 { 00182 GDIOBJ_ConvertToStockObj(&StockObjects[Object]); 00183 } 00184 } 00185 00186 DPRINT("Completed creation of stock objects\n"); 00187 } 00188 00194 HGDIOBJ APIENTRY 00195 NtGdiGetStockObject(INT Object) 00196 { 00197 DPRINT("NtGdiGetStockObject index %d\n", Object); 00198 00199 return ((Object < 0) || (NB_STOCK_OBJECTS <= Object)) ? NULL : StockObjects[Object]; 00200 } 00201 00202 VOID FASTCALL 00203 IntSetSysColors(UINT nColors, CONST INT *Elements, CONST COLORREF *Colors) 00204 { 00205 UINT i; 00206 00207 for (i = 0; i < nColors; i++) 00208 { 00209 if ((UINT)(*Elements) < NUM_SYSCOLORS) 00210 { 00211 gpsi->argbSystem[*Elements] = *Colors; 00212 IntGdiSetSolidBrushColor(gpsi->ahbrSystem[*Elements], *Colors); 00213 } 00214 Elements++; 00215 Colors++; 00216 } 00217 } 00218 00219 HGDIOBJ FASTCALL 00220 IntGetSysColorBrush(INT Object) 00221 { 00222 return ((Object < 0) || (NUM_SYSCOLORS <= Object)) ? NULL : gpsi->ahbrSystem[Object]; 00223 } 00224 00225 DWORD FASTCALL 00226 IntGetSysColor(INT nIndex) 00227 { 00228 return (NUM_SYSCOLORS <= (UINT)nIndex) ? 0 : gpsi->argbSystem[nIndex]; 00229 } 00230 00231 VOID FASTCALL 00232 CreateSysColorObjects(VOID) 00233 { 00234 UINT i; 00235 00236 for (i = 0; i < NUM_SYSCOLORS; i++) 00237 { 00238 gpsi->argbSystem[i] = SysColors[i]; 00239 } 00240 00241 /* Create the syscolor brushes */ 00242 for (i = 0; i < NUM_SYSCOLORS; i++) 00243 { 00244 if (gpsi->ahbrSystem[i] == NULL) 00245 { 00246 gpsi->ahbrSystem[i] = IntGdiCreateSolidBrush(SysColors[i]); 00247 if (gpsi->ahbrSystem[i] != NULL) 00248 { 00249 GDIOBJ_ConvertToStockObj((HGDIOBJ*)&gpsi->ahbrSystem[i]); 00250 } 00251 } 00252 } 00253 } 00254 00255 /* EOF */ Generated on Sat May 26 2012 04:37:15 for ReactOS by
1.7.6.1
|