It seems that the imagelist control on XP has some strange device
dependence even though the tests use device independent bitmaps.

Attached is a patch to try and correct the test for what is broken. Is
this the right approach?
From 71f2b1989e083117188eb23aa1c81bcb887b89df Mon Sep 17 00:00:00 2001
From: Austin Lund <[email protected]>
Date: Wed, 13 Oct 2010 15:34:01 +1000
Subject: [PATCH] comctl32/tests: ImageList control is broken differently for different device color depths.
Reply-To: wine-devel <[email protected]>

---
 dlls/comctl32/tests/imagelist.c |   44 +++++++++++++++++++++++++++++++++-----
 1 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/dlls/comctl32/tests/imagelist.c b/dlls/comctl32/tests/imagelist.c
index c5ea95f..2638abd 100644
--- a/dlls/comctl32/tests/imagelist.c
+++ b/dlls/comctl32/tests/imagelist.c
@@ -1209,6 +1209,7 @@ static void test_ImageList_DrawIndirect(void)
     int iImage = -1, iAlphaImage = -1, iTransparentImage = -1;
     UINT32 *bits = 0;
     UINT32 maskBits = 0x00000000, inverseMaskBits = 0xFFFFFFFF;
+    int bpp, broken_value;
 
     BITMAPINFO bitmapInfo = {{sizeof(BITMAPINFOHEADER), 2, 1, 1, 32, BI_RGB,
                                 0, 0, 0, 0, 0}};
@@ -1217,6 +1218,7 @@ static void test_ImageList_DrawIndirect(void)
     ok(hdcDst != 0, "CreateCompatibleDC(0) failed to return a valid DC\n");
     if (!hdcDst)
         return;
+    bpp = GetDeviceCaps(hdcDst, BITSPIXEL);
 
     hbmMask = CreateBitmap(2, 1, 1, 1, &maskBits);
     ok(hbmMask != 0, "CreateBitmap failed\n");
@@ -1264,20 +1266,50 @@ static void test_ImageList_DrawIndirect(void)
 
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iImage, ILD_NORMAL, 0x00ABCDEF, __LINE__);
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iImage, ILD_TRANSPARENT, 0x00ABCDEF, __LINE__);
-    todo_wine check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND25, ILS_NORMAL, 0, 0x00E8F1FA, 0x00D4D9DD, __LINE__);
-    todo_wine check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND50, ILS_NORMAL, 0, 0x00E8F1FA, 0x00B4BDC4, __LINE__);
+    switch(bpp) {
+        case 16:
+        case 24:
+            broken_value = 0x00D4D9DD; break;
+        case 32:
+        default:
+            broken_value = 0x00D4D9DD; break;
+    }
+    todo_wine check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND25, ILS_NORMAL, 0, 0x00E8F1FA, broken_value, __LINE__);
+    switch(bpp) {
+        case 16:
+        case 24:
+            broken_value = 0x00D4D9DD; break;
+        case 32:
+        default:
+            broken_value = 0x00B4BDC4; break;
+    }
+    todo_wine check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND50, ILS_NORMAL, 0, 0x00E8F1FA, broken_value, __LINE__);
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iImage, ILD_MASK, 0x00ABCDEF, __LINE__);
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iImage, ILD_IMAGE, 0x00ABCDEF, __LINE__);
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iImage, ILD_PRESERVEALPHA, 0x00ABCDEF, __LINE__);
 
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iAlphaImage, ILD_NORMAL, 0x00D3E5F7, __LINE__);
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iAlphaImage, ILD_TRANSPARENT, 0x00D3E5F7, __LINE__);
-    todo_wine
-    {
-        check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND25, ILS_NORMAL, 0, 0x00E8F1FA, 0x009DA8B1, __LINE__);
-        check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND50, ILS_NORMAL, 0, 0x00E8F1FA, 0x008C99A3, __LINE__);
 
+    switch(bpp) {
+        case 16:
+        case 24:
+            broken_value = 0x00D4D9DD; break;
+        case 32:
+        default:
+            broken_value = 0x009DA8B1; break;
+    }
+    todo_wine check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND25, ILS_NORMAL, 0, 0x00E8F1FA, broken_value, __LINE__);
+    switch(bpp) {
+        case 16:
+        case 24:
+            broken_value = 0x00D4D9DD; break;
+        case 32:
+        default:
+            broken_value = 0x008C99A3; break;
     }
+    todo_wine check_ImageList_DrawIndirect_broken(hdcDst, himl, bits, iAlphaImage, ILD_BLEND50, ILS_NORMAL, 0, 0x00E8F1FA, broken_value, __LINE__);
+
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iAlphaImage, ILD_MASK, 0x00D3E5F7, __LINE__);
     check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iAlphaImage, ILD_IMAGE, 0x00D3E5F7, __LINE__);
     todo_wine check_ImageList_DrawIndirect_fStyle(hdcDst, himl, bits, iAlphaImage, ILD_PRESERVEALPHA, 0x005D6F81, __LINE__);
-- 
1.7.1



Reply via email to