/* * @implemented */ HPALETTE APIENTRY NtGdiCreatePaletteInternal ( IN LPLOGPALETTE pLogPal, IN UINT cEntries ) { PPALETTE PalGDI; HPALETTE NewPalette; pLogPal->palNumEntries = cEntries; NewPalette = PALETTE_AllocPalette( PAL_INDEXED, cEntries, (PULONG)pLogPal->palPalEntry, 0, 0, 0); if (NewPalette == NULL) { return NULL; } PalGDI = (PPALETTE) PALETTE_ShareLockPalette(NewPalette); if (PalGDI != NULL) { PALETTE_ValidateFlags(PalGDI->IndexedColors, PalGDI->NumColors); PALETTE_ShareUnlockPalette(PalGDI); } else { /* FIXME - Handle PalGDI == NULL!!!! */ DPRINT1("PalGDI is NULL\n"); } return NewPalette; }
PPALETTE NTAPI PALETTE_AllocPalWithHandle( _In_ ULONG iMode, _In_ ULONG cColors, _In_opt_ const PALETTEENTRY* pEntries, _In_ FLONG flRed, _In_ FLONG flGreen, _In_ FLONG flBlue) { PPALETTE ppal; /* Allocate the palette without a handle */ ppal = PALETTE_AllocPalette(iMode, cColors, pEntries, flRed, flGreen, flBlue); if (!ppal) return NULL; /* Insert the palette into the handle table */ if (!GDIOBJ_hInsertObject(&ppal->BaseObject, GDI_OBJ_HMGR_POWNED)) { DPRINT1("Could not insert palette into handle table.\n"); GDIOBJ_vFreeObject(&ppal->BaseObject); return NULL; } return ppal; }
/* * @implemented */ HPALETTE APIENTRY EngCreatePalette( ULONG iMode, ULONG cColors, ULONG *pulColors, ULONG flRed, ULONG flGreen, ULONG flBlue) { PPALETTE ppal; HPALETTE hpal; ppal = PALETTE_AllocPalette(iMode, cColors, (PPALETTEENTRY)pulColors, flRed, flGreen, flBlue); if (!ppal) return NULL; hpal = GDIOBJ_hInsertObject(&ppal->BaseObject, GDI_OBJ_HMGR_PUBLIC); if (!hpal) { DPRINT1("Could not insert palette into handle table.\n"); GDIOBJ_vFreeObject(&ppal->BaseObject); return NULL; } PALETTE_UnlockPalette(ppal); return hpal; }
static PPALETTE FixupDIBBrushPalette( _In_ PPALETTE ppalDIB, _In_ PPALETTE ppalDC) { PPALETTE ppalNew; ULONG i, iPalIndex, crColor; /* Allocate a new palette */ ppalNew = PALETTE_AllocPalette(PAL_INDEXED, ppalDIB->NumColors, NULL, 0, 0, 0); if (ppalNew == NULL) { ERR("Failed to allcate palette for brush\n"); return NULL; } /* Loop all colors */ for (i = 0; i < ppalDIB->NumColors; i++) { /* Get the RGB color, which is the index into the DC palette */ iPalIndex = PALETTE_ulGetRGBColorFromIndex(ppalDIB, i); /* Roll over when index is too big */ iPalIndex %= ppalDC->NumColors; /* Set the indexed DC color as the new color */ crColor = PALETTE_ulGetRGBColorFromIndex(ppalDC, iPalIndex); PALETTE_vSetRGBColorForIndex(ppalNew, i, crColor); } /* Return the new palette */ return ppalNew; }
// Create the system palette INIT_FUNCTION NTSTATUS NTAPI InitPaletteImpl() { // Create default palette (20 system colors) gppalDefault = PALETTE_AllocPalWithHandle(PAL_INDEXED, 20, g_sysPalTemplate, 0, 0, 0); GDIOBJ_vReferenceObjectByPointer(&gppalDefault->BaseObject); PALETTE_UnlockPalette(gppalDefault); /* palette_size = visual->map_entries; */ gpalRGB.flFlags = PAL_RGB; gpalRGB.RedMask = RGB(0xFF, 0x00, 0x00); gpalRGB.GreenMask = RGB(0x00, 0xFF, 0x00); gpalRGB.BlueMask = RGB(0x00, 0x00, 0xFF); gpalRGB.BaseObject.ulShareCount = 1; gpalRGB.BaseObject.BaseFlags = 0 ; gpalBGR.flFlags = PAL_BGR; gpalBGR.RedMask = RGB(0x00, 0x00, 0xFF); gpalBGR.GreenMask = RGB(0x00, 0xFF, 0x00); gpalBGR.BlueMask = RGB(0xFF, 0x00, 0x00); gpalBGR.BaseObject.ulShareCount = 1; gpalBGR.BaseObject.BaseFlags = 0 ; gpalRGB555.flFlags = PAL_RGB16_555 | PAL_BITFIELDS; gpalRGB555.RedMask = 0x7C00; gpalRGB555.GreenMask = 0x3E0; gpalRGB555.BlueMask = 0x1F; gpalRGB555.BaseObject.ulShareCount = 1; gpalRGB555.BaseObject.BaseFlags = 0 ; gpalRGB565.flFlags = PAL_RGB16_565 | PAL_BITFIELDS; gpalRGB565.RedMask = 0xF800; gpalRGB565.GreenMask = 0x7E0; gpalRGB565.BlueMask = 0x1F; gpalRGB565.BaseObject.ulShareCount = 1; gpalRGB565.BaseObject.BaseFlags = 0 ; gppalMono = PALETTE_AllocPalette(PAL_MONOCHROME|PAL_INDEXED, 2, NULL, 0, 0, 0); PALETTE_vSetRGBColorForIndex(gppalMono, 0, 0x000000); PALETTE_vSetRGBColorForIndex(gppalMono, 1, 0xffffff); /* Initialize default surface palettes */ appalSurfaceDefault[BMF_1BPP] = gppalMono; appalSurfaceDefault[BMF_4BPP] = gppalDefault; appalSurfaceDefault[BMF_8BPP] = gppalDefault; appalSurfaceDefault[BMF_16BPP] = &gpalRGB565; appalSurfaceDefault[BMF_24BPP] = &gpalBGR; appalSurfaceDefault[BMF_32BPP] = &gpalBGR; appalSurfaceDefault[BMF_4RLE] = gppalDefault; appalSurfaceDefault[BMF_8RLE] = gppalDefault; appalSurfaceDefault[BMF_JPEG] = &gpalRGB; appalSurfaceDefault[BMF_PNG] = &gpalRGB; return STATUS_SUCCESS; }