From 4ac05afd39aff3030e3379ee06e32d6544ef5d62 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Gabriel=20Iv=C4=83ncescu?= Date: Tue, 5 Jan 2021 19:53:18 +0200 Subject: [PATCH] comctl32: Remove the masked background when 32bpp bitmaps have no alpha values. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixes a regression introduced by 61b9209221d28d5d02379791ac1316c1fc2ca3b7. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=50454 Signed-off-by: Gabriel Ivăncescu Signed-off-by: Alexandre Julliard --- dlls/comctl32/imagelist.c | 7 +++++++ dlls/comctl32/tests/imagelist.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index a6d9c73c49b..307ccc0336c 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -234,6 +234,13 @@ static void add_dib_bits( HIMAGELIST himl, int pos, int count, int width, int he mask_bits[i * mask_stride + j / 8] |= 0x80 >> (j % 8); } } + else if (mask_info) /* mask out the background */ + { + for (i = 0; i < height; i++) + for (j = n * width; j < (n + 1) * width; j++) + if ((mask_bits[i * mask_stride + j / 8] << (j % 8)) & 0x80) + bits[i * stride + j] = 0; + } StretchDIBits( himl->hdcImage, pt.x, pt.y, himl->cx, himl->cy, n * width, 0, width, height, bits, info, DIB_RGB_COLORS, SRCCOPY ); if (mask_info) diff --git a/dlls/comctl32/tests/imagelist.c b/dlls/comctl32/tests/imagelist.c index c74acb2a215..ed9b1cc97f2 100644 --- a/dlls/comctl32/tests/imagelist.c +++ b/dlls/comctl32/tests/imagelist.c @@ -2436,7 +2436,7 @@ static void test_alpha(void) /* If all alpha values are zero, the image is considered to have no alpha and gets masked */ if (!GetAValue(bits[0]) && !GetAValue(bits[1])) - todo_wine ok(!bits[0] && bits[1] == test_bitmaps[i + 1], + ok(!bits[0] && bits[1] == test_bitmaps[i + 1], "Bitmap [%08X, %08X] returned [%08X, %08X], expected [%08X, %08X]\n", test_bitmaps[i], test_bitmaps[i + 1], bits[0], bits[1], 0, test_bitmaps[i + 1]); else -- 2.11.4.GIT