Huw Davies : comctl32: Don' t create a masked imagelist if CLR_NONE is specified.

Alexandre Julliard julliard at winehq.org
Mon Nov 20 16:01:35 CST 2017


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

Author: Huw Davies <huw at codeweavers.com>
Date:   Mon Nov 20 13:26:16 2017 +0000

comctl32: Don't create a masked imagelist if CLR_NONE is specified.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comctl32/imagelist.c       |  3 ++-
 dlls/comctl32/tests/imagelist.c | 24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c
index 157344c..70457c7 100644
--- a/dlls/comctl32/imagelist.c
+++ b/dlls/comctl32/imagelist.c
@@ -2037,7 +2037,8 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow,
 
         nImageCount = dib.dsBm.bmWidth / cx;
 
-        himl = ImageList_Create (cx, dib.dsBm.bmHeight, ILC_MASK | color, nImageCount, cGrow);
+        if (clrMask != CLR_NONE) color |= ILC_MASK;
+        himl = ImageList_Create (cx, dib.dsBm.bmHeight, color, nImageCount, cGrow);
         if (!himl) {
             DeleteObject (handle);
             return NULL;
diff --git a/dlls/comctl32/tests/imagelist.c b/dlls/comctl32/tests/imagelist.c
index 20be1ea..a489176 100644
--- a/dlls/comctl32/tests/imagelist.c
+++ b/dlls/comctl32/tests/imagelist.c
@@ -39,6 +39,7 @@
 
 #include "wine/test.h"
 #include "v6util.h"
+#include "resources.h"
 
 #define IMAGELIST_MAGIC (('L' << 8) | 'I')
 
@@ -67,6 +68,7 @@ static HRESULT (WINAPI *pImageList_CoCreateInstance)(REFCLSID,const IUnknown *,
     REFIID,void **);
 static HRESULT (WINAPI *pHIMAGELIST_QueryInterface)(HIMAGELIST,REFIID,void **);
 static int (WINAPI *pImageList_SetColorTable)(HIMAGELIST,int,int,RGBQUAD*);
+static DWORD (WINAPI *pImageList_GetFlags)(HIMAGELIST);
 
 static HINSTANCE hinst;
 
@@ -2237,6 +2239,26 @@ static void test_copy(void)
     ImageList_Destroy(src);
 }
 
+static void test_loadimage(void)
+{
+    HIMAGELIST list;
+    DWORD flags;
+
+    list = ImageList_LoadImageW( hinst, MAKEINTRESOURCEW(IDB_BITMAP_128x15), 16, 1, CLR_DEFAULT,
+                                 IMAGE_BITMAP, LR_CREATEDIBSECTION );
+    ok( list != NULL, "got %p\n", list );
+    flags = pImageList_GetFlags( list );
+    ok( flags == (ILC_COLOR4 | ILC_MASK), "got %08x\n", flags );
+    ImageList_Destroy( list );
+
+    list = ImageList_LoadImageW( hinst, MAKEINTRESOURCEW(IDB_BITMAP_128x15), 16, 1, CLR_NONE,
+                                 IMAGE_BITMAP, LR_CREATEDIBSECTION );
+    ok( list != NULL, "got %p\n", list );
+    flags = pImageList_GetFlags( list );
+    ok( flags == ILC_COLOR4, "got %08x\n", flags );
+    ImageList_Destroy( list );
+}
+
 static void test_IImageList_Clone(void)
 {
     IImageList *imgl, *imgl2;
@@ -2370,6 +2392,7 @@ START_TEST(imagelist)
     pImageList_DrawIndirect = (void*)GetProcAddress(hComCtl32, "ImageList_DrawIndirect");
     pImageList_SetImageCount = (void*)GetProcAddress(hComCtl32, "ImageList_SetImageCount");
     pImageList_SetColorTable = (void*)GetProcAddress(hComCtl32, (const char*)390);
+    pImageList_GetFlags = (void*)GetProcAddress(hComCtl32, "ImageList_GetFlags");
 
     hinst = GetModuleHandleA(NULL);
 
@@ -2388,6 +2411,7 @@ START_TEST(imagelist)
     test_color_table(ILC_COLOR4);
     test_color_table(ILC_COLOR8);
     test_copy();
+    test_loadimage();
 
     FreeLibrary(hComCtl32);
 




More information about the wine-cvs mailing list