diff --git a/subsystems/win32/win32k/eng/xlate.c b/subsystems/win32/win32k/eng/xlate.c index 0dc9ac0ae24..8f9962341e3 100644 --- a/subsystems/win32/win32k/eng/xlate.c +++ b/subsystems/win32/win32k/eng/xlate.c @@ -362,19 +362,19 @@ EXLATEOBJ_vInitialize( EXLATEOBJ_vInitTrivial(pexlo); if (ppalDst == ppalSrc || !ppalSrc || !ppalDst || - ((ppalDst->Mode == PAL_RGB || ppalDst->Mode == PAL_BGR) && - ppalDst->Mode == ppalSrc->Mode)) + ((ppalDst->flFlags == PAL_RGB || ppalDst->flFlags == PAL_BGR) && + ppalDst->flFlags == ppalSrc->flFlags)) { return; } pexlo->ppalSrc = ppalSrc; pexlo->ppalDst = ppalDst; - pexlo->xlo.iSrcType = ppalSrc->Mode; - pexlo->xlo.iDstType = ppalDst->Mode; + pexlo->xlo.iSrcType = ppalSrc->flFlags; + pexlo->xlo.iDstType = ppalDst->flFlags; /* Chack if both of the pallettes are indexed */ - if (!(ppalSrc->Mode & PAL_INDEXED) || !(ppalDst->Mode & PAL_INDEXED)) + if (!(ppalSrc->flFlags & PAL_INDEXED) || !(ppalDst->flFlags & PAL_INDEXED)) { /* At least one palette is not indexed, calculate shifts/masks */ ULONG aulMasksSrc[3], aulMasksDst[3]; @@ -391,10 +391,10 @@ EXLATEOBJ_vInitialize( pexlo->ulBlueShift = CalculateShift(aulMasksSrc[2], aulMasksDst[2]); } - if (ppalSrc->Mode & PAL_MONOCHROME) + if (ppalSrc->flFlags & PAL_MONOCHROME) { /* This is a monochrome palette */ - if (!(ppalDst->Mode & PAL_MONOCHROME)) + if (!(ppalDst->flFlags & PAL_MONOCHROME)) { /* Mono to color, use the dest DC's fore and back color */ pexlo->pfnXlate = EXLATEOBJ_iXlateTable; @@ -406,28 +406,28 @@ EXLATEOBJ_vInitialize( PALETTE_ulGetNearestIndex(ppalDst, crDstBackColor); } } - else if (ppalDst->Mode & PAL_MONOCHROME) + else if (ppalDst->flFlags & PAL_MONOCHROME) { pexlo->pfnXlate = EXLATEOBJ_iXlateToMono; pexlo->xlo.flXlate |= XO_TO_MONO; pexlo->xlo.cEntries = 1; - if (ppalSrc->Mode & PAL_INDEXED) + if (ppalSrc->flFlags & PAL_INDEXED) { pexlo->aulXlate[0] = PALETTE_ulGetNearestPaletteIndex(ppalSrc, crSrcBackColor); } - else if (ppalSrc->Mode & PAL_BGR) + else if (ppalSrc->flFlags & PAL_BGR) { pexlo->aulXlate[0] = crSrcBackColor; } - else if (ppalSrc->Mode & PAL_RGB) + else if (ppalSrc->flFlags & PAL_RGB) { pexlo->aulXlate[0] = RGB(GetBValue(crSrcBackColor), GetGValue(crSrcBackColor), GetRValue(crSrcBackColor)); } - else if (ppalSrc->Mode & PAL_BITFIELDS) + else if (ppalSrc->flFlags & PAL_BITFIELDS) { PALETTE_vGetBitMasks(ppalSrc, &pexlo->ulRedMask); pexlo->ulRedShift = CalculateShift(0xFF, pexlo->ulRedMask); @@ -437,7 +437,7 @@ EXLATEOBJ_vInitialize( pexlo->aulXlate[0] = EXLATEOBJ_iXlateShiftAndMask(pexlo, crSrcBackColor); } } - else if (ppalSrc->Mode & PAL_INDEXED) + else if (ppalSrc->flFlags & PAL_INDEXED) { cEntries = ppalSrc->NumColors; @@ -458,7 +458,7 @@ EXLATEOBJ_vInitialize( pexlo->xlo.cEntries = cEntries; pexlo->pfnXlate = EXLATEOBJ_iXlateTable; - if (ppalDst->Mode & PAL_INDEXED) + if (ppalDst->flFlags & PAL_INDEXED) { pexlo->xlo.flXlate |= XO_TABLE; @@ -504,78 +504,78 @@ EXLATEOBJ_vInitialize( } } } - else if (ppalSrc->Mode & PAL_RGB) + else if (ppalSrc->flFlags & PAL_RGB) { - if (ppalDst->Mode & PAL_INDEXED) + if (ppalDst->flFlags & PAL_INDEXED) pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoPal; - else if (ppalDst->Mode & PAL_BGR) + else if (ppalDst->flFlags & PAL_BGR) pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoBGR; - else if (ppalDst->Mode & PAL_RGB16_555) + else if (ppalDst->flFlags & PAL_RGB16_555) pexlo->pfnXlate = EXLATEOBJ_iXlateRGBto555; - else if (ppalDst->Mode & PAL_RGB16_565) + else if (ppalDst->flFlags & PAL_RGB16_565) pexlo->pfnXlate = EXLATEOBJ_iXlateRGBto565; - else if (ppalDst->Mode & PAL_BITFIELDS) + else if (ppalDst->flFlags & PAL_BITFIELDS) pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask; } - else if (ppalSrc->Mode & PAL_BGR) + else if (ppalSrc->flFlags & PAL_BGR) { - if (ppalDst->Mode & PAL_INDEXED) + if (ppalDst->flFlags & PAL_INDEXED) pexlo->pfnXlate = EXLATEOBJ_iXlateBitfieldsToPal; - else if (ppalDst->Mode & PAL_RGB) + else if (ppalDst->flFlags & PAL_RGB) /* The inverse function works the same */ pexlo->pfnXlate = EXLATEOBJ_iXlateRGBtoBGR; - else if (ppalDst->Mode & PAL_RGB16_555) + else if (ppalDst->flFlags & PAL_RGB16_555) pexlo->pfnXlate = EXLATEOBJ_iXlateBGRto555; - else if (ppalDst->Mode & PAL_RGB16_565) + else if (ppalDst->flFlags & PAL_RGB16_565) pexlo->pfnXlate = EXLATEOBJ_iXlateBGRto565; - else if (ppalDst->Mode & PAL_BITFIELDS) + else if (ppalDst->flFlags & PAL_BITFIELDS) pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask; } - else if (ppalSrc->Mode & PAL_RGB16_555) + else if (ppalSrc->flFlags & PAL_RGB16_555) { - if (ppalDst->Mode & PAL_INDEXED) + if (ppalDst->flFlags & PAL_INDEXED) pexlo->pfnXlate = EXLATEOBJ_iXlate555toPal; - else if (ppalDst->Mode & PAL_RGB) + else if (ppalDst->flFlags & PAL_RGB) pexlo->pfnXlate = EXLATEOBJ_iXlate555toRGB; - else if (ppalDst->Mode & PAL_BGR) + else if (ppalDst->flFlags & PAL_BGR) pexlo->pfnXlate = EXLATEOBJ_iXlate555toBGR; - else if (ppalDst->Mode & PAL_RGB16_565) + else if (ppalDst->flFlags & PAL_RGB16_565) pexlo->pfnXlate = EXLATEOBJ_iXlate555to565; - else if (ppalDst->Mode & PAL_BITFIELDS) + else if (ppalDst->flFlags & PAL_BITFIELDS) pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask; } - else if (ppalSrc->Mode & PAL_RGB16_565) + else if (ppalSrc->flFlags & PAL_RGB16_565) { - if (ppalDst->Mode & PAL_INDEXED) + if (ppalDst->flFlags & PAL_INDEXED) pexlo->pfnXlate = EXLATEOBJ_iXlate565toPal; - else if (ppalDst->Mode & PAL_RGB) + else if (ppalDst->flFlags & PAL_RGB) pexlo->pfnXlate = EXLATEOBJ_iXlate565toRGB; - else if (ppalDst->Mode & PAL_BGR) + else if (ppalDst->flFlags & PAL_BGR) pexlo->pfnXlate = EXLATEOBJ_iXlate565toBGR; - else if (ppalDst->Mode & PAL_RGB16_555) + else if (ppalDst->flFlags & PAL_RGB16_555) pexlo->pfnXlate = EXLATEOBJ_iXlate565to555; - else if (ppalDst->Mode & PAL_BITFIELDS) + else if (ppalDst->flFlags & PAL_BITFIELDS) pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask; } - else if (ppalSrc->Mode & PAL_BITFIELDS) + else if (ppalSrc->flFlags & PAL_BITFIELDS) { - if (ppalDst->Mode & PAL_INDEXED) + if (ppalDst->flFlags & PAL_INDEXED) pexlo->pfnXlate = EXLATEOBJ_iXlateBitfieldsToPal; else pexlo->pfnXlate = EXLATEOBJ_iXlateShiftAndMask; @@ -694,9 +694,9 @@ XLATEOBJ_cGetPalette(XLATEOBJ *pxlo, ULONG iPal, ULONG cPal, ULONG *pPalOut) /* Verify palette type match */ if (!ppal || ((iPal == XO_SRCPALETTE || iPal == XO_DESTPALETTE) - && !(ppal->Mode & PAL_INDEXED)) || + && !(ppal->flFlags & PAL_INDEXED)) || ((iPal == XO_SRCBITFIELDS || iPal == XO_DESTBITFIELDS) - && !(ppal->Mode & PAL_BITFIELDS))) + && !(ppal->flFlags & PAL_BITFIELDS))) { return 0; } @@ -707,7 +707,7 @@ XLATEOBJ_cGetPalette(XLATEOBJ *pxlo, ULONG iPal, ULONG cPal, ULONG *pPalOut) } /* Copy the values into the buffer */ - if (ppal->Mode & PAL_INDEXED) + if (ppal->flFlags & PAL_INDEXED) { cPal = min(cPal, ppal->NumColors); for (i = 0; i < cPal; i++) diff --git a/subsystems/win32/win32k/include/palette.h b/subsystems/win32/win32k/include/palette.h index 705409716dc..82fcb3ca05b 100644 --- a/subsystems/win32/win32k/include/palette.h +++ b/subsystems/win32/win32k/include/palette.h @@ -40,7 +40,7 @@ typedef struct _PALETTE PALOBJ PalObj; XLATEOBJ *logicalToSystem; HPALETTE Self; - ULONG Mode; // PAL_INDEXED, PAL_BITFIELDS, PAL_RGB, PAL_BGR + FLONG flFlags; // PAL_INDEXED, PAL_BITFIELDS, PAL_RGB, PAL_BGR ULONG NumColors; PALETTEENTRY *IndexedColors; ULONG RedMask; diff --git a/subsystems/win32/win32k/objects/bitmaps.c b/subsystems/win32/win32k/objects/bitmaps.c index f8e0313dc0c..74e02728d67 100644 --- a/subsystems/win32/win32k/objects/bitmaps.c +++ b/subsystems/win32/win32k/objects/bitmaps.c @@ -949,7 +949,7 @@ BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer) pds->dsBmih.biHeight = pds->dsBm.bmHeight; pds->dsBmih.biPlanes = pds->dsBm.bmPlanes; pds->dsBmih.biBitCount = pds->dsBm.bmBitsPixel; - if(psurf->ppal->Mode & PAL_BITFIELDS) + if(psurf->ppal->flFlags & PAL_BITFIELDS) { pds->dsBmih.biCompression = BI_BITFIELDS; } diff --git a/subsystems/win32/win32k/objects/dcobjs.c b/subsystems/win32/win32k/objects/dcobjs.c index cac23165994..bba8441435d 100644 --- a/subsystems/win32/win32k/objects/dcobjs.c +++ b/subsystems/win32/win32k/objects/dcobjs.c @@ -166,7 +166,7 @@ GdiSelectPalette( /* Is this a valid palette for this depth? */ if ((BitsPerFormat(pdc->dclevel.pSurface->SurfObj.iBitmapFormat) <= 8 - && ppal->Mode == PAL_INDEXED) || + && (ppal->flFlags & PAL_INDEXED)) || (BitsPerFormat(pdc->dclevel.pSurface->SurfObj.iBitmapFormat) > 8)) { /* Get old palette, set new one */ diff --git a/subsystems/win32/win32k/objects/dibobj.c b/subsystems/win32/win32k/objects/dibobj.c index d2ca08a9668..116aebf93f8 100644 --- a/subsystems/win32/win32k/objects/dibobj.c +++ b/subsystems/win32/win32k/objects/dibobj.c @@ -1690,7 +1690,7 @@ DIB_MapPaletteColors(PPALETTE ppal, CONST BITMAPINFO* lpbmi) USHORT *lpIndex; HPALETTE hpal; - if (ppal->Mode != PAL_INDEXED) + if (!(ppal->flFlags & PAL_INDEXED)) { return NULL; } @@ -1764,17 +1764,33 @@ BuildDIBPalette(CONST BITMAPINFO *bmi) GreenMask = pdwColors[1]; BlueMask = pdwColors[2]; } - else if (bits == 15) - { - paletteType = PAL_RGB16_555; - } - else if (bits == 16) - { - paletteType = PAL_RGB16_565; - } else { - paletteType = PAL_BGR; + paletteType = PAL_BITFIELDS; + switch (bits) + { + case 15: + paletteType |= PAL_RGB16_555; + RedMask = 0x7C00; + GreenMask = 0x03E0; + BlueMask = 0x001F; + break; + + case 16: + paletteType |= PAL_RGB16_565; + RedMask = 0xF800; + GreenMask = 0x07E0; + BlueMask = 0x001F; + break; + + case 24: + case 32: + paletteType |= PAL_BGR; + RedMask = 0xFF0000; + GreenMask = 0x00FF00; + BlueMask = 0x0000FF; + break; + } } if (bmi->bmiHeader.biClrUsed == 0) diff --git a/subsystems/win32/win32k/objects/icm.c b/subsystems/win32/win32k/objects/icm.c index f0d7ef72e7a..3dfe7d01d18 100644 --- a/subsystems/win32/win32k/objects/icm.c +++ b/subsystems/win32/win32k/objects/icm.c @@ -256,9 +256,9 @@ UpdateDeviceGammaRamp( HDEV hPDev ) palPtr = (PALOBJ*) palGDI; if (pGDev->flFlags & PDEV_GAMMARAMP_TABLE) - palGDI->Mode |= PAL_GAMMACORRECTION; + palGDI->flFlags |= PAL_GAMMACORRECTION; else - palGDI->Mode &= ~PAL_GAMMACORRECTION; + palGDI->flFlags &= ~PAL_GAMMACORRECTION; if (!(pGDev->flFlags & PDEV_DRIVER_PUNTED_CALL)) // No punting, we hook { diff --git a/subsystems/win32/win32k/objects/palette.c b/subsystems/win32/win32k/objects/palette.c index a5762938ab0..47dbd28eaa6 100644 --- a/subsystems/win32/win32k/objects/palette.c +++ b/subsystems/win32/win32k/objects/palette.c @@ -85,28 +85,28 @@ HPALETTE FASTCALL PALETTE_Init(VOID) /* palette_size = visual->map_entries; */ - gpalRGB.Mode = PAL_RGB; + 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 = 0; gpalRGB.BaseObject.BaseFlags = 0 ; - gpalBGR.Mode = PAL_BGR; + 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 = 0; gpalBGR.BaseObject.BaseFlags = 0 ; - gpalRGB555.Mode = PAL_RGB16_555 | PAL_BITFIELDS; + gpalRGB555.flFlags = PAL_RGB16_555 | PAL_BITFIELDS; gpalRGB555.RedMask = 0x7C00; gpalRGB555.GreenMask = 0x3E0; gpalRGB555.BlueMask = 0x1F; gpalRGB555.BaseObject.ulShareCount = 0; gpalRGB555.BaseObject.BaseFlags = 0 ; - gpalRGB565.Mode = PAL_RGB16_565 | PAL_BITFIELDS; + gpalRGB565.flFlags = PAL_RGB16_565 | PAL_BITFIELDS; gpalRGB565.RedMask = 0xF800; gpalRGB565.GreenMask = 0x7E0; gpalRGB565.BlueMask = 0x1F; @@ -114,7 +114,7 @@ HPALETTE FASTCALL PALETTE_Init(VOID) gpalRGB565.BaseObject.BaseFlags = 0 ; memset(&gpalMono, 0, sizeof(PALETTE)); - gpalMono.Mode = PAL_MONOCHROME; + gpalMono.flFlags = PAL_MONOCHROME; gpalMono.BaseObject.ulShareCount = 0; gpalMono.BaseObject.BaseFlags = 0 ; @@ -162,7 +162,7 @@ PALETTE_AllocPalette(ULONG Mode, NewPalette = PalGDI->BaseObject.hHmgr; PalGDI->Self = NewPalette; - PalGDI->Mode = Mode; + PalGDI->flFlags = Mode; if (NULL != Colors) { @@ -178,20 +178,22 @@ PALETTE_AllocPalette(ULONG Mode, RtlCopyMemory(PalGDI->IndexedColors, Colors, sizeof(PALETTEENTRY) * NumColors); } - if (PAL_INDEXED == Mode) + if (Mode & PAL_INDEXED) { PalGDI->NumColors = NumColors; } - else if (PAL_BITFIELDS == Mode) + else if (Mode & PAL_BITFIELDS) { PalGDI->RedMask = Red; PalGDI->GreenMask = Green; PalGDI->BlueMask = Blue; if (Red == 0x7c00 && Green == 0x3E0 && Blue == 0x1F) - PalGDI->Mode |= PAL_RGB16_555; + PalGDI->flFlags |= PAL_RGB16_555; else if (Red == 0xF800 && Green == 0x7E0 && Blue == 0x1F) - PalGDI->Mode |= PAL_RGB16_565; + PalGDI->flFlags |= PAL_RGB16_565; + else if (Red == 0xFF0000 && Green == 0xFF00 && Blue == 0xFF) + PalGDI->flFlags |= PAL_BGR; } PALETTE_UnlockPalette(PalGDI); @@ -217,7 +219,7 @@ PALETTE_AllocPaletteIndexedRGB(ULONG NumColors, NewPalette = PalGDI->BaseObject.hHmgr; PalGDI->Self = NewPalette; - PalGDI->Mode = PAL_INDEXED; + PalGDI->flFlags = PAL_INDEXED; PalGDI->IndexedColors = ExAllocatePoolWithTag(PagedPool, sizeof(PALETTEENTRY) * NumColors, @@ -321,7 +323,7 @@ ULONG NTAPI PALETTE_ulGetNearestIndex(PALETTE* ppal, ULONG ulColor) { - if (ppal->Mode & PAL_INDEXED) // use fl & PALINDEXED + if (ppal->flFlags & PAL_INDEXED) // use fl & PALINDEXED return PALETTE_ulGetNearestPaletteIndex(ppal, ulColor); else return PALETTE_ulGetNearestBitFieldsIndex(ppal, ulColor); @@ -333,19 +335,19 @@ PALETTE_vGetBitMasks(PPALETTE ppal, PULONG pulColors) { ASSERT(pulColors); - if (ppal->Mode & PAL_INDEXED || ppal->Mode & PAL_RGB) + if (ppal->flFlags & PAL_INDEXED || ppal->flFlags & PAL_RGB) { pulColors[0] = RGB(0xFF, 0x00, 0x00); pulColors[1] = RGB(0x00, 0xFF, 0x00); pulColors[2] = RGB(0x00, 0x00, 0xFF); } - else if (ppal->Mode & PAL_BGR) + else if (ppal->flFlags & PAL_BGR) { pulColors[0] = RGB(0x00, 0x00, 0xFF); pulColors[1] = RGB(0x00, 0xFF, 0x00); pulColors[2] = RGB(0xFF, 0x00, 0x00); } - else if (ppal->Mode & PAL_BITFIELDS) + else if (ppal->flFlags & PAL_BITFIELDS) { pulColors[0] = ppal->RedMask; pulColors[1] = ppal->GreenMask; @@ -433,7 +435,7 @@ PALOBJ_cGetColors(PALOBJ *PalObj, ULONG Start, ULONG Colors, ULONG *PaletteEntry /* NOTE: PaletteEntry ULONGs are in the same order as PALETTEENTRY. */ RtlCopyMemory(PaletteEntry, PalGDI->IndexedColors + Start, sizeof(ULONG) * Colors); - if (PalGDI->Mode & PAL_GAMMACORRECTION) + if (PalGDI->flFlags & PAL_GAMMACORRECTION) ColorCorrection(PalGDI, (PPALETTEENTRY)PaletteEntry, Colors); return Colors; @@ -664,17 +666,17 @@ COLORREF APIENTRY NtGdiGetNearestColor(HDC hDC, COLORREF Color) return nearest; } - if (palGDI->Mode & PAL_INDEXED) + if (palGDI->flFlags & PAL_INDEXED) { ULONG index; index = PALETTE_ulGetNearestPaletteIndex(palGDI, Color); nearest = PALETTE_ulGetRGBColorFromIndex(palGDI, index); } - else if (palGDI->Mode & PAL_RGB || palGDI->Mode & PAL_BGR) + else if (palGDI->flFlags & PAL_RGB || palGDI->flFlags & PAL_BGR) { nearest = Color; } - else if (palGDI->Mode & PAL_BITFIELDS) + else if (palGDI->flFlags & PAL_BITFIELDS) { RBits = 8 - GetNumberOfBits(palGDI->RedMask); GBits = 8 - GetNumberOfBits(palGDI->GreenMask); @@ -702,7 +704,7 @@ NtGdiGetNearestPaletteIndex( if (ppal) { - if (ppal->Mode & PAL_INDEXED) + if (ppal->flFlags & PAL_INDEXED) { /* Return closest match for the given RGB color */ index = PALETTE_ulGetNearestPaletteIndex(ppal, crColor);