From 16a52a9e08f037897ad431370966ee2e5bc279a2 Mon Sep 17 00:00:00 2001 From: Kamil Hornicek Date: Thu, 22 May 2014 09:33:29 +0000 Subject: [PATCH] [WIN32K] - make DIB_XXBPP_StretchBlt work with top down bitmaps - fixes missing icons in the taskbar in explorer new (32bpp) svn path=/trunk/; revision=63404 --- reactos/win32ss/gdi/dib/stretchblt.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reactos/win32ss/gdi/dib/stretchblt.c b/reactos/win32ss/gdi/dib/stretchblt.c index f8272aadb58..55f80575942 100644 --- a/reactos/win32ss/gdi/dib/stretchblt.c +++ b/reactos/win32ss/gdi/dib/stretchblt.c @@ -29,6 +29,8 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma LONG DstWidth; LONG SrcHeight; LONG SrcWidth; + LONG MaskCy; + LONG SourceCy; ULONG Color; ULONG Dest, Source = 0, Pattern = 0; @@ -56,6 +58,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma if (UsesSource) { + SourceCy = abs(SourceSurf->sizlBitmap.cy); fnSource_GetPixel = DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].DIB_GetPixel; DPRINT("Source BPP: %u, srcRect: (%d,%d)-(%d,%d)\n", BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom); @@ -64,6 +67,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma if (MaskSurf) { fnMask_GetPixel = DibFunctionsForBitmapFormat[MaskSurf->iBitmapFormat].DIB_GetPixel; + MaskCy = abs(MaskSurf->sizlBitmap.cy); } DstHeight = DestRect->bottom - DestRect->top; @@ -124,7 +128,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma { sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth; if (sx < 0 || sy < 0 || - MaskSurf->sizlBitmap.cx < sx || MaskSurf->sizlBitmap.cy < sy || + MaskSurf->sizlBitmap.cx < sx || MaskCy < sy || fnMask_GetPixel(MaskSurf, sx, sy) != 0) { CanDraw = FALSE; @@ -135,7 +139,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma { sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth; if (sx >= 0 && sy >= 0 && - SourceSurf->sizlBitmap.cx > sx && SourceSurf->sizlBitmap.cy > sy) + SourceSurf->sizlBitmap.cx > sx && SourceCy > sy) { Source = XLATEOBJ_iXlate(ColorTranslation, fnSource_GetPixel(SourceSurf, sx, sy)); } -- 2.17.1