mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 19:22:58 +00:00
It's possible to select an (indexed) palette into a bitfield (e.g. 16 bit
deep) DC. This palette will be used when calling CreateDIBSection with DIB_PAL_COLORS usage. Fixes bug 1077. svn path=/trunk/; revision=19967
This commit is contained in:
parent
d108d4822a
commit
2c2515fd46
4 changed files with 17 additions and 1 deletions
|
@ -100,6 +100,8 @@ typedef struct _DC
|
||||||
INT saveLevel;
|
INT saveLevel;
|
||||||
BOOL IsIC;
|
BOOL IsIC;
|
||||||
|
|
||||||
|
HPALETTE PalIndexed;
|
||||||
|
|
||||||
WIN_DC_INFO w;
|
WIN_DC_INFO w;
|
||||||
} DC, *PDC;
|
} DC, *PDC;
|
||||||
|
|
||||||
|
|
|
@ -509,6 +509,12 @@ HPALETTE STDCALL NtGdiSelectPalette(HDC hDC,
|
||||||
oldPal = dc->w.hPalette;
|
oldPal = dc->w.hPalette;
|
||||||
dc->w.hPalette = hpal;
|
dc->w.hPalette = hpal;
|
||||||
}
|
}
|
||||||
|
else if (8 < dc->w.bitsPerPixel && PAL_INDEXED == PalGDI->Mode)
|
||||||
|
{
|
||||||
|
PALETTE_UnlockPalette(PalGDI);
|
||||||
|
oldPal = dc->PalIndexed;
|
||||||
|
dc->PalIndexed = hpal;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PALETTE_UnlockPalette(PalGDI);
|
PALETTE_UnlockPalette(PalGDI);
|
||||||
|
|
|
@ -222,6 +222,7 @@ NtGdiCreateCompatibleDC(HDC hDC)
|
||||||
NewDC->w.hFirstBitmap = hBitmap;
|
NewDC->w.hFirstBitmap = hBitmap;
|
||||||
NewDC->GDIDevice = OrigDC->GDIDevice;
|
NewDC->GDIDevice = OrigDC->GDIDevice;
|
||||||
|
|
||||||
|
NewDC->PalIndexed = OrigDC->PalIndexed;
|
||||||
NewDC->w.hPalette = OrigDC->w.hPalette;
|
NewDC->w.hPalette = OrigDC->w.hPalette;
|
||||||
NewDC->w.textColor = OrigDC->w.textColor;
|
NewDC->w.textColor = OrigDC->w.textColor;
|
||||||
NewDC->w.textAlign = OrigDC->w.textAlign;
|
NewDC->w.textAlign = OrigDC->w.textAlign;
|
||||||
|
@ -905,6 +906,7 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
|
||||||
|
|
||||||
if (! CreateAsIC)
|
if (! CreateAsIC)
|
||||||
{
|
{
|
||||||
|
NewDC->PalIndexed = NtGdiGetStockObject(DEFAULT_PALETTE);
|
||||||
NewDC->w.hPalette = NewDC->DevInfo->hpalDefault;
|
NewDC->w.hPalette = NewDC->DevInfo->hpalDefault;
|
||||||
NewDC->w.ROPmode = R2_COPYPEN;
|
NewDC->w.ROPmode = R2_COPYPEN;
|
||||||
|
|
||||||
|
@ -1315,6 +1317,7 @@ NtGdiGetDCState(HDC hDC)
|
||||||
#if 0
|
#if 0
|
||||||
newdc->w.hDevice = dc->w.hDevice;
|
newdc->w.hDevice = dc->w.hDevice;
|
||||||
#endif
|
#endif
|
||||||
|
newdc->PalIndexed = dc->PalIndexed;
|
||||||
newdc->w.hPalette = dc->w.hPalette;
|
newdc->w.hPalette = dc->w.hPalette;
|
||||||
newdc->w.totalExtent = dc->w.totalExtent;
|
newdc->w.totalExtent = dc->w.totalExtent;
|
||||||
newdc->w.bitsPerPixel = dc->w.bitsPerPixel;
|
newdc->w.bitsPerPixel = dc->w.bitsPerPixel;
|
||||||
|
@ -1440,6 +1443,7 @@ NtGdiSetDCState ( HDC hDC, HDC hDCSave )
|
||||||
dc->vportOrgY = dcs->vportOrgY;
|
dc->vportOrgY = dcs->vportOrgY;
|
||||||
dc->vportExtX = dcs->vportExtX;
|
dc->vportExtX = dcs->vportExtX;
|
||||||
dc->vportExtY = dcs->vportExtY;
|
dc->vportExtY = dcs->vportExtY;
|
||||||
|
dc->PalIndexed = dcs->PalIndexed;
|
||||||
|
|
||||||
if (!(dc->w.flags & DC_MEMORY))
|
if (!(dc->w.flags & DC_MEMORY))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1108,7 +1108,11 @@ DIB_MapPaletteColors(PDC dc, CONST BITMAPINFO* lpbmi)
|
||||||
if (palGDI->Mode != PAL_INDEXED)
|
if (palGDI->Mode != PAL_INDEXED)
|
||||||
{
|
{
|
||||||
PALETTE_UnlockPalette(palGDI);
|
PALETTE_UnlockPalette(palGDI);
|
||||||
return NULL;
|
palGDI = PALETTE_LockPalette(dc->PalIndexed);
|
||||||
|
if (palGDI->Mode != PAL_INDEXED)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nNumColors = 1 << lpbmi->bmiHeader.biBitCount;
|
nNumColors = 1 << lpbmi->bmiHeader.biBitCount;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue