From 92e999f34bff4a27112d22a6d48176daa20ad5f1 Mon Sep 17 00:00:00 2001 From: Huw Davies Date: Mon, 20 Nov 2017 13:26:16 +0000 Subject: [PATCH] comctl32: Don't create a masked imagelist if CLR_NONE is specified. Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- 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 157344c633d..70457c78f53 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 20be1ea02f2..a489176e012 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); -- 2.11.4.GIT