ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

stockobj.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.