- make DIB_XXBPP_StretchBlt work with top down bitmaps
- fixes missing icons in the taskbar in explorer new (32bpp)

svn path=/trunk/; revision=63404
This commit is contained in:
Kamil Hornicek 2014-05-22 09:33:29 +00:00
parent a5b59586d3
commit 16a52a9e08

View file

@ -29,6 +29,8 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
LONG DstWidth; LONG DstWidth;
LONG SrcHeight; LONG SrcHeight;
LONG SrcWidth; LONG SrcWidth;
LONG MaskCy;
LONG SourceCy;
ULONG Color; ULONG Color;
ULONG Dest, Source = 0, Pattern = 0; ULONG Dest, Source = 0, Pattern = 0;
@ -56,6 +58,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
if (UsesSource) if (UsesSource)
{ {
SourceCy = abs(SourceSurf->sizlBitmap.cy);
fnSource_GetPixel = DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].DIB_GetPixel; fnSource_GetPixel = DibFunctionsForBitmapFormat[SourceSurf->iBitmapFormat].DIB_GetPixel;
DPRINT("Source BPP: %u, srcRect: (%d,%d)-(%d,%d)\n", DPRINT("Source BPP: %u, srcRect: (%d,%d)-(%d,%d)\n",
BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom); 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) if (MaskSurf)
{ {
fnMask_GetPixel = DibFunctionsForBitmapFormat[MaskSurf->iBitmapFormat].DIB_GetPixel; fnMask_GetPixel = DibFunctionsForBitmapFormat[MaskSurf->iBitmapFormat].DIB_GetPixel;
MaskCy = abs(MaskSurf->sizlBitmap.cy);
} }
DstHeight = DestRect->bottom - DestRect->top; 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; sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth;
if (sx < 0 || sy < 0 || 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) fnMask_GetPixel(MaskSurf, sx, sy) != 0)
{ {
CanDraw = FALSE; CanDraw = FALSE;
@ -135,7 +139,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma
{ {
sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth; sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth;
if (sx >= 0 && sy >= 0 && 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)); Source = XLATEOBJ_iXlate(ColorTranslation, fnSource_GetPixel(SourceSurf, sx, sy));
} }