mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
3adf450867
Put data into PAGEDATA or INITDATA sections Keep section declaration for prototypes CORE-17540
165 lines
4 KiB
C
165 lines
4 KiB
C
#pragma once
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma warning(disable:4200) // zero-sized array in struct/union
|
|
#endif // _MSC_VER
|
|
|
|
// Palette mode flags
|
|
enum _PALFLAGS
|
|
{
|
|
#ifndef _WINDDI_ // Defined in ddk/winddi.h
|
|
PAL_INDEXED = 0x00000001, // Indexed palette
|
|
PAL_BITFIELDS = 0x00000002, // Bit fields used for DIB, DIB section
|
|
PAL_RGB = 0x00000004, // Red, green, blue
|
|
PAL_BGR = 0x00000008, // Blue, green, red
|
|
PAL_CMYK = 0x00000010, // Cyan, magenta, yellow, black
|
|
#endif
|
|
PAL_DC = 0x00000100,
|
|
PAL_FIXED = 0x00000200, // Can't be changed
|
|
PAL_FREE = 0x00000400,
|
|
PAL_MANAGED = 0x00000800,
|
|
PAL_NOSTATIC = 0x00001000,
|
|
PAL_MONOCHROME = 0x00002000, // Two colors only
|
|
PAL_BRUSHHACK = 0x00004000,
|
|
PAL_DIBSECTION = 0x00008000, // Used for a DIB section
|
|
PAL_NOSTATIC256 = 0x00010000,
|
|
PAL_HT = 0x00100000, // Halftone palette
|
|
PAL_RGB16_555 = 0x00200000, // 16-bit RGB in 555 format
|
|
PAL_RGB16_565 = 0x00400000, // 16-bit RGB in 565 format
|
|
PAL_GAMMACORRECTION = 0x00800000, // Correct colors
|
|
};
|
|
|
|
typedef struct _PALETTE
|
|
{
|
|
/* Header for all gdi objects in the handle table.
|
|
Do not (re)move this. */
|
|
BASEOBJECT BaseObject;
|
|
|
|
PALOBJ PalObj;
|
|
XLATEOBJ *logicalToSystem;
|
|
FLONG flFlags; // PAL_INDEXED, PAL_BITFIELDS, PAL_RGB, PAL_BGR
|
|
ULONG NumColors;
|
|
PALETTEENTRY *IndexedColors;
|
|
ULONG RedMask;
|
|
ULONG GreenMask;
|
|
ULONG BlueMask;
|
|
ULONG ulRedShift;
|
|
ULONG ulGreenShift;
|
|
ULONG ulBlueShift;
|
|
HDEV hPDev;
|
|
PALETTEENTRY apalColors[0];
|
|
} PALETTE, *PPALETTE;
|
|
|
|
extern PALETTE gpalRGB, gpalBGR, gpalRGB555, gpalRGB565, *gppalMono, *gppalDefault;
|
|
extern PPALETTE appalSurfaceDefault[];
|
|
|
|
#define PALETTE_UnlockPalette(pPalette) GDIOBJ_vUnlockObject((POBJ)pPalette)
|
|
#define PALETTE_ShareLockPalette(hpal) \
|
|
((PPALETTE)GDIOBJ_ShareLockObj((HGDIOBJ)hpal, GDI_OBJECT_TYPE_PALETTE))
|
|
#define PALETTE_ShareUnlockPalette(ppal) \
|
|
GDIOBJ_vDereferenceObject(&ppal->BaseObject)
|
|
|
|
CODE_SEG("INIT")
|
|
NTSTATUS
|
|
NTAPI
|
|
InitPaletteImpl(VOID);
|
|
|
|
PPALETTE
|
|
NTAPI
|
|
PALETTE_AllocPalette(
|
|
_In_ ULONG iMode,
|
|
_In_ ULONG cColors,
|
|
_In_opt_ const PALETTEENTRY* pEntries,
|
|
_In_ FLONG flRed,
|
|
_In_ FLONG flGreen,
|
|
_In_ FLONG flBlue);
|
|
|
|
PPALETTE
|
|
NTAPI
|
|
PALETTE_AllocPalWithHandle(
|
|
_In_ ULONG iMode,
|
|
_In_ ULONG cColors,
|
|
_In_opt_ const PALETTEENTRY* pEntries,
|
|
_In_ FLONG flRed,
|
|
_In_ FLONG flGreen,
|
|
_In_ FLONG flBlue);
|
|
|
|
VOID
|
|
FASTCALL
|
|
PALETTE_ValidateFlags(
|
|
PALETTEENTRY* lpPalE,
|
|
INT size);
|
|
|
|
INT
|
|
FASTCALL
|
|
PALETTE_GetObject(
|
|
PPALETTE pGdiObject,
|
|
INT cbCount,
|
|
LPLOGBRUSH lpBuffer);
|
|
|
|
ULONG
|
|
NTAPI
|
|
PALETTE_ulGetNearestPaletteIndex(
|
|
PPALETTE ppal,
|
|
ULONG iColor);
|
|
|
|
ULONG
|
|
NTAPI
|
|
PALETTE_ulGetNearestIndex(
|
|
PPALETTE ppal,
|
|
ULONG iColor);
|
|
|
|
ULONG
|
|
NTAPI
|
|
PALETTE_ulGetNearestBitFieldsIndex(
|
|
PPALETTE ppal,
|
|
ULONG ulColor);
|
|
|
|
VOID
|
|
NTAPI
|
|
PALETTE_vGetBitMasks(
|
|
PPALETTE ppal,
|
|
PULONG pulColors);
|
|
|
|
VOID
|
|
NTAPI
|
|
PALETTE_vCleanup(PVOID ObjectBody);
|
|
|
|
FORCEINLINE
|
|
ULONG
|
|
CalculateShift(ULONG ulMask1, ULONG ulMask2)
|
|
{
|
|
ULONG ulShift1, ulShift2;
|
|
BitScanReverse(&ulShift1, ulMask1);
|
|
BitScanReverse(&ulShift2, ulMask2);
|
|
ulShift2 -= ulShift1;
|
|
if ((INT)ulShift2 < 0) ulShift2 += 32;
|
|
return ulShift2;
|
|
}
|
|
|
|
FORCEINLINE
|
|
ULONG
|
|
PALETTE_ulGetRGBColorFromIndex(PPALETTE ppal, ULONG ulIndex)
|
|
{
|
|
if (ulIndex >= ppal->NumColors) return 0;
|
|
return RGB(ppal->IndexedColors[ulIndex].peRed,
|
|
ppal->IndexedColors[ulIndex].peGreen,
|
|
ppal->IndexedColors[ulIndex].peBlue);
|
|
}
|
|
|
|
FORCEINLINE
|
|
VOID
|
|
PALETTE_vSetRGBColorForIndex(PPALETTE ppal, ULONG ulIndex, COLORREF crColor)
|
|
{
|
|
if (ulIndex >= ppal->NumColors) return;
|
|
ppal->IndexedColors[ulIndex].peRed = GetRValue(crColor);
|
|
ppal->IndexedColors[ulIndex].peGreen = GetGValue(crColor);
|
|
ppal->IndexedColors[ulIndex].peBlue = GetBValue(crColor);
|
|
}
|
|
|
|
HPALETTE
|
|
NTAPI
|
|
GreCreatePaletteInternal(
|
|
IN LPLOGPALETTE pLogPal,
|
|
IN UINT cEntries);
|
|
|