From 5e5532d3efc12d386966945d23f5fdb4e9182bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Wed, 2 Mar 2011 00:15:57 +0000 Subject: [PATCH] [WIN32K] - in 1bpp bitmaps, 0 means white. Take that into in SetDIBits - fix a fixme in XLATEOBJ implementation - remove useless field from ROS_DCINFO Fixes fox audio player GUI :-) Enjoy! svn path=/trunk/; revision=50949 --- reactos/subsystems/win32/win32k/eng/xlate.c | 14 ++++---------- reactos/subsystems/win32/win32k/include/dc.h | 3 --- reactos/subsystems/win32/win32k/include/palette.h | 1 + reactos/subsystems/win32/win32k/objects/dibobj.c | 3 ++- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/xlate.c b/reactos/subsystems/win32/win32k/eng/xlate.c index 82414bd062b..d2d1fa6afb0 100644 --- a/reactos/subsystems/win32/win32k/eng/xlate.c +++ b/reactos/subsystems/win32/win32k/eng/xlate.c @@ -418,9 +418,9 @@ EXLATEOBJ_vInitialize( else if (ppalSrc->flFlags & PAL_BITFIELDS) { PALETTE_vGetBitMasks(ppalSrc, &pexlo->ulRedMask); - pexlo->ulRedShift = CalculateShift(0xFF, pexlo->ulRedMask); - pexlo->ulGreenShift = CalculateShift(0xFF00, pexlo->ulGreenMask); - pexlo->ulBlueShift = CalculateShift(0xFF0000, pexlo->ulBlueMask); + pexlo->ulRedShift = CalculateShift(RGB(0xFF,0,0), pexlo->ulRedMask); + pexlo->ulGreenShift = CalculateShift(RGB(0,0xFF,0), pexlo->ulGreenMask); + pexlo->ulBlueShift = CalculateShift(RGB(0,0,0xFF), pexlo->ulBlueMask); pexlo->aulXlate[0] = EXLATEOBJ_iXlateShiftAndMask(pexlo, crSrcBackColor); } @@ -480,18 +480,12 @@ EXLATEOBJ_vInitialize( } else { - // FIXME: use PALETTE_ulGetNearest - EXLATEOBJ exloTmp = *pexlo; - exloTmp.xlo.pulXlate = exloTmp.aulXlate; - - pexlo->xlo.flXlate |= XO_TABLE; for (i = 0; i < pexlo->xlo.cEntries; i++) { ulColor = RGB(ppalSrc->IndexedColors[i].peRed, ppalSrc->IndexedColors[i].peGreen, ppalSrc->IndexedColors[i].peBlue); - pexlo->xlo.pulXlate[i] = - EXLATEOBJ_iXlateShiftAndMask(&exloTmp, ulColor); + pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestBitFieldsIndex(ppalDst, ulColor); } } } diff --git a/reactos/subsystems/win32/win32k/include/dc.h b/reactos/subsystems/win32/win32k/include/dc.h index 07f412b6f34..1e85e364d35 100644 --- a/reactos/subsystems/win32/win32k/include/dc.h +++ b/reactos/subsystems/win32/win32k/include/dc.h @@ -55,9 +55,6 @@ typedef struct _ROS_DC_INFO HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */ CLIPOBJ *CombinedClip; - - UNICODE_STRING DriverName; - } ROS_DC_INFO; typedef struct _DCLEVEL diff --git a/reactos/subsystems/win32/win32k/include/palette.h b/reactos/subsystems/win32/win32k/include/palette.h index 3fad906ff45..d18edee49df 100644 --- a/reactos/subsystems/win32/win32k/include/palette.h +++ b/reactos/subsystems/win32/win32k/include/palette.h @@ -81,6 +81,7 @@ INT FASTCALL PALETTE_ToPhysical (PDC dc, COLORREF color); INT FASTCALL PALETTE_GetObject(PPALETTE pGdiObject, INT cbCount, LPLOGBRUSH lpBuffer); ULONG NTAPI PALETTE_ulGetNearestPaletteIndex(PALETTE* ppal, ULONG iColor); ULONG NTAPI PALETTE_ulGetNearestIndex(PALETTE* ppal, ULONG iColor); +ULONG NTAPI PALETTE_ulGetNearestBitFieldsIndex(PALETTE* ppal, ULONG ulColor); VOID NTAPI PALETTE_vGetBitMasks(PPALETTE ppal, PULONG pulColors); PPALETTEENTRY FASTCALL ReturnSystemPalette (VOID); diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 84eac972fb0..79509c71127 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -295,7 +295,8 @@ IntSetDIBits( ptSrc.x = 0; ptSrc.y = 0; - EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0, 0, 0); + /* 1bpp bitmaps have 0 for white, 1 for black */ + EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0xFFFFFF, 0, 0); result = IntEngCopyBits(&psurfDst->SurfObj, &psurfSrc->SurfObj,