Alexandre Julliard : user32: Use the correct rop when blitting an icon in DrawIconEx.

Alexandre Julliard julliard at winehq.org
Fri May 7 09:41:13 CDT 2010


Module: wine
Branch: master
Commit: 4c03fd013812dcc499b83e8b34c074f36acf801b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4c03fd013812dcc499b83e8b34c074f36acf801b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May  7 12:41:40 2010 +0200

user32: Use the correct rop when blitting an icon in DrawIconEx.

---

 dlls/user32/cursoricon.c       |    8 ++++----
 dlls/user32/tests/cursoricon.c |    9 +++------
 2 files changed, 7 insertions(+), 10 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index f4bdcdb..bafe4a7 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -2275,8 +2275,7 @@ BOOL WINAPI DrawIconEx( HDC hdc, INT x0, INT y0, HICON hIcon,
         oldFg = SetTextColor( hdc, RGB(0,0,0) );
         oldBg = SetBkColor( hdc, RGB(255,255,255) );
 
-        if (((flags & DI_MASK) && !(flags & DI_IMAGE)) ||
-            ((flags & DI_MASK) && !has_alpha))
+        if ((flags & DI_MASK) && !has_alpha)
         {
             hAndBits = CreateBitmap ( ptr->nWidth, ptr->nHeight, 1, 1, ptr + 1 );
             if (hAndBits)
@@ -2341,13 +2340,14 @@ BOOL WINAPI DrawIconEx( HDC hdc, INT x0, INT y0, HICON hIcon,
                 }
                 else
                 {
+                    DWORD rop = (flags & DI_MASK) ? SRCINVERT : SRCCOPY;
                     hBitTemp = SelectObject( hMemDC, hXorBits );
                     if (DoOffscreen)
                         StretchBlt (hDC_off, 0, 0, cxWidth, cyWidth,
-                                    hMemDC, 0, 0, ptr->nWidth, ptr->nHeight, SRCPAINT);
+                                    hMemDC, 0, 0, ptr->nWidth, ptr->nHeight, rop);
                     else
                         StretchBlt (hdc, x0, y0, cxWidth, cyWidth,
-                                    hMemDC, 0, 0, ptr->nWidth, ptr->nHeight, SRCPAINT);
+                                    hMemDC, 0, 0, ptr->nWidth, ptr->nHeight, rop);
                     SelectObject( hMemDC, hBitTemp );
                 }
 
diff --git a/dlls/user32/tests/cursoricon.c b/dlls/user32/tests/cursoricon.c
index 2a4100e..21e0dca 100644
--- a/dlls/user32/tests/cursoricon.c
+++ b/dlls/user32/tests/cursoricon.c
@@ -1190,15 +1190,12 @@ static void test_DrawIconEx(void)
     check_DrawIconEx(hdcDst, FALSE, 0x80A0B0C0, 32, DI_MASK, 0x00FFFFFF, 0x00000000, 0x00000000, __LINE__);
     check_DrawIconEx(hdcDst, TRUE, 0x80A0B0C0, 32, DI_MASK, 0x00FFFFFF, 0x00FFFFFF, 0x00FFFFFF, __LINE__);
 
-    todo_wine
-    {
-        check_DrawIconEx(hdcDst, FALSE, 0x00A0B0C0, 32, DI_IMAGE, 0x00FFFFFF, 0x00C0B0A0, 0x00C0B0A0, __LINE__);
-        check_DrawIconEx(hdcDst, TRUE, 0x00A0B0C0, 32, DI_IMAGE, 0x00FFFFFF, 0x00C0B0A0, 0x00C0B0A0, __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__);
 
     /* Test normal drawing */
     check_DrawIconEx(hdcDst, FALSE, 0x00A0B0C0, 32, DI_NORMAL, 0x00FFFFFF, 0x00C0B0A0, 0x00C0B0A0, __LINE__);
-    todo_wine check_DrawIconEx(hdcDst, TRUE, 0x00A0B0C0, 32, DI_NORMAL, 0x00FFFFFF, 0x003F4F5F, 0x003F4F5F, __LINE__);
+    check_DrawIconEx(hdcDst, TRUE, 0x00A0B0C0, 32, DI_NORMAL, 0x00FFFFFF, 0x003F4F5F, 0x003F4F5F, __LINE__);
     check_DrawIconEx(hdcDst, FALSE, 0xFFA0B0C0, 32, DI_NORMAL, 0x00FFFFFF, 0x00C0B0A0, 0x00C0B0A0, __LINE__);
 
     /* Test alpha blending */




More information about the wine-cvs mailing list