Author: tkreuzer Date: Sat May 8 17:30:59 2010 New Revision: 47124
URL: http://svn.reactos.org/svn/reactos?rev=47124&view=rev Log: [WIN32K] Fix broken parameter passing from EngMaskBitBlt to (Alpha)BltMask. It was passing the wrong surface and the wrong point. Rename some parameters to reflect what their usage is. Add ASSERTs to make sure noone passes useless parameters. Fixes crippled text in startmenu. The whole code is broken by design, anyway it will go away, once the new text rendering code is done. See issue #4379 for more details.
Modified: trunk/reactos/subsystems/win32/win32k/eng/bitblt.c
Modified: trunk/reactos/subsystems/win32/win32k/eng/bitblt.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/eng/bitblt.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/eng/bitblt.c [iso-8859-1] Sat May 8 17:30:59 2010 @@ -50,6 +50,9 @@ PFN_DIB_GetPixel fnPattern_GetPixel = NULL; ULONG Pattern = 0; HBITMAP hbmPattern; + + ASSERT(psoSource == NULL); + ASSERT(pptlSource == NULL);
if (psoMask == NULL) { @@ -662,8 +665,8 @@ AlphaBltMask(SURFOBJ* psoDest, SURFOBJ* psoSource, // unused SURFOBJ* psoMask, - XLATEOBJ* ColorTranslation, - XLATEOBJ* SrcColorTranslation, + XLATEOBJ* pxloRGB2Dest, + XLATEOBJ* pxloBrush, RECTL* prclDest, POINTL* pptlSource, // unused POINTL* pptlMask, @@ -675,12 +678,15 @@ ULONG Background, BrushColor, NewColor; BYTE *tMask, *lMask;
+ ASSERT(psoSource == NULL); + ASSERT(pptlSource == NULL); + dx = prclDest->right - prclDest->left; dy = prclDest->bottom - prclDest->top;
if (psoMask != NULL) { - BrushColor = XLATEOBJ_iXlate(SrcColorTranslation, pbo ? pbo->iSolidColor : 0); + BrushColor = XLATEOBJ_iXlate(pxloBrush, pbo ? pbo->iSolidColor : 0); r = (int)GetRValue(BrushColor); g = (int)GetGValue(BrushColor); b = (int)GetBValue(BrushColor); @@ -701,14 +707,14 @@ else { Background = DIB_GetSource(psoDest, prclDest->left + i, prclDest->top + j, - SrcColorTranslation); + pxloBrush);
NewColor = RGB((*lMask * (r - GetRValue(Background)) >> 8) + GetRValue(Background), (*lMask * (g - GetGValue(Background)) >> 8) + GetGValue(Background), (*lMask * (b - GetBValue(Background)) >> 8) + GetBValue(Background));
- Background = XLATEOBJ_iXlate(ColorTranslation, NewColor); + Background = XLATEOBJ_iXlate(pxloRGB2Dest, NewColor); DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_PutPixel( psoDest, prclDest->left + i, prclDest->top + j, Background); } @@ -846,10 +852,10 @@ case DC_TRIVIAL: if (psoMask->iBitmapFormat == BMF_8BPP) Ret = AlphaBltMask(psoOutput, NULL , psoInput, DestColorTranslation, SourceColorTranslation, - &OutputRect, &InputPoint, pptlMask, pbo, &AdjustedBrushOrigin); + &OutputRect, NULL, &InputPoint, pbo, &AdjustedBrushOrigin); else Ret = BltMask(psoOutput, NULL, psoInput, DestColorTranslation, - &OutputRect, &InputPoint, pptlMask, pbo, &AdjustedBrushOrigin, + &OutputRect, NULL, &InputPoint, pbo, &AdjustedBrushOrigin, R4_MASK); break; case DC_RECT: @@ -864,13 +870,13 @@ Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; if (psoMask->iBitmapFormat == BMF_8BPP) { - Ret = AlphaBltMask(psoOutput, psoInput, psoMask, DestColorTranslation, SourceColorTranslation, - &CombinedRect, &Pt, pptlMask, pbo, &AdjustedBrushOrigin); + Ret = AlphaBltMask(psoOutput, NULL, psoInput, DestColorTranslation, SourceColorTranslation, + &CombinedRect, NULL, &Pt, pbo, &AdjustedBrushOrigin); } else { - Ret = BltMask(psoOutput, psoInput, psoMask, DestColorTranslation, - &CombinedRect, &Pt, pptlMask, pbo, &AdjustedBrushOrigin, R4_MASK); + Ret = BltMask(psoOutput, NULL, psoInput, DestColorTranslation, + &CombinedRect, NULL, &Pt, pbo, &AdjustedBrushOrigin, R4_MASK); } } break; @@ -908,17 +914,17 @@ Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; if (psoMask->iBitmapFormat == BMF_8BPP) { - Ret = AlphaBltMask(psoOutput, psoInput, psoMask, + Ret = AlphaBltMask(psoOutput, NULL, psoInput, DestColorTranslation, SourceColorTranslation, - &CombinedRect, &Pt, pptlMask, pbo, + &CombinedRect, NULL, &Pt, pbo, &AdjustedBrushOrigin) && Ret; } else { - Ret = BltMask(psoOutput, psoInput, psoMask, - DestColorTranslation, &CombinedRect, &Pt, - pptlMask, pbo, &AdjustedBrushOrigin, + Ret = BltMask(psoOutput, NULL, psoInput, + DestColorTranslation, &CombinedRect, NULL, + &Pt, pbo, &AdjustedBrushOrigin, R4_MASK) && Ret; } }