ReactOS 0.4.16-dev-297-gc569aee
palette.c File Reference
#include "framebuf.h"
Include dependency graph for palette.c:

Go to the source code of this file.

Functions

BOOL IntInitDefaultPalette (PPDEV ppdev, PDEVINFO pDevInfo)
 
BOOL APIENTRY IntSetPalette (IN DHPDEV dhpdev, IN PPALETTEENTRY ppalent, IN ULONG iStart, IN ULONG cColors)
 
BOOL APIENTRY DrvSetPalette (IN DHPDEV dhpdev, IN PALOBJ *ppalo, IN FLONG fl, IN ULONG iStart, IN ULONG cColors)
 

Variables

const PALETTEENTRY BASEPALETTE [20]
 

Function Documentation

◆ DrvSetPalette()

BOOL APIENTRY DrvSetPalette ( IN DHPDEV  dhpdev,
IN PALOBJ ppalo,
IN FLONG  fl,
IN ULONG  iStart,
IN ULONG  cColors 
)

Definition at line 170 of file palette.c.

176{
177 PPALETTEENTRY PaletteEntries;
178 BOOL bRet;
179
180 if (cColors == 0)
181 return FALSE;
182
183 PaletteEntries = EngAllocMem(0, cColors * sizeof(ULONG), ALLOC_TAG);
184 if (PaletteEntries == NULL)
185 {
186 return FALSE;
187 }
188
189 if (PALOBJ_cGetColors(ppalo, iStart, cColors, (PULONG)PaletteEntries) !=
190 cColors)
191 {
192 EngFreeMem(PaletteEntries);
193 return FALSE;
194 }
195
196 bRet = IntSetPalette(dhpdev, PaletteEntries, iStart, cColors);
197 EngFreeMem(PaletteEntries);
198 return bRet;
199}
#define ALLOC_TAG
Definition: btrfs_drv.h:87
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define EngFreeMem
Definition: polytest.cpp:56
void * EngAllocMem(int zero, unsigned long size, int tag=0)
Definition: polytest.cpp:70
uint32_t * PULONG
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
BOOL APIENTRY IntSetPalette(IN DHPDEV dhpdev, IN PPALETTEENTRY ppalent, IN ULONG iStart, IN ULONG cColors)
Definition: palette.c:110
_In_ PALOBJ * ppalo
Definition: winddi.h:4012
ENGAPI ULONG APIENTRY PALOBJ_cGetColors(_In_ PALOBJ *ppalo, _In_ ULONG iStart, _In_ ULONG cColors, _Out_writes_(cColors) ULONG *pulColors)
_In_ UINT iStart
Definition: wingdi.h:3620

◆ IntInitDefaultPalette()

BOOL IntInitDefaultPalette ( PPDEV  ppdev,
PDEVINFO  pDevInfo 
)

Definition at line 60 of file palette.c.

63{
64 ULONG ColorLoop;
65 PPALETTEENTRY PaletteEntryPtr;
66
67 if (ppdev->BitsPerPixel > 8)
68 {
69 ppdev->DefaultPalette = pDevInfo->hpalDefault =
71 ppdev->RedMask, ppdev->GreenMask, ppdev->BlueMask);
72 }
73 else
74 {
75 ppdev->PaletteEntries = EngAllocMem(0, sizeof(PALETTEENTRY) << 8, ALLOC_TAG);
76 if (ppdev->PaletteEntries == NULL)
77 {
78 return FALSE;
79 }
80
81 for (ColorLoop = 256, PaletteEntryPtr = ppdev->PaletteEntries;
82 ColorLoop != 0;
83 ColorLoop--, PaletteEntryPtr++)
84 {
85 PaletteEntryPtr->peRed = ((ColorLoop >> 5) & 7) * 255 / 7;
86 PaletteEntryPtr->peGreen = ((ColorLoop >> 3) & 3) * 255 / 3;
87 PaletteEntryPtr->peBlue = (ColorLoop & 7) * 255 / 7;
88 PaletteEntryPtr->peFlags = 0;
89 }
90
91 memcpy(ppdev->PaletteEntries, BASEPALETTE, 10 * sizeof(PALETTEENTRY));
92 memcpy(ppdev->PaletteEntries + 246, BASEPALETTE + 10, 10 * sizeof(PALETTEENTRY));
93
94 ppdev->DefaultPalette = pDevInfo->hpalDefault =
95 EngCreatePalette(PAL_INDEXED, 256, (PULONG)ppdev->PaletteEntries, 0, 0, 0);
96 }
97
98 return ppdev->DefaultPalette != NULL;
99}
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
HPALETTE hpalDefault
Definition: winddi.h:398
ULONG GreenMask
Definition: framebuf.h:44
ULONG BlueMask
Definition: framebuf.h:45
PALETTEENTRY * PaletteEntries
Definition: framebuf.h:49
ULONG RedMask
Definition: framebuf.h:43
BYTE BitsPerPixel
Definition: framebuf.h:42
HPALETTE DefaultPalette
Definition: framebuf.h:48
const PALETTEENTRY BASEPALETTE[20]
Definition: palette.c:28
#define PAL_BITFIELDS
Definition: winddi.h:1562
#define PAL_INDEXED
Definition: winddi.h:1561
_Must_inspect_result_ ENGAPI HPALETTE APIENTRY EngCreatePalette(_In_ ULONG iMode, _In_ ULONG cColors, _In_ ULONG *pulColors, _In_ FLONG flRed, _In_ FLONG flGreen, _In_ FLONG flBlue)

