3 #include <include/dc.h>
7 #define PALETTE_FIXED 0x0001 /* read-only colormap - have to use XAllocColor (if not virtual) */
8 #define PALETTE_VIRTUAL 0x0002 /* no mapping needed - pixel == pixel color */
10 #define PALETTE_PRIVATE 0x1000 /* private colormap, identity mapping */
11 #define PALETTE_WHITESET 0x2000
14 #ifndef __WINDDI_H // Defined in ddk/winddi.h
15 #define PAL_INDEXED 0x00000001 // Indexed palette
16 #define PAL_BITFIELDS 0x00000002 // Bit fields used for DIB, DIB section
17 #define PAL_RGB 0x00000004 // Red, green, blue
18 #define PAL_BGR 0x00000008 // Blue, green, red
19 #define PAL_CMYK 0x00000010 // Cyan, magenta, yellow, black
21 #define PAL_DC 0x00000100
22 #define PAL_FIXED 0x00000200 // Can't be changed
23 #define PAL_FREE 0x00000400
24 #define PAL_MANAGED 0x00000800
25 #define PAL_NOSTATIC 0x00001000
26 #define PAL_MONOCHROME 0x00002000 // Two colors only
27 #define PAL_BRUSHHACK 0x00004000
28 #define PAL_DIBSECTION 0x00008000 // Used for a DIB section
29 #define PAL_NOSTATIC256 0x00010000
30 #define PAL_HT 0x00100000 // Halftone palette
31 #define PAL_RGB16_555 0x00200000 // 16-bit RGB in 555 format
32 #define PAL_RGB16_565 0x00400000 // 16-bit RGB in 565 format
33 #define PAL_GAMMACORRECTION 0x00800000 // Correct colors
36 typedef struct _PALETTE
38 /* Header for all gdi objects in the handle table.
39 Do not (re)move this. */
40 BASEOBJECT BaseObject
;
43 XLATEOBJ
*logicalToSystem
;
45 ULONG Mode
; // PAL_INDEXED, PAL_BITFIELDS, PAL_RGB, PAL_BGR
47 PALETTEENTRY
*IndexedColors
;
57 extern PALETTE gpalRGB
, gpalBGR
, gpalMono
, gpalRGB555
, gpalRGB565
;
60 HPALETTE FASTCALL
PALETTE_AllocPalette(ULONG Mode
,
66 HPALETTE FASTCALL
PALETTE_AllocPaletteIndexedRGB(ULONG NumColors
,
67 CONST RGBQUAD
*Colors
);
68 #define PALETTE_FreePalette(pPalette) GDIOBJ_FreeObj((POBJ)pPalette, GDIObjType_PAL_TYPE)
69 #define PALETTE_FreePaletteByHandle(hPalette) GDIOBJ_FreeObjByHandle((HGDIOBJ)hPalette, GDI_OBJECT_TYPE_PALETTE)
70 #define PALETTE_LockPalette(hPalette) ((PPALETTE)GDIOBJ_LockObj((HGDIOBJ)hPalette, GDI_OBJECT_TYPE_PALETTE))
71 #define PALETTE_UnlockPalette(pPalette) GDIOBJ_UnlockObjByPtr((POBJ)pPalette)
73 #define PALETTE_ShareLockPalette(hpal) \
74 ((PPALETTE)GDIOBJ_ShareLockObj((HGDIOBJ)hpal, GDI_OBJECT_TYPE_PALETTE))
75 #define PALETTE_ShareUnlockPalette(ppal) \
76 GDIOBJ_ShareUnlockObjByPtr(&ppal->BaseObject)
78 BOOL INTERNAL_CALL
PALETTE_Cleanup(PVOID ObjectBody
);
80 HPALETTE FASTCALL
PALETTE_Init (VOID
);
81 VOID FASTCALL
PALETTE_ValidateFlags (PALETTEENTRY
* lpPalE
, INT size
);
83 INT APIENTRY
PALETTE_SetMapping(PALOBJ
* palPtr
, UINT uStart
, UINT uNum
, BOOL mapOnly
);
85 INT FASTCALL
PALETTE_ToPhysical (PDC dc
, COLORREF color
);
87 INT FASTCALL
PALETTE_GetObject(PPALETTE pGdiObject
, INT cbCount
, LPLOGBRUSH lpBuffer
);
88 ULONG NTAPI
PALETTE_ulGetNearestPaletteIndex(PALETTE
* ppal
, ULONG iColor
);
89 ULONG NTAPI
PALETTE_ulGetNearestIndex(PALETTE
* ppal
, ULONG iColor
);
90 VOID NTAPI
PALETTE_vGetBitMasks(PPALETTE ppal
, PULONG pulColors
);
92 PPALETTEENTRY FASTCALL
ReturnSystemPalette (VOID
);
93 HPALETTE FASTCALL
GdiSelectPalette(HDC
, HPALETTE
, BOOL
);
97 CalculateShift(ULONG ulMask1
, ULONG ulMask2
)
99 ULONG ulShift1
, ulShift2
;
100 BitScanReverse(&ulShift1
, ulMask1
);
101 BitScanReverse(&ulShift2
, ulMask2
);
102 ulShift2
-= ulShift1
;
103 if ((INT
)ulShift2
< 0) ulShift2
+= 32;
109 PALETTE_ulGetRGBColorFromIndex(PPALETTE ppal
, ULONG ulIndex
)
111 return RGB(ppal
->IndexedColors
[ulIndex
].peRed
,
112 ppal
->IndexedColors
[ulIndex
].peGreen
,
113 ppal
->IndexedColors
[ulIndex
].peBlue
);