Module: wine Branch: master Commit: 474f9ff1fa2ebf4ae6c4ef3b0d4987062b30d838 URL: http://source.winehq.org/git/wine.git/?a=commit;h=474f9ff1fa2ebf4ae6c4ef3b0d...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Jul 12 11:43:50 2017 +0200
gdi32: Avoid having the source alpha channel interfere with color comparisons in GdiTransparentBlt.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdi32/bitblt.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c index 3d8c128..1b057f7 100644 --- a/dlls/gdi32/bitblt.c +++ b/dlls/gdi32/bitblt.c @@ -857,7 +857,19 @@ BOOL WINAPI GdiTransparentBlt( HDC hdcDest, int xDest, int yDest, int widthDest, if(oldStretchMode == BLACKONWHITE || oldStretchMode == WHITEONBLACK) SetStretchBltMode(hdcSrc, COLORONCOLOR); hdcWork = CreateCompatibleDC(hdcDest); - bmpWork = CreateCompatibleBitmap(hdcDest, widthDest, heightDest); + if (GetObjectType( hdcDest ) != OBJ_MEMDC && GetDeviceCaps( hdcDest, BITSPIXEL ) == 32) + { + /* screen DCs are not supposed to have an alpha channel, so use a 24-bpp bitmap as copy */ + BITMAPINFO info; + info.bmiHeader.biSize = sizeof(info.bmiHeader); + info.bmiHeader.biWidth = widthDest; + info.bmiHeader.biHeight = heightDest; + info.bmiHeader.biPlanes = 1; + info.bmiHeader.biBitCount = 24; + info.bmiHeader.biCompression = BI_RGB; + bmpWork = CreateDIBSection( 0, &info, DIB_RGB_COLORS, NULL, NULL, 0 ); + } + else bmpWork = CreateCompatibleBitmap(hdcDest, widthDest, heightDest); oldWork = SelectObject(hdcWork, bmpWork); if(!StretchBlt(hdcWork, 0, 0, widthDest, heightDest, hdcSrc, xSrc, ySrc, widthSrc, heightSrc, SRCCOPY)) { TRACE("Failed to stretch\n");