Signed-off-by: Huw Davies huw@codeweavers.com --- dlls/comctl32/imagelist.c | 9 +++++---- dlls/comctl32/tests/imagelist.c | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index 157344c633..49151145cf 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -2018,10 +2018,10 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow,
if (uType == IMAGE_BITMAP) { DIBSECTION dib; - UINT color; + UINT flags;
- if (GetObjectW (handle, sizeof(dib), &dib) == sizeof(BITMAP)) color = ILC_COLOR; - else color = dib.dsBm.bmBitsPixel; + if (GetObjectW (handle, sizeof(dib), &dib) == sizeof(BITMAP)) flags = ILC_COLOR; + else flags = dib.dsBm.bmBitsPixel;
/* To match windows behavior, if cx is set to zero and the flag DI_DEFAULTSIZE is specified, cx becomes the @@ -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) flags |= ILC_MASK; + himl = ImageList_Create (cx, dib.dsBm.bmHeight, flags, nImageCount, cGrow); if (!himl) { DeleteObject (handle); return NULL; diff --git a/dlls/comctl32/tests/imagelist.c b/dlls/comctl32/tests/imagelist.c index 20be1ea02f..a489176e01 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);
On Mon, Nov 20, 2017 at 01:16:02PM +0000, Huw Davies wrote:
Signed-off-by: Huw Davies huw@codeweavers.com
dlls/comctl32/imagelist.c | 9 +++++---- dlls/comctl32/tests/imagelist.c | 24 ++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/imagelist.c b/dlls/comctl32/imagelist.c index 157344c633..49151145cf 100644 --- a/dlls/comctl32/imagelist.c +++ b/dlls/comctl32/imagelist.c @@ -2018,10 +2018,10 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow,
if (uType == IMAGE_BITMAP) { DIBSECTION dib;
UINT color;
UINT flags;
if (GetObjectW (handle, sizeof(dib), &dib) == sizeof(BITMAP)) color = ILC_COLOR;
else color = dib.dsBm.bmBitsPixel;
if (GetObjectW (handle, sizeof(dib), &dib) == sizeof(BITMAP)) flags = ILC_COLOR;
else flags = dib.dsBm.bmBitsPixel;
Actually I've just realised that there's a top-level parameter called 'uFlags', which makes this change confusing. I'll send another version where I stick with using 'color'.
Huw.