现在的位置: 首页 > 综合 > 正文

reactos操作系统实现(196)

2013年10月08日 ⁄ 综合 ⁄ 共 2122字 ⁄ 字号 评论关闭

PALETTE_Init函数是用来创建系统调色板。具体实现如下:

#001  HPALETTE FASTCALL PALETTE_Init(VOID)

#002  {

#003      int i;

#004      HPALETTE hpalette;

#005      PLOGPALETTE palPtr;

#006  #ifndef NO_MAPPING

#007      PALOBJ *palObj;

#008  #endif

#009 

 

创建系统20种缺省的颜色。

#010      // create default palette (20 system
colors)

 

分配20种颜色的调色板占用的内存空间。

#011      palPtr = ExAllocatePoolWithTag(PagedPool,

#012                                    
sizeof(LOGPALETTE) +

#013                                        
(NB_RESERVED_COLORS * sizeof(PALETTEENTRY)),

#014                                    
TAG_PALETTE);

 

如果分配内存失败,就返回失败。

#015      if (!palPtr) return FALSE;

#016 

 

设置调色板的版本号。

#017      palPtr->palVersion = 0x300;

 

设置调色板的颜色个数,这里设置为系统缺省值为20个。

#018      palPtr->palNumEntries =
NB_RESERVED_COLORS;

 

初始化系统调色板。

#019      for (i=0; i<NB_RESERVED_COLORS; i++)

#020      {

#021          palPtr->palPalEntry[i].peRed =
g_sysPalTemplate[i].peRed;

#022          palPtr->palPalEntry[i].peGreen =
g_sysPalTemplate[i].peGreen;

#023          palPtr->palPalEntry[i].peBlue =
g_sysPalTemplate[i].peBlue;

#024          palPtr->palPalEntry[i].peFlags =
0;

#025      }

#026 

 

调用函数NtGdiCreatePaletteInternal创建系统调色板。

#027      hpalette =
NtGdiCreatePaletteInternal(palPtr,NB_RESERVED_COLORS);

#028      ExFreePoolWithTag(palPtr, TAG_PALETTE);

#029 

#030  #ifndef NO_MAPPING

#031      palObj = (PALOBJ*)PALETTE_LockPalette(hpalette);

#032      if (palObj)

#033      {

#034          if (!(palObj->mapping =
ExAllocatePool(PagedPool, sizeof(int) * 20)))

#035          {

#036              DbgPrint("Win32k: Can not
create palette mapping -- out of memory!");

#037              return FALSE;

#038          }

#039          PALETTE_UnlockPalette(palObj);

#040      }

#041  #endif

#042 

#043      /* 
palette_size = visual->map_entries; */

#044 

 

设置RGB/BGR/单色的调色板。

#045      gpalRGB.Mode = PAL_RGB;

#046      gpalRGB.RedMask = RGB(0xFF, 0x00, 0x00);

#047      gpalRGB.GreenMask = RGB(0x00, 0xFF,
0x00);

#048      gpalRGB.BlueMask = RGB(0x00, 0x00, 0xFF);

#049 

#050      gpalBGR.Mode = PAL_BGR;

#051      gpalBGR.RedMask = RGB(0x00, 0x00, 0xFF);

#052      gpalBGR.GreenMask = RGB(0x00, 0xFF,
0x00);

#053      gpalBGR.BlueMask = RGB(0xFF, 0x00, 0x00);

#054 

#055      memset(&gpalMono, 0,
sizeof(PALETTE));

#056      gpalMono.Mode = PAL_MONOCHROME;

#057 

#058      return hpalette;

#059  }

抱歉!评论已关闭.