From: Gregor Schneider Date: Sun, 27 Dec 2009 15:08:41 +0000 (+0000) Subject: [win32k] X-Git-Tag: backups/aicom-network-stable@46924~153 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=8600c8e72beece84184289801fef7e778620e89f;ds=sidebyside [win32k] - Set the number of mapped colors depending on the usage parameter - Use pure PALETTERGB color values when no palette is selected - Fixes true color issue mentioned in r44712 svn path=/trunk/; revision=44769 --- diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 0bae35a1058..12f3c2de0d4 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -667,7 +667,7 @@ VOID IntHandleSpecialColorType(HDC hDC, COLORREF* Color) case 0x10: /* DIBINDEX */ if (IntGetDIBColorTable(hDC, LOWORD(*Color), 1, &quad) == 1) { - *Color = RGB(quad.rgbRed, quad.rgbGreen, quad.rgbBlue); + *Color = RGB(quad.rgbRed, quad.rgbGreen, quad.rgbBlue); } else { @@ -677,10 +677,16 @@ VOID IntHandleSpecialColorType(HDC hDC, COLORREF* Color) break; case 0x02: /* PALETTERGB */ pdc = DC_LockDc(hDC); - index = NtGdiGetNearestPaletteIndex(pdc->dclevel.hpal, *Color); - if (IntGetPaletteEntries(pdc->dclevel.hpal, index, 1, &palEntry) == 1) + if (pdc->dclevel.hpal != NtGdiGetStockObject(DEFAULT_PALETTE)) { - *Color = RGB(palEntry.peRed, palEntry.peGreen, palEntry.peBlue); + index = NtGdiGetNearestPaletteIndex(pdc->dclevel.hpal, *Color); + IntGetPaletteEntries(pdc->dclevel.hpal, index, 1, &palEntry); + *Color = RGB(palEntry.peRed, palEntry.peGreen, palEntry.peBlue); + } + else + { + /* Use the pure color */ + *Color = *Color & 0x00FFFFFF; } DC_UnlockDc(pdc); break; @@ -688,7 +694,7 @@ VOID IntHandleSpecialColorType(HDC hDC, COLORREF* Color) pdc = DC_LockDc(hDC); if (IntGetPaletteEntries(pdc->dclevel.hpal, LOWORD(*Color), 1, &palEntry) == 1) { - *Color = RGB(palEntry.peRed, palEntry.peGreen, palEntry.peBlue); + *Color = RGB(palEntry.peRed, palEntry.peGreen, palEntry.peBlue); } DC_UnlockDc(pdc); break; diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 04c00c01c1b..cc2a16efb2f 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -1442,14 +1442,15 @@ DIB_CreateDIBSection( if (usage == DIB_PAL_COLORS) { lpRGB = DIB_MapPaletteColors(dc, bmi); + ColorCount = bi->biClrUsed; + if (ColorCount == 0) + { + ColorCount = 1 << bi->biBitCount; + } } else { lpRGB = bmi->bmiColors; - } - ColorCount = bi->biClrUsed; - if (ColorCount == 0) - { ColorCount = 1 << bi->biBitCount; }