mirror of
https://github.com/reactos/reactos.git
synced 2025-05-16 07:47:21 +00:00
- Fix creation of XLATE in IntEngCreateSrcMonoXlate. It was doing it wrong (colors swapped) and it only worked, because the caller of the function also passed the wrong arguments.
- Mono DIBs need a special handling when creating the XLATEOBJ. Handle this in IntCreateXlateForBlt. Fixes broken colors on google/Firefox page. svn path=/trunk/; revision=38633
This commit is contained in:
parent
c7aab5aafd
commit
474ed3e076
1 changed files with 27 additions and 6 deletions
|
@ -403,8 +403,9 @@ IntEngCreateSrcMonoXlate(HPALETTE PaletteDest,
|
|||
XlateGDI->GreenShift = CalculateShift(RGB(0x00, 0xFF, 0x00)) - CalculateShift(XlateGDI->GreenMask);
|
||||
XlateGDI->BlueShift = CalculateShift(RGB(0x00, 0x00, 0xFF)) - CalculateShift(XlateGDI->BlueMask);
|
||||
|
||||
XlateObj->pulXlate[0] = ShiftAndMask(XlateGDI, BackgroundColor);
|
||||
XlateObj->pulXlate[1] = ShiftAndMask(XlateGDI, ForegroundColor);
|
||||
/* Yes, that's how Windows works, ... */
|
||||
XlateObj->pulXlate[1] = ShiftAndMask(XlateGDI, BackgroundColor);
|
||||
XlateObj->pulXlate[0] = ShiftAndMask(XlateGDI, ForegroundColor);
|
||||
|
||||
if (XlateObj->iDstType == PAL_INDEXED)
|
||||
{
|
||||
|
@ -484,9 +485,24 @@ IntCreateXlateForBlt(PDC pDCDest, PDC pDCSrc, BITMAPOBJ* pDestSurf, BITMAPOBJ* p
|
|||
{
|
||||
if (pSrcSurf->SurfObj.iBitmapFormat == BMF_1BPP)
|
||||
{
|
||||
pDc_Attr = pDCDest->pDc_Attr;
|
||||
if (!pDc_Attr) pDc_Attr = &pDCDest->Dc_Attr;
|
||||
XlateObj = IntEngCreateSrcMonoXlate(DestPalette, pDc_Attr->crBackgroundClr, pDc_Attr->crForegroundClr);
|
||||
/* DIB sections need special handling */
|
||||
if (pSrcSurf->dib)
|
||||
{
|
||||
PPALGDI ppal = PALETTE_LockPalette(pSrcSurf->hDIBPalette);
|
||||
if (ppal)
|
||||
{
|
||||
XlateObj = IntEngCreateSrcMonoXlate(DestPalette, ((ULONG*)ppal->IndexedColors)[0], ((ULONG*)ppal->IndexedColors)[1]);
|
||||
PALETTE_UnlockPalette(ppal);
|
||||
}
|
||||
else
|
||||
XlateObj = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
pDc_Attr = pDCDest->pDc_Attr;
|
||||
if (!pDc_Attr) pDc_Attr = &pDCDest->Dc_Attr;
|
||||
XlateObj = IntEngCreateSrcMonoXlate(DestPalette, pDc_Attr->crForegroundClr, pDc_Attr->crBackgroundClr);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -563,7 +579,12 @@ XLATEOBJ_iXlate(XLATEOBJ *XlateObj, ULONG Color)
|
|||
if (XlateObj->flXlate & XO_TABLE)
|
||||
{
|
||||
if (Color >= XlateObj->cEntries)
|
||||
Color %= XlateObj->cEntries;
|
||||
{
|
||||
DPRINT1("+++ Color = 0x%x, XlateObj->flXlate = 0x%x, XlateObj->cEntries = %ld\n",
|
||||
Color, XlateObj->flXlate, XlateObj->cEntries);
|
||||
XlateGDI = ObjToGDI(XlateObj, XLATE);
|
||||
Color %= XlateObj->cEntries;
|
||||
}
|
||||
|
||||
return XlateObj->pulXlate[Color];
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue