From 8ab65c222e39e4c5cb6ce8ae943c982f93910487 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 8 Feb 2012 11:00:51 -0600 Subject: [PATCH] user32: Draw the mask with SRCCOPY in DrawIcon when the image isn't being drawn. --- dlls/user32/cursoricon.c | 3 ++- dlls/user32/tests/cursoricon.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c index 3a23a4765c..6002bbb10e 100644 --- a/dlls/user32/cursoricon.c +++ b/dlls/user32/cursoricon.c @@ -2317,9 +2317,10 @@ BOOL WINAPI DrawIconEx( HDC hdc, INT x0, INT y0, HICON hIcon, if (flags & DI_MASK) { + DWORD rop = (flags & DI_IMAGE) ? SRCAND : SRCCOPY; SelectObject( hMemDC, frame->mask ); StretchBlt( hdc_dest, x, y, cxWidth, cyWidth, - hMemDC, 0, 0, frame->width, frame->height, SRCAND ); + hMemDC, 0, 0, frame->width, frame->height, rop ); } if (flags & DI_IMAGE) diff --git a/dlls/user32/tests/cursoricon.c b/dlls/user32/tests/cursoricon.c index 4a570aedd4..61937e8d0f 100644 --- a/dlls/user32/tests/cursoricon.c +++ b/dlls/user32/tests/cursoricon.c @@ -1926,8 +1926,8 @@ static void test_DrawIconEx(void) check_DrawIconEx(hdcDst, FALSE, 0x00A0B0C0, 32, 0, 0x00102030, 0x00102030, 0x00102030, __LINE__); check_DrawIconEx(hdcDst, TRUE, 0x00A0B0C0, 32, 0, 0x00102030, 0x00102030, 0x00102030, __LINE__); - check_DrawIconEx(hdcDst, FALSE, 0x80A0B0C0, 32, DI_MASK, 0x00FFFFFF, 0x00000000, 0x00000000, __LINE__); - check_DrawIconEx(hdcDst, TRUE, 0x80A0B0C0, 32, DI_MASK, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, __LINE__); + check_DrawIconEx(hdcDst, FALSE, 0x80A0B0C0, 32, DI_MASK, 0x00123456, 0x00000000, 0x00000000, __LINE__); + check_DrawIconEx(hdcDst, TRUE, 0x80A0B0C0, 32, DI_MASK, 0x00123456, 0x00FFFFFF, 0x00FFFFFF, __LINE__); check_DrawIconEx(hdcDst, FALSE, 0x00A0B0C0, 32, DI_IMAGE, 0x00FFFFFF, 0x00C0B0A0, 0x00C0B0A0, __LINE__); check_DrawIconEx(hdcDst, TRUE, 0x00A0B0C0, 32, DI_IMAGE, 0x00FFFFFF, 0x00C0B0A0, 0x00C0B0A0, __LINE__); -- 2.32.0.93.g670b81a890