Referenced by DrvEnablePDEV().

◆ IntSetPalette()

BOOL APIENTRY IntSetPalette ( IN DHPDEV  dhpdev,
IN PPALETTEENTRY  ppalent,
IN ULONG  iStart,
IN ULONG  cColors 
)

Definition at line 110 of file palette.c.

115{
116 PVIDEO_CLUT pClut;
117 ULONG ClutSize;
118
119 ClutSize = sizeof(VIDEO_CLUT) + (cColors * sizeof(ULONG));
120 pClut = EngAllocMem(0, ClutSize, ALLOC_TAG);
121 pClut->FirstEntry = iStart;
122 pClut->NumEntries = cColors;
123 memcpy(&pClut->LookupTable[0].RgbLong, ppalent, sizeof(ULONG) * cColors);
124
125 if (((PPDEV)dhpdev)->PaletteShift)
126 {
127 while (cColors--)
128 {
129 pClut->LookupTable[cColors].RgbArray.Red >>= ((PPDEV)dhpdev)->PaletteShift;
130 pClut->LookupTable[cColors].RgbArray.Green >>= ((PPDEV)dhpdev)->PaletteShift;
131 pClut->LookupTable[cColors].RgbArray.Blue >>= ((PPDEV)dhpdev)->PaletteShift;
132 pClut->LookupTable[cColors].RgbArray.Unused = 0;
133 }
134 }
135 else
136 {
137 while (cColors--)
138 {
139 pClut->LookupTable[cColors].RgbArray.Unused = 0;
140 }
141 }
142
143 /*
144 * Set the palette registers.
145 */
146
147 if (EngDeviceIoControl(((PPDEV)dhpdev)->hDriver, IOCTL_VIDEO_SET_COLOR_REGISTERS,
148 pClut, ClutSize, NULL, 0, &cColors))
149 {
150 EngFreeMem(pClut);
151 return FALSE;
152 }
153
154 EngFreeMem(pClut);
155 return TRUE;
156}
#define TRUE
Definition: types.h:120
struct _PDEV * PPDEV
#define IOCTL_VIDEO_SET_COLOR_REGISTERS
Definition: ntddvdeo.h:218
union VIDEO_CLUT::@3174 LookupTable[1]
USHORT FirstEntry
Definition: ntddvdeo.h:590
ULONG RgbLong
Definition: ntddvdeo.h:593
VIDEO_CLUTDATA RgbArray
Definition: ntddvdeo.h:592
USHORT NumEntries
Definition: ntddvdeo.h:589
Definition: framebuf.h:34
_In_ LPWSTR _In_ ULONG _In_ ULONG _In_ ULONG _Out_ DEVINFO _In_ HDEV _In_ LPWSTR _In_ HANDLE hDriver
Definition: winddi.h:3557

Referenced by DrvAssertMode(), DrvEnableSurface(), and DrvSetPalette().

Variable Documentation

◆ BASEPALETTE

const PALETTEENTRY BASEPALETTE[20]
Initial value:
=
{
{ 0x00, 0x00, 0x00, 0x00 },
{ 0x80, 0x00, 0x00, 0x00 },
{ 0x00, 0x80, 0x00, 0x00 },
{ 0x80, 0x80, 0x00, 0x00 },
{ 0x00, 0x00, 0x80, 0x00 },
{ 0x80, 0x00, 0x80, 0x00 },
{ 0x00, 0x80, 0x80, 0x00 },
{ 0xC0, 0xC0, 0xC0, 0x00 },
{ 0xC0, 0xDC, 0xC0, 0x00 },
{ 0xD4, 0xD0, 0xC8, 0x00 },
{ 0xFF, 0xFB, 0xF0, 0x00 },
{ 0x3A, 0x6E, 0xA5, 0x00 },
{ 0x80, 0x80, 0x80, 0x00 },
{ 0xFF, 0x00, 0x00, 0x00 },
{ 0x00, 0xFF, 0x00, 0x00 },
{ 0xFF, 0xFF, 0x00, 0x00 },
{ 0x00, 0x00, 0xFF, 0x00 },
{ 0xFF, 0x00, 0xFF, 0x00 },
{ 0x00, 0xFF, 0xFF, 0x00 },
{ 0xFF, 0xFF, 0xFF, 0x00 },
}

Definition at line 28 of file palette.c.

Referenced by bInitDefaultPalette(), and IntInitDefaultPalette().