Commit 3eea7ff3 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/tests: Make sure v6 module is used when running tests, run more tests with v6 module.

parent b26579eb
......@@ -61,6 +61,7 @@ typedef struct _ILHEAD
#include "poppack.h"
static HIMAGELIST (WINAPI *pImageList_Create)(int, int, UINT, int, int);
static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST);
static int (WINAPI *pImageList_Add)(HIMAGELIST, HBITMAP, HBITMAP);
static BOOL (WINAPI *pImageList_DrawIndirect)(IMAGELISTDRAWPARAMS*);
static BOOL (WINAPI *pImageList_SetImageCount)(HIMAGELIST,UINT);
......@@ -69,6 +70,21 @@ static HRESULT (WINAPI *pImageList_CoCreateInstance)(REFCLSID,const IUnknown *,
static HRESULT (WINAPI *pHIMAGELIST_QueryInterface)(HIMAGELIST,REFIID,void **);
static int (WINAPI *pImageList_SetColorTable)(HIMAGELIST,int,int,RGBQUAD*);
static DWORD (WINAPI *pImageList_GetFlags)(HIMAGELIST);
static BOOL (WINAPI *pImageList_BeginDrag)(HIMAGELIST, int, int, int);
static HIMAGELIST (WINAPI *pImageList_GetDragImage)(POINT *, POINT *);
static void (WINAPI *pImageList_EndDrag)(void);
static INT (WINAPI *pImageList_GetImageCount)(HIMAGELIST);
static BOOL (WINAPI *pImageList_SetDragCursorImage)(HIMAGELIST, int, int, int);
static BOOL (WINAPI *pImageList_GetIconSize)(HIMAGELIST, int *, int *);
static BOOL (WINAPI *pImageList_Remove)(HIMAGELIST, int);
static INT (WINAPI *pImageList_ReplaceIcon)(HIMAGELIST, int, HICON);
static BOOL (WINAPI *pImageList_Replace)(HIMAGELIST, int, HBITMAP, HBITMAP);
static HIMAGELIST (WINAPI *pImageList_Merge)(HIMAGELIST, int, HIMAGELIST, int, int, int);
static BOOL (WINAPI *pImageList_GetImageInfo)(HIMAGELIST, int, IMAGEINFO *);
static BOOL (WINAPI *pImageList_Write)(HIMAGELIST, IStream *);
static HIMAGELIST (WINAPI *pImageList_Read)(IStream *);
static BOOL (WINAPI *pImageList_Copy)(HIMAGELIST, int, HIMAGELIST, int, UINT);
static HIMAGELIST (WINAPI *pImageList_LoadImageW)(HINSTANCE, LPCWSTR, int, int, COLORREF, UINT, UINT);
static HINSTANCE hinst;
......@@ -125,14 +141,16 @@ static const BYTE bitmap_bits[48*48/8] =
static HIMAGELIST createImageList(int cx, int cy)
{
/* Create an ImageList and put an image into it */
HIMAGELIST himl = ImageList_Create(cx, cy, ILC_COLOR, 1, 1);
HIMAGELIST himl = pImageList_Create(cx, cy, ILC_COLOR, 1, 1);
HBITMAP hbm = CreateBitmap(48, 48, 1, 1, bitmap_bits);
ImageList_Add(himl, hbm, NULL);
ok(himl != NULL, "Failed to create image list, %d x %d.\n", cx, cy);
pImageList_Add(himl, hbm, NULL);
DeleteObject(hbm);
return himl;
}
static HWND create_a_window(void)
static HWND create_window(void)
{
char className[] = "bmwnd";
char winName[] = "Test Bitmap";
......@@ -259,41 +277,41 @@ static void test_begindrag(void)
int count;
POINT hotspot;
count = ImageList_GetImageCount(himl);
count = pImageList_GetImageCount(himl);
ok(count > 2, "Tests need an ImageList with more than 2 images\n");
/* Two BeginDrag() without EndDrag() in between */
ret = ImageList_BeginDrag(himl, 1, 0, 0);
drag = ImageList_GetDragImage(NULL, NULL);
ret = pImageList_BeginDrag(himl, 1, 0, 0);
drag = pImageList_GetDragImage(NULL, NULL);
ok(ret && drag, "ImageList_BeginDrag() failed\n");
ret = ImageList_BeginDrag(himl, 0, 3, 5);
ret = pImageList_BeginDrag(himl, 0, 3, 5);
ok(!ret, "ImageList_BeginDrag() returned TRUE\n");
drag = ImageList_GetDragImage(NULL, &hotspot);
drag = pImageList_GetDragImage(NULL, &hotspot);
ok(!!drag, "No active ImageList drag left\n");
ok(hotspot.x == 0 && hotspot.y == 0, "New ImageList drag was created\n");
ImageList_EndDrag();
drag = ImageList_GetDragImage(NULL, NULL);
pImageList_EndDrag();
drag = pImageList_GetDragImage(NULL, NULL);
ok(!drag, "ImageList drag was not destroyed\n");
/* Invalid image index */
ImageList_BeginDrag(himl, 0, 0, 0);
ret = ImageList_BeginDrag(himl, count, 3, 5);
pImageList_BeginDrag(himl, 0, 0, 0);
ret = pImageList_BeginDrag(himl, count, 3, 5);
ok(!ret, "ImageList_BeginDrag() returned TRUE\n");
drag = ImageList_GetDragImage(NULL, &hotspot);
drag = pImageList_GetDragImage(NULL, &hotspot);
ok(drag && hotspot.x == 0 && hotspot.y == 0, "Active drag should not have been canceled\n");
ImageList_EndDrag();
drag = ImageList_GetDragImage(NULL, NULL);
pImageList_EndDrag();
drag = pImageList_GetDragImage(NULL, NULL);
ok(!drag, "ImageList drag was not destroyed\n");
/* Invalid negative image indexes succeed */
ret = ImageList_BeginDrag(himl, -17, 0, 0);
drag = ImageList_GetDragImage(NULL, NULL);
ret = pImageList_BeginDrag(himl, -17, 0, 0);
drag = pImageList_GetDragImage(NULL, NULL);
ok(ret && drag, "ImageList drag was created\n");
ImageList_EndDrag();
ret = ImageList_BeginDrag(himl, -1, 0, 0);
drag = ImageList_GetDragImage(NULL, NULL);
pImageList_EndDrag();
ret = pImageList_BeginDrag(himl, -1, 0, 0);
drag = pImageList_GetDragImage(NULL, NULL);
ok(ret && drag, "ImageList drag was created\n");
ImageList_EndDrag();
ImageList_Destroy(himl);
pImageList_EndDrag();
pImageList_Destroy(himl);
}
static void test_hotspot(void)
......@@ -317,7 +335,7 @@ static void test_hotspot(void)
int i, j, ret;
HIMAGELIST himl1 = createImageList(SIZEX1, SIZEY1);
HIMAGELIST himl2 = createImageList(SIZEX2, SIZEY2);
HWND hwnd = create_a_window();
HWND hwnd = create_window();
for (i = 0; i < HOTSPOTS_MAX; i++) {
......@@ -331,25 +349,25 @@ static void test_hotspot(void)
HIMAGELIST himlNew;
POINT ppt;
ret = ImageList_BeginDrag(himl1, 0, dx1, dy1);
ret = pImageList_BeginDrag(himl1, 0, dx1, dy1);
ok(ret != 0, "BeginDrag failed for { %d, %d }\n", dx1, dy1);
sprintf(loc, "BeginDrag (%d,%d)\n", i, j);
show_image(hwnd, himl1, 0, max(SIZEX1, SIZEY1), loc, TRUE);
/* check merging the dragged image with a second image */
ret = ImageList_SetDragCursorImage(himl2, 0, dx2, dy2);
ret = pImageList_SetDragCursorImage(himl2, 0, dx2, dy2);
ok(ret != 0, "SetDragCursorImage failed for {%d, %d}{%d, %d}\n",
dx1, dy1, dx2, dy2);
sprintf(loc, "SetDragCursorImage (%d,%d)\n", i, j);
show_image(hwnd, himl2, 0, max(SIZEX2, SIZEY2), loc, TRUE);
/* check new hotspot, it should be the same like the old one */
himlNew = ImageList_GetDragImage(NULL, &ppt);
himlNew = pImageList_GetDragImage(NULL, &ppt);
ok(ppt.x == dx1 && ppt.y == dy1,
"Expected drag hotspot [%d,%d] got [%d,%d]\n",
dx1, dy1, ppt.x, ppt.y);
/* check size of new dragged image */
ImageList_GetIconSize(himlNew, &newx, &newy);
pImageList_GetIconSize(himlNew, &newx, &newy);
correctx = max(SIZEX1, max(SIZEX2 + dx2, SIZEX1 - dx2));
correcty = max(SIZEY1, max(SIZEY2 + dy2, SIZEY1 - dy2));
ok(newx == correctx && newy == correcty,
......@@ -357,7 +375,7 @@ static void test_hotspot(void)
correctx, correcty, newx, newy);
sprintf(loc, "GetDragImage (%d,%d)\n", i, j);
show_image(hwnd, himlNew, 0, max(correctx, correcty), loc, TRUE);
ImageList_EndDrag();
pImageList_EndDrag();
}
}
#undef SIZEX1
......@@ -365,8 +383,8 @@ static void test_hotspot(void)
#undef SIZEX2
#undef SIZEY2
#undef HOTSPOTS_MAX
ImageList_Destroy(himl2);
ImageList_Destroy(himl1);
pImageList_Destroy(himl2);
pImageList_Destroy(himl1);
DestroyWindow(hwnd);
}
......@@ -379,7 +397,7 @@ static void test_add_remove(void)
HICON hicon3 ;
/* create an imagelist to play with */
himl = ImageList_Create(84, 84, ILC_COLOR16, 0, 3);
himl = pImageList_Create(84, 84, ILC_COLOR16, 0, 3);
ok(himl!=0,"failed to create imagelist\n");
/* load the icons to add to the image list */
......@@ -391,41 +409,41 @@ static void test_add_remove(void)
ok(hicon3 != 0, "no hicon3\n");
/* remove when nothing exists */
ok(!ImageList_Remove(himl,0),"removed nonexistent icon\n");
ok(!pImageList_Remove(himl, 0), "Removed nonexistent icon.\n");
/* removing everything from an empty imagelist should succeed */
ok(ImageList_RemoveAll(himl),"removed nonexistent icon\n");
ok(pImageList_Remove(himl, -1), "Removed nonexistent icon\n");
/* add three */
ok(0==ImageList_AddIcon(himl, hicon1),"failed to add icon1\n");
ok(1==ImageList_AddIcon(himl, hicon2),"failed to add icon2\n");
ok(2==ImageList_AddIcon(himl, hicon3),"failed to add icon3\n");
ok(0 == pImageList_ReplaceIcon(himl, -1, hicon1), "Failed to add icon1.\n");
ok(1 == pImageList_ReplaceIcon(himl, -1, hicon2), "Failed to add icon2.\n");
ok(2 == pImageList_ReplaceIcon(himl, -1, hicon3), "Failed to add icon3.\n");
/* remove an index out of range */
ok(!ImageList_Remove(himl,4711),"removed nonexistent icon\n");
ok(!pImageList_Remove(himl, 4711), "removed nonexistent icon\n");
/* remove three */
ok(ImageList_Remove(himl,0),"can't remove 0\n");
ok(ImageList_Remove(himl,0),"can't remove 0\n");
ok(ImageList_Remove(himl,0),"can't remove 0\n");
ok(pImageList_Remove(himl, 0), "Can't remove 0\n");
ok(pImageList_Remove(himl, 0), "Can't remove 0\n");
ok(pImageList_Remove(himl, 0), "Can't remove 0\n");
/* remove one extra */
ok(!ImageList_Remove(himl,0),"removed nonexistent icon\n");
ok(!pImageList_Remove(himl, 0), "Removed nonexistent icon.\n");
/* destroy it */
ok(ImageList_Destroy(himl),"destroy imagelist failed\n");
ok(pImageList_Destroy(himl), "Failed to destroy imagelist.\n");
ok(-1==ImageList_AddIcon((HIMAGELIST)0xdeadbeef, hicon1),"don't crash on bad handle\n");
ok(-1 == pImageList_ReplaceIcon((HIMAGELIST)0xdeadbeef, -1, hicon1), "Don't crash on bad handle\n");
ok(DestroyIcon(hicon1),"icon 1 wasn't deleted\n");
ok(DestroyIcon(hicon2),"icon 2 wasn't deleted\n");
ok(DestroyIcon(hicon3),"icon 3 wasn't deleted\n");
ok(DestroyIcon(hicon1), "Failed to destroy icon 1.\n");
ok(DestroyIcon(hicon2), "Failed to destroy icon 2.\n");
ok(DestroyIcon(hicon3), "Failed to destroy icon 3.\n");
}
static void test_imagecount(void)
{
HIMAGELIST himl;
ok(0==ImageList_GetImageCount((HIMAGELIST)0xdeadbeef),"don't crash on bad handle\n");
ok(0 == pImageList_GetImageCount((HIMAGELIST)0xdeadbeef), "don't crash on bad handle\n");
if (!pImageList_SetImageCount)
{
......@@ -433,17 +451,17 @@ static void test_imagecount(void)
return;
}
himl = ImageList_Create(84, 84, ILC_COLOR16, 0, 3);
ok(himl!=0,"failed to create imagelist\n");
himl = pImageList_Create(84, 84, ILC_COLOR16, 0, 3);
ok(himl != 0, "Failed to create imagelist.\n");
ok(pImageList_SetImageCount(himl, 3), "couldn't increase image count\n");
ok(ImageList_GetImageCount(himl) == 3, "invalid image count after increase\n");
ok(pImageList_GetImageCount(himl) == 3, "invalid image count after increase\n");
ok(pImageList_SetImageCount(himl, 1), "couldn't decrease image count\n");
ok(ImageList_GetImageCount(himl) == 1, "invalid image count after decrease to 1\n");
ok(pImageList_GetImageCount(himl) == 1, "invalid image count after decrease to 1\n");
ok(pImageList_SetImageCount(himl, 0), "couldn't decrease image count\n");
ok(ImageList_GetImageCount(himl) == 0, "invalid image count after decrease to 0\n");
ok(pImageList_GetImageCount(himl) == 0, "invalid image count after decrease to 0\n");
ok(ImageList_Destroy(himl), "destroy imagelist failed\n");
ok(pImageList_Destroy(himl), "Failed to destroy imagelist.\n");
}
static void test_DrawIndirect(void)
......@@ -464,13 +482,13 @@ static void test_DrawIndirect(void)
return;
}
hwndfortest = create_a_window();
hwndfortest = create_window();
hdc = GetDC(hwndfortest);
ok(hdc!=NULL, "couldn't get DC\n");
/* create an imagelist to play with */
himl = ImageList_Create(48, 48, ILC_COLOR16, 0, 3);
ok(himl!=0,"failed to create imagelist\n");
himl = pImageList_Create(48, 48, ILC_COLOR16, 0, 3);
ok(himl != 0, "Failed to create imagelist.\n");
/* load the icons to add to the image list */
hbm1 = CreateBitmap(48, 48, 1, 1, bitmap_bits);
......@@ -481,14 +499,14 @@ static void test_DrawIndirect(void)
ok(hbm3 != 0, "no bitmap 3\n");
/* add three */
ok(0==ImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n");
ok(1==ImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n");
ok(0 == ImageList_Add(himl, hbm1, 0),"failed to add bitmap 1\n");
ok(1 == ImageList_Add(himl, hbm2, 0),"failed to add bitmap 2\n");
if (pImageList_SetImageCount)
{
ok(pImageList_SetImageCount(himl,3),"Setimage count failed\n");
/*ok(2==ImageList_Add(himl, hbm3, NULL),"failed to add bitmap 3\n"); */
ok(ImageList_Replace(himl, 2, hbm3, 0),"failed to replace bitmap 3\n");
ok(pImageList_Replace(himl, 2, hbm3, 0),"failed to replace bitmap 3\n");
}
memset(&imldp, 0, sizeof (imldp));
......@@ -517,12 +535,12 @@ static void test_DrawIndirect(void)
ok(!pImageList_DrawIndirect(&imldp),"should fail\n");
/* remove three */
ok(ImageList_Remove(himl, 0), "removing 1st bitmap\n");
ok(ImageList_Remove(himl, 0), "removing 2nd bitmap\n");
ok(ImageList_Remove(himl, 0), "removing 3rd bitmap\n");
ok(pImageList_Remove(himl, 0), "removing 1st bitmap\n");
ok(pImageList_Remove(himl, 0), "removing 2nd bitmap\n");
ok(pImageList_Remove(himl, 0), "removing 3rd bitmap\n");
/* destroy it */
ok(ImageList_Destroy(himl),"destroy imagelist failed\n");
ok(pImageList_Destroy(himl), "Failed to destroy imagelist.\n");
/* bitmaps should not be deleted by the imagelist */
ok(DeleteObject(hbm1),"bitmap 1 can't be deleted\n");
......@@ -563,12 +581,12 @@ static void test_merge_colors(void)
for (i = 0; i < 8; i++)
{
himl[i] = ImageList_Create(32, 32, sizes[i], 0, 3);
himl[i] = pImageList_Create(32, 32, sizes[i], 0, 3);
ok(himl[i] != NULL, "failed to create himl[%d]\n", i);
ok(0 == ImageList_AddIcon(himl[i], hicon1), "add icon1 to himl[%d] failed\n", i);
ok(0 == pImageList_ReplaceIcon(himl[i], -1, hicon1), "Failed to add icon1 to himl[%d].\n", i);
if (i == 0 || i == 1 || i == 7)
{
ImageList_GetImageInfo(himl[i], 0, &info);
pImageList_GetImageInfo(himl[i], 0, &info);
sizes[i] = get_color_format(info.hbmImage);
}
}
......@@ -576,10 +594,10 @@ static void test_merge_colors(void)
for (i = 0; i < 8; i++)
for (j = 0; j < 8; j++)
{
hmerge = ImageList_Merge(himl[i], 0, himl[j], 0, 0, 0);
hmerge = pImageList_Merge(himl[i], 0, himl[j], 0, 0, 0);
ok(hmerge != NULL, "merge himl[%d], himl[%d] failed\n", i, j);
ImageList_GetImageInfo(hmerge, 0, &info);
pImageList_GetImageInfo(hmerge, 0, &info);
bpp = get_color_format(info.hbmImage);
/* ILC_COLOR[X] is defined as [X] */
if (i == 4 && j == 7)
......@@ -590,23 +608,23 @@ static void test_merge_colors(void)
"wrong biBitCount %d when merging lists %d (%d) and %d (%d)\n", bpp, i, sizes[i], j, sizes[j]);
ok(info.hbmMask != 0, "Imagelist merged from %d and %d had no mask\n", i, j);
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
}
for (i = 0; i < 8; i++)
ImageList_Destroy(himl[i]);
pImageList_Destroy(himl[i]);
}
static void test_merge(void)
{
HIMAGELIST himl1, himl2, hmerge;
HICON hicon1;
HWND hwnd = create_a_window();
HWND hwnd = create_window();
himl1 = ImageList_Create(32,32,0,0,3);
himl1 = pImageList_Create(32, 32, 0, 0, 3);
ok(himl1 != NULL,"failed to create himl1\n");
himl2 = ImageList_Create(32,32,0,0,3);
himl2 = pImageList_Create(32, 32, 0, 0, 3);
ok(himl2 != NULL,"failed to create himl2\n");
hicon1 = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
......@@ -615,60 +633,60 @@ static void test_merge(void)
if (!himl1 || !himl2 || !hicon1)
return;
ok(0==ImageList_AddIcon(himl2, hicon1),"add icon1 to himl2 failed\n");
ok(0 == pImageList_ReplaceIcon(himl2, -1, hicon1), "Failed to add icon1 to himl2.\n");
check_bits(hwnd, himl2, 0, 32, icon_bits, "add icon1 to himl2");
/* If himl1 has no images, merge still succeeds */
hmerge = ImageList_Merge(himl1, -1, himl2, 0, 0, 0);
hmerge = pImageList_Merge(himl1, -1, himl2, 0, 0, 0);
ok(hmerge != NULL, "merge himl1,-1 failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1,-1");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
hmerge = ImageList_Merge(himl1, 0, himl2, 0, 0, 0);
hmerge = pImageList_Merge(himl1, 0, himl2, 0, 0, 0);
ok(hmerge != NULL,"merge himl1,0 failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1,0");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
/* Same happens if himl2 is empty */
ImageList_Destroy(himl2);
himl2 = ImageList_Create(32,32,0,0,3);
pImageList_Destroy(himl2);
himl2 = pImageList_Create(32, 32, 0, 0, 3);
ok(himl2 != NULL,"failed to recreate himl2\n");
if (!himl2)
return;
hmerge = ImageList_Merge(himl1, -1, himl2, -1, 0, 0);
hmerge = pImageList_Merge(himl1, -1, himl2, -1, 0, 0);
ok(hmerge != NULL, "merge himl2,-1 failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl2,-1");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
hmerge = ImageList_Merge(himl1, -1, himl2, 0, 0, 0);
hmerge = pImageList_Merge(himl1, -1, himl2, 0, 0, 0);
ok(hmerge != NULL, "merge himl2,0 failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl2,0");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
/* Now try merging an image with itself */
ok(0==ImageList_AddIcon(himl2, hicon1),"re-add icon1 to himl2 failed\n");
ok(0 == pImageList_ReplaceIcon(himl2, -1, hicon1), "Failed to re-add icon1 to himl2.\n");
hmerge = ImageList_Merge(himl2, 0, himl2, 0, 0, 0);
hmerge = pImageList_Merge(himl2, 0, himl2, 0, 0, 0);
ok(hmerge != NULL, "merge himl2 with itself failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl2 with itself");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
/* Try merging 2 different image lists */
ok(0==ImageList_AddIcon(himl1, hicon1),"add icon1 to himl1 failed\n");
ok(0 == pImageList_ReplaceIcon(himl1, -1, hicon1), "Failed to add icon1 to himl1.\n");
hmerge = ImageList_Merge(himl1, 0, himl2, 0, 0, 0);
hmerge = pImageList_Merge(himl1, 0, himl2, 0, 0, 0);
ok(hmerge != NULL, "merge himl1 with himl2 failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1 with himl2");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
hmerge = ImageList_Merge(himl1, 0, himl2, 0, 8, 16);
hmerge = pImageList_Merge(himl1, 0, himl2, 0, 8, 16);
ok(hmerge != NULL, "merge himl1 with himl2 8,16 failed\n");
check_bits(hwnd, hmerge, 0, 32, empty_bits, "merge himl1 with himl2, 8,16");
if (hmerge) ImageList_Destroy(hmerge);
pImageList_Destroy(hmerge);
ImageList_Destroy(himl1);
ImageList_Destroy(himl2);
pImageList_Destroy(himl1);
pImageList_Destroy(himl2);
DestroyIcon(hicon1);
DestroyWindow(hwnd);
}
......@@ -920,16 +938,16 @@ static void check_iml_data(HIMAGELIST himl, INT cx, INT cy, INT cur, INT max, IN
char *data;
HRESULT hr;
ret = ImageList_GetImageCount(himl);
ret = pImageList_GetImageCount(himl);
ok(ret == cur, "%s: expected image count %d got %d\n", comment, cur, ret);
ret = ImageList_GetIconSize(himl, &cxx, &cyy);
ret = pImageList_GetIconSize(himl, &cxx, &cyy);
ok(ret, "ImageList_GetIconSize failed\n");
ok(cxx == cx, "%s: wrong cx %d (expected %d)\n", comment, cxx, cx);
ok(cyy == cy, "%s: wrong cy %d (expected %d)\n", comment, cyy, cy);
init_memstream(&stream);
ret = ImageList_Write(himl, &stream.IStream_iface);
ret = pImageList_Write(himl, &stream.IStream_iface);
ok(ret, "%s: ImageList_Write failed\n", comment);
hr = GetHGlobalFromStream(stream.stream, &hglobal);
......@@ -955,9 +973,9 @@ static void check_iml_data(HIMAGELIST himl, INT cx, INT cy, INT cur, INT max, IN
/* rewind and reconstruct from stream */
mv.QuadPart = 0;
IStream_Seek(stream.stream, mv, STREAM_SEEK_SET, NULL);
himl2 = ImageList_Read(&stream.IStream_iface);
himl2 = pImageList_Read(&stream.IStream_iface);
ok(himl2 != NULL, "%s: Failed to deserialize imagelist\n", comment);
ImageList_Destroy(himl2);
pImageList_Destroy(himl2);
GlobalUnlock(hglobal);
cleanup_memstream(&stream);
......@@ -1026,7 +1044,7 @@ static void test_imagelist_storage(void)
HICON icon;
INT ret;
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 1, 1);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 1, 1);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 2, 4, BMP_CX * 4, BMP_CX * 1, ILC_COLOR24, "empty");
......@@ -1034,202 +1052,199 @@ static void test_imagelist_storage(void)
image_list_init(himl);
check_iml_data(himl, BMP_CX, BMP_CX, 24, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "orig");
ret = ImageList_Remove(himl, 4);
ret = pImageList_Remove(himl, 4);
ok(ret, "ImageList_Remove failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 23, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "1");
ret = ImageList_Remove(himl, 5);
ret = pImageList_Remove(himl, 5);
ok(ret, "ImageList_Remove failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 22, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "2");
ret = ImageList_Remove(himl, 6);
ret = pImageList_Remove(himl, 6);
ok(ret, "ImageList_Remove failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 21, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "3");
ret = ImageList_Remove(himl, 7);
ret = pImageList_Remove(himl, 7);
ok(ret, "ImageList_Remove failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 20, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "4");
ret = ImageList_Remove(himl, -2);
ret = pImageList_Remove(himl, -2);
ok(!ret, "ImageList_Remove(-2) should fail\n");
check_iml_data(himl, BMP_CX, BMP_CX, 20, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "5");
ret = ImageList_Remove(himl, 20);
ret = pImageList_Remove(himl, 20);
ok(!ret, "ImageList_Remove(20) should fail\n");
check_iml_data(himl, BMP_CX, BMP_CX, 20, 27, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "6");
ret = ImageList_Remove(himl, -1);
ret = pImageList_Remove(himl, -1);
ok(ret, "ImageList_Remove(-1) failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 4, 4, BMP_CX * 4, BMP_CX * 1, ILC_COLOR24, "7");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
/* test ImageList_Create storage allocation */
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 0, 32);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 0, 32);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 1, 32, BMP_CX * 4, BMP_CX * 1, ILC_COLOR24, "init 0 grow 32");
hbm = create_bitmap(BMP_CX * 9, BMP_CX, 0, "9");
ret = ImageList_Add(himl, hbm, NULL);
ret = pImageList_Add(himl, hbm, NULL);
ok(ret == 0, "ImageList_Add returned %d, expected 0\n", ret);
check_iml_data(himl, BMP_CX, BMP_CX, 1, 34, 32, BMP_CX * 4, BMP_CX * 9, ILC_COLOR24, "add 1 x 9");
DeleteObject(hbm);
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 4, 4);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 4, 4);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR24, "init 4 grow 4");
hbm = create_bitmap(BMP_CX, BMP_CX * 9, 0, "9");
ret = ImageList_Add(himl, hbm, NULL);
ret = pImageList_Add(himl, hbm, NULL);
ok(ret == 0, "ImageList_Add returned %d, expected 0\n", ret);
check_iml_data(himl, BMP_CX, BMP_CX, 9, 15, 4, BMP_CX * 4, BMP_CX * 4, ILC_COLOR24, "add 9 x 1");
ret = ImageList_Add(himl, hbm, NULL);
ret = pImageList_Add(himl, hbm, NULL);
ok(ret == 9, "ImageList_Add returned %d, expected 9\n", ret);
check_iml_data(himl, BMP_CX, BMP_CX, 18, 25, 4, BMP_CX * 4, BMP_CX * 7, ILC_COLOR24, "add 9 x 1");
DeleteObject(hbm);
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 207, 209);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 207, 209);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 208, 212, BMP_CX * 4, BMP_CX * 52, ILC_COLOR24, "init 207 grow 209");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 209, 207);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 209, 207);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 210, 208, BMP_CX * 4, BMP_CX * 53, ILC_COLOR24, "init 209 grow 207");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 14, 4);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 14, 4);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 15, 4, BMP_CX * 4, BMP_CX * 4, ILC_COLOR24, "init 14 grow 4");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 5, 9);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 5, 9);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 6, 12, BMP_CX * 4, BMP_CX * 2, ILC_COLOR24, "init 5 grow 9");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 9, 5);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 9, 5);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 10, 8, BMP_CX * 4, BMP_CX * 3, ILC_COLOR24, "init 9 grow 5");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 2, 4);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 2, 4);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 3, 4, BMP_CX * 4, BMP_CX * 1, ILC_COLOR24, "init 2 grow 4");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 4, 2);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24, 4, 2);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR24, "init 4 grow 2");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR8, 4, 2);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR8, 4, 2);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR8, "bpp 8");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4, 4, 2);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4, 4, 2);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4, "bpp 4");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, 0, 4, 2);
himl = pImageList_Create(BMP_CX, BMP_CX, 0, 4, 2);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4, "bpp default");
icon = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
ok( ImageList_AddIcon(himl, icon) == 0,"failed to add icon\n");
ok( ImageList_AddIcon(himl, icon) == 1,"failed to add icon\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 0, "Failed to add icon.\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 1, "Failed to add icon.\n");
DestroyIcon( icon );
check_iml_data(himl, BMP_CX, BMP_CX, 2, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4, "bpp default");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24|ILC_MASK, 4, 2);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR24|ILC_MASK, 4, 2);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR24|ILC_MASK,
"bpp 24 + mask");
icon = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
ok( ImageList_AddIcon(himl, icon) == 0,"failed to add icon\n");
ok( ImageList_AddIcon(himl, icon) == 1,"failed to add icon\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 0, "Failed to add icon.\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 1, "Failed to add icon.\n");
DestroyIcon( icon );
check_iml_data(himl, BMP_CX, BMP_CX, 2, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR24|ILC_MASK,
"bpp 24 + mask");
ret = ImageList_Destroy(himl);
check_iml_data(himl, BMP_CX, BMP_CX, 2, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR24|ILC_MASK, "bpp 24 + mask");
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 4, 2);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 4, 2);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4|ILC_MASK,
"bpp 4 + mask");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4|ILC_MASK, "bpp 4 + mask");
icon = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
ok( ImageList_AddIcon(himl, icon) == 0,"failed to add icon\n");
ok( ImageList_AddIcon(himl, icon) == 1,"failed to add icon\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 0, "Failed to add icon.\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 1, "Failed to add icon.\n");
DestroyIcon( icon );
check_iml_data(himl, BMP_CX, BMP_CX, 2, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4|ILC_MASK,
"bpp 4 + mask");
ret = ImageList_Destroy(himl);
check_iml_data(himl, BMP_CX, BMP_CX, 2, 5, 4, BMP_CX * 4, BMP_CX * 2, ILC_COLOR4|ILC_MASK, "bpp 4 + mask");
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, 99);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, 99);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 3, 100, BMP_CX * 4, BMP_CX, ILC_COLOR4|ILC_MASK,
"init 2 grow 99");
icon = CreateIcon(hinst, 32, 32, 1, 1, icon_bits, icon_bits);
ok( ImageList_AddIcon(himl, icon) == 0,"failed to add icon\n");
ok( ImageList_AddIcon(himl, icon) == 1,"failed to add icon\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 0, "Failed to add icon.\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 1, "Failed to add icon.\n");
check_iml_data(himl, BMP_CX, BMP_CX, 2, 3, 100, BMP_CX * 4, BMP_CX, ILC_COLOR4|ILC_MASK,
"init 2 grow 99 2 icons");
ok( ImageList_AddIcon(himl, icon) == 2,"failed to add icon\n");
ok( pImageList_ReplaceIcon(himl, -1, icon) == 2, "Failed to add icon\n");
DestroyIcon( icon );
check_iml_data(himl, BMP_CX, BMP_CX, 3, 104, 100, BMP_CX * 4, BMP_CX * 104/4, ILC_COLOR4|ILC_MASK,
"init 2 grow 99 3 icons");
ok( ImageList_Remove(himl, -1) == TRUE,"failed to remove icon\n");
ok( pImageList_Remove(himl, -1) == TRUE, "Failed to remove icon.\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 100, 100, BMP_CX * 4, BMP_CX * 100/4, ILC_COLOR4|ILC_MASK,
"init 2 grow 99 empty");
ok( ImageList_SetImageCount(himl, 22) == TRUE,"failed to set image count\n");
ok( pImageList_SetImageCount(himl, 22) == TRUE, "Failed to set image count.\n");
check_iml_data(himl, BMP_CX, BMP_CX, 22, 23, 100, BMP_CX * 4, BMP_CX * 24/4, ILC_COLOR4|ILC_MASK,
"init 2 grow 99 set count 22");
ok( ImageList_SetImageCount(himl, 0) == TRUE,"failed to set image count\n");
ok( pImageList_SetImageCount(himl, 0) == TRUE, "Failed to set image count.\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 1, 100, BMP_CX * 4, BMP_CX, ILC_COLOR4|ILC_MASK,
"init 2 grow 99 set count 0");
ok( ImageList_SetImageCount(himl, 42) == TRUE,"failed to set image count\n");
ok( pImageList_SetImageCount(himl, 42) == TRUE, "Failed to set image count.\n");
check_iml_data(himl, BMP_CX, BMP_CX, 42, 43, 100, BMP_CX * 4, BMP_CX * 44/4, ILC_COLOR4|ILC_MASK,
"init 2 grow 99 set count 42");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, 65536+12);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, 65536+12);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 3, 12, BMP_CX * 4, BMP_CX, ILC_COLOR4|ILC_MASK,
"init 2 grow 65536+12");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, 65535);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, 65535);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 3, 0, BMP_CX * 4, BMP_CX, ILC_COLOR4|ILC_MASK,
"init 2 grow 65535");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
himl = ImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, -20);
himl = pImageList_Create(BMP_CX, BMP_CX, ILC_COLOR4|ILC_MASK, 2, -20);
ok(himl != 0, "ImageList_Create failed\n");
check_iml_data(himl, BMP_CX, BMP_CX, 0, 3, 4, BMP_CX * 4, BMP_CX, ILC_COLOR4|ILC_MASK,
"init 2 grow -20");
ret = ImageList_Destroy(himl);
ret = pImageList_Destroy(himl);
ok(ret, "ImageList_Destroy failed\n");
}
......@@ -1566,7 +1581,7 @@ static void test_iimagelist(void)
if (hr == S_OK)
IImageList_Release(imgl);
ImageList_Destroy(himl);
pImageList_Destroy(himl);
/* IImageList2 */
hr = pImageList_CoCreateInstance(&CLSID_ImageList, NULL, &IID_IImageList2, (void**)&imagelist);
......@@ -1579,81 +1594,6 @@ static void test_iimagelist(void)
IImageList2_Release(imagelist);
}
static void test_hotspot_v6(void)
{
struct hotspot {
int dx;
int dy;
};
#define SIZEX1 47
#define SIZEY1 31
#define SIZEX2 11
#define SIZEY2 17
#define HOTSPOTS_MAX 4 /* Number of entries in hotspots */
static const struct hotspot hotspots[HOTSPOTS_MAX] = {
{ 10, 7 },
{ SIZEX1, SIZEY1 },
{ -9, -8 },
{ -7, 35 }
};
int i, j;
HIMAGELIST himl1 = createImageList(SIZEX1, SIZEY1);
HIMAGELIST himl2 = createImageList(SIZEX2, SIZEY2);
IImageList *imgl1, *imgl2;
HRESULT hr;
/* cast to IImageList */
imgl1 = (IImageList *) himl1;
imgl2 = (IImageList *) himl2;
for (i = 0; i < HOTSPOTS_MAX; i++) {
for (j = 0; j < HOTSPOTS_MAX; j++) {
int dx1 = hotspots[i].dx;
int dy1 = hotspots[i].dy;
int dx2 = hotspots[j].dx;
int dy2 = hotspots[j].dy;
int correctx, correcty, newx, newy;
char loc[256];
IImageList *imglNew;
POINT ppt;
hr = IImageList_BeginDrag(imgl1, 0, dx1, dy1);
ok(SUCCEEDED(hr), "BeginDrag failed for { %d, %d }\n", dx1, dy1);
sprintf(loc, "BeginDrag (%d,%d)\n", i, j);
/* check merging the dragged image with a second image */
hr = IImageList_SetDragCursorImage(imgl2, (IUnknown *) imgl2, 0, dx2, dy2);
ok(SUCCEEDED(hr), "SetDragCursorImage failed for {%d, %d}{%d, %d}\n",
dx1, dy1, dx2, dy2);
sprintf(loc, "SetDragCursorImage (%d,%d)\n", i, j);
/* check new hotspot, it should be the same like the old one */
hr = IImageList_GetDragImage(imgl2, NULL, &ppt, &IID_IImageList, (PVOID *) &imglNew);
ok(SUCCEEDED(hr), "GetDragImage failed\n");
ok(ppt.x == dx1 && ppt.y == dy1,
"Expected drag hotspot [%d,%d] got [%d,%d]\n",
dx1, dy1, ppt.x, ppt.y);
/* check size of new dragged image */
IImageList_GetIconSize(imglNew, &newx, &newy);
correctx = max(SIZEX1, max(SIZEX2 + dx2, SIZEX1 - dx2));
correcty = max(SIZEY1, max(SIZEY2 + dy2, SIZEY1 - dy2));
ok(newx == correctx && newy == correcty,
"Expected drag image size [%d,%d] got [%d,%d]\n",
correctx, correcty, newx, newy);
sprintf(loc, "GetDragImage (%d,%d)\n", i, j);
IImageList_EndDrag(imgl2);
}
}
#undef SIZEX1
#undef SIZEY1
#undef SIZEX2
#undef SIZEY2
#undef HOTSPOTS_MAX
IImageList_Release(imgl2);
IImageList_Release(imgl1);
}
static void test_IImageList_Add_Remove(void)
{
IImageList *imgl;
......@@ -1761,7 +1701,7 @@ static void test_IImageList_Draw(void)
HDC hdc;
int ret;
hwndfortest = create_a_window();
hwndfortest = create_window();
hdc = GetDC(hwndfortest);
ok(hdc!=NULL, "couldn't get DC\n");
......@@ -1839,7 +1779,7 @@ static void test_IImageList_Merge(void)
HIMAGELIST himl1, himl2;
IImageList *imgl1, *imgl2, *merge;
HICON hicon1;
HWND hwnd = create_a_window();
HWND hwnd = create_window();
HRESULT hr;
int ret;
......@@ -1926,94 +1866,89 @@ static void test_iconsize(void)
INT cx, cy;
BOOL ret;
himl = ImageList_Create(16, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 16, ILC_COLOR16, 0, 3);
/* null pointers, not zero imagelist dimensions */
ret = ImageList_GetIconSize(himl, NULL, NULL);
ret = pImageList_GetIconSize(himl, NULL, NULL);
ok(!ret, "got %d\n", ret);
/* doesn't touch return pointers */
cx = 0x1abe11ed;
ret = ImageList_GetIconSize(himl, &cx, NULL);
ret = pImageList_GetIconSize(himl, &cx, NULL);
ok(!ret, "got %d\n", ret);
ok(cx == 0x1abe11ed, "got %d\n", cx);
cy = 0x1abe11ed;
ret = ImageList_GetIconSize(himl, NULL, &cy);
ret = pImageList_GetIconSize(himl, NULL, &cy);
ok(!ret, "got %d\n", ret);
ok(cy == 0x1abe11ed, "got %d\n", cy);
ImageList_Destroy(himl);
pImageList_Destroy(himl);
ret = ImageList_GetIconSize((HIMAGELIST)0xdeadbeef, &cx, &cy);
ret = pImageList_GetIconSize((HIMAGELIST)0xdeadbeef, &cx, &cy);
ok(!ret, "got %d\n", ret);
}
static void test_create_destroy(void)
{
HIMAGELIST himl;
IImageList *imgl;
INT cx, cy;
BOOL rc;
HRESULT hr;
INT ret;
/* list with zero or negative image dimensions */
himl = ImageList_Create(0, 0, ILC_COLOR16, 0, 3);
himl = pImageList_Create(0, 0, ILC_COLOR16, 0, 3);
ok(himl == NULL, "got %p\n", himl);
himl = ImageList_Create(0, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(0, 16, ILC_COLOR16, 0, 3);
ok(himl == NULL, "got %p\n", himl);
himl = ImageList_Create(16, 0, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 0, ILC_COLOR16, 0, 3);
ok(himl == NULL, "got %p\n", himl);
himl = ImageList_Create(16, -1, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, -1, ILC_COLOR16, 0, 3);
ok(himl == NULL, "got %p\n", himl);
himl = ImageList_Create(-1, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(-1, 16, ILC_COLOR16, 0, 3);
ok(himl == NULL, "got %p\n", himl);
rc = ImageList_Destroy((HIMAGELIST)0xdeadbeef);
rc = pImageList_Destroy((HIMAGELIST)0xdeadbeef);
ok(rc == FALSE, "ImageList_Destroy(0xdeadbeef) should fail and not crash\n");
/* DDB image lists */
himl = ImageList_Create(0, 14, ILC_COLORDDB, 4, 4);
himl = pImageList_Create(0, 14, ILC_COLORDDB, 4, 4);
ok(himl != NULL, "got %p\n", himl);
imgl = (IImageList*)himl;
IImageList_GetIconSize(imgl, &cx, &cy);
pImageList_GetIconSize(himl, &cx, &cy);
ok (cx == 0, "Wrong cx (%i)\n", cx);
ok (cy == 14, "Wrong cy (%i)\n", cy);
ImageList_Destroy(himl);
pImageList_Destroy(himl);
himl = ImageList_Create(0, 0, ILC_COLORDDB, 4, 4);
himl = pImageList_Create(0, 0, ILC_COLORDDB, 4, 4);
ok(himl != NULL, "got %p\n", himl);
imgl = (IImageList*)himl;
IImageList_GetIconSize(imgl, &cx, &cy);
pImageList_GetIconSize(himl, &cx, &cy);
ok (cx == 0, "Wrong cx (%i)\n", cx);
ok (cy == 0, "Wrong cy (%i)\n", cy);
ImageList_Destroy(himl);
pImageList_Destroy(himl);
himl = ImageList_Create(0, 0, ILC_COLORDDB, 0, 4);
himl = pImageList_Create(0, 0, ILC_COLORDDB, 0, 4);
ok(himl != NULL, "got %p\n", himl);
imgl = (IImageList*)himl;
IImageList_GetIconSize(imgl, &cx, &cy);
pImageList_GetIconSize(himl, &cx, &cy);
ok (cx == 0, "Wrong cx (%i)\n", cx);
ok (cy == 0, "Wrong cy (%i)\n", cy);
hr = IImageList_SetImageCount(imgl, 3);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IImageList_GetImageCount(imgl, &ret);
ok(hr == S_OK && ret == 3, "invalid image count after increase\n");
pImageList_SetImageCount(himl, 3);
ret = pImageList_GetImageCount(himl);
ok(ret == 3, "Unexpected image count after increase\n");
/* Trying to actually add an image causes a crash on Windows */
ImageList_Destroy(himl);
pImageList_Destroy(himl);
/* Negative values fail */
himl = ImageList_Create(-1, -1, ILC_COLORDDB, 4, 4);
himl = pImageList_Create(-1, -1, ILC_COLORDDB, 4, 4);
ok(himl == NULL, "got %p\n", himl);
himl = ImageList_Create(-1, 1, ILC_COLORDDB, 4, 4);
himl = pImageList_Create(-1, 1, ILC_COLORDDB, 4, 4);
ok(himl == NULL, "got %p\n", himl);
himl = ImageList_Create(1, -1, ILC_COLORDDB, 4, 4);
himl = pImageList_Create(1, -1, ILC_COLORDDB, 4, 4);
ok(himl == NULL, "got %p\n", himl);
}
......@@ -2026,7 +1961,7 @@ static void check_color_table(const char *name, HDC hdc, HIMAGELIST himl, UINT i
BITMAPINFO *bmi = (BITMAPINFO *)bmi_buffer;
int i, depth = ilc & 0xfe;
ret = ImageList_GetImageInfo(himl, 0, &info);
ret = pImageList_GetImageInfo(himl, 0, &info);
ok(ret, "got %d\n", ret);
ok(info.hbmImage != NULL, "got %p\n", info.hbmImage);
......@@ -2110,7 +2045,7 @@ static void test_color_table(UINT ilc)
get_default_color_table(hdc, ilc & 0xfe, default_table);
himl = ImageList_Create(16, 16, ilc, 0, 3);
himl = pImageList_Create(16, 16, ilc, 0, 3);
ok(himl != NULL, "got %p\n", himl);
memset(bmi_buffer, 0, sizeof(bmi_buffer));
......@@ -2144,17 +2079,17 @@ static void test_color_table(UINT ilc)
dib32 = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS, NULL, NULL, 0);
/* add 32 first then 8. This won't set the color table */
ret = ImageList_Add(himl, dib32, NULL);
ret = pImageList_Add(himl, dib32, NULL);
ok(ret == 0, "got %d\n", ret);
ret = ImageList_Add(himl, dib8, NULL);
ret = pImageList_Add(himl, dib8, NULL);
ok(ret == 1, "got %d\n", ret);
check_color_table("add 32, 8", hdc, himl, ilc, default_table, NULL);
/* since the previous _Adds didn't set the color table, this one will */
ret = ImageList_Remove(himl, -1);
ret = pImageList_Remove(himl, -1);
ok(ret, "got %d\n", ret);
ret = ImageList_Add(himl, dib8, NULL);
ret = pImageList_Add(himl, dib8, NULL);
ok(ret == 0, "got %d\n", ret);
memset(rgb, 0, sizeof(rgb));
......@@ -2165,18 +2100,18 @@ static void test_color_table(UINT ilc)
/* remove all, add 4. Color table remains the same since it's inplicitly
been set by the previous _Add */
ret = ImageList_Remove(himl, -1);
ret = pImageList_Remove(himl, -1);
ok(ret, "got %d\n", ret);
ret = ImageList_Add(himl, dib4, NULL);
ret = pImageList_Add(himl, dib4, NULL);
ok(ret == 0, "got %d\n", ret);
check_color_table("remove all, add 4", hdc, himl, ilc, rgb, default_table);
ImageList_Destroy(himl);
himl = ImageList_Create(16, 16, ilc, 0, 3);
pImageList_Destroy(himl);
himl = pImageList_Create(16, 16, ilc, 0, 3);
ok(himl != NULL, "got %p\n", himl);
/* add 4 */
ret = ImageList_Add(himl, dib4, NULL);
ret = pImageList_Add(himl, dib4, NULL);
ok(ret == 0, "got %d\n", ret);
memset(rgb, 0, 16 * sizeof(rgb[0]));
......@@ -2190,12 +2125,12 @@ static void test_color_table(UINT ilc)
check_color_table("add 4", hdc, himl, ilc, rgb, default_table);
ImageList_Destroy(himl);
himl = ImageList_Create(16, 16, ilc, 0, 3);
pImageList_Destroy(himl);
himl = pImageList_Create(16, 16, ilc, 0, 3);
ok(himl != NULL, "got %p\n", himl);
/* set color table, add 8 */
ret = ImageList_Remove(himl, -1);
ret = pImageList_Remove(himl, -1);
ok(ret, "got %d\n", ret);
memset(rgb, 0, sizeof(rgb));
rgb[0].rgbRed = 0xcc;
......@@ -2203,7 +2138,7 @@ static void test_color_table(UINT ilc)
ret = pImageList_SetColorTable(himl, 0, 2, rgb);
ok(ret == 2, "got %d\n", ret);
/* the table is set, so this doesn't change it */
ret = ImageList_Add(himl, dib8, NULL);
ret = pImageList_Add(himl, dib8, NULL);
ok(ret == 0, "got %d\n", ret);
memcpy(rgb + 2, default_table + 2, 254 * sizeof(rgb[0]));
......@@ -2213,7 +2148,7 @@ static void test_color_table(UINT ilc)
DeleteObject(dib8);
DeleteObject(dib4);
DeleteDC(hdc);
ImageList_Destroy(himl);
pImageList_Destroy(himl);
}
static void test_copy(void)
......@@ -2222,21 +2157,21 @@ static void test_copy(void)
BOOL ret;
int count;
dst = ImageList_Create(5, 11, ILC_COLOR, 1, 1);
count = ImageList_GetImageCount(dst);
dst = pImageList_Create(5, 11, ILC_COLOR, 1, 1);
count = pImageList_GetImageCount(dst);
ok(!count, "ImageList not empty.\n");
src = createImageList(7, 13);
count = ImageList_GetImageCount(src);
count = pImageList_GetImageCount(src);
ok(count > 2, "Tests need an ImageList with more than 2 images\n");
/* ImageList_Copy() cannot copy between two ImageLists */
ret = ImageList_Copy(dst, 0, src, 2, ILCF_MOVE);
ret = pImageList_Copy(dst, 0, src, 2, ILCF_MOVE);
ok(!ret, "ImageList_Copy() should have returned FALSE\n");
count = ImageList_GetImageCount(dst);
count = pImageList_GetImageCount(dst);
ok(count == 0, "Expected no image in dst ImageList, got %d\n", count);
ImageList_Destroy(dst);
ImageList_Destroy(src);
pImageList_Destroy(dst);
pImageList_Destroy(src);
}
static void test_loadimage(void)
......@@ -2244,19 +2179,19 @@ static void test_loadimage(void)
HIMAGELIST list;
DWORD flags;
list = ImageList_LoadImageW( hinst, MAKEINTRESOURCEW(IDB_BITMAP_128x15), 16, 1, CLR_DEFAULT,
list = pImageList_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 );
pImageList_Destroy( list );
list = ImageList_LoadImageW( hinst, MAKEINTRESOURCEW(IDB_BITMAP_128x15), 16, 1, CLR_NONE,
list = pImageList_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 );
pImageList_Destroy( list );
}
static void test_IImageList_Clone(void)
......@@ -2266,7 +2201,7 @@ static void test_IImageList_Clone(void)
HRESULT hr;
ULONG ref;
himl = ImageList_Create(16, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 16, ILC_COLOR16, 0, 3);
imgl = (IImageList*)himl;
if (0)
......@@ -2290,7 +2225,7 @@ static void test_IImageList_GetBkColor(void)
COLORREF color;
HRESULT hr;
himl = ImageList_Create(16, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 16, ILC_COLOR16, 0, 3);
imgl = (IImageList*)himl;
if (0)
......@@ -2312,7 +2247,7 @@ static void test_IImageList_SetBkColor(void)
COLORREF color;
HRESULT hr;
himl = ImageList_Create(16, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 16, ILC_COLOR16, 0, 3);
imgl = (IImageList*)himl;
if (0)
......@@ -2342,7 +2277,7 @@ static void test_IImageList_GetImageCount(void)
int count;
HRESULT hr;
himl = ImageList_Create(16, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 16, ILC_COLOR16, 0, 3);
imgl = (IImageList*)himl;
if (0)
......@@ -2366,7 +2301,7 @@ static void test_IImageList_GetIconSize(void)
int cx, cy;
HRESULT hr;
himl = ImageList_Create(16, 16, ILC_COLOR16, 0, 3);
himl = pImageList_Create(16, 16, ILC_COLOR16, 0, 3);
imgl = (IImageList*)himl;
hr = IImageList_GetIconSize(imgl, NULL, NULL);
......@@ -2381,18 +2316,47 @@ static void test_IImageList_GetIconSize(void)
IImageList_Release(imgl);
}
static void init_functions(void)
{
HMODULE hComCtl32 = GetModuleHandleA("comctl32.dll");
#define X(f) p##f = (void*)GetProcAddress(hComCtl32, #f);
#define X2(f, ord) p##f = (void*)GetProcAddress(hComCtl32, (const char *)ord);
X(ImageList_Create);
X(ImageList_Destroy);
X(ImageList_Add);
X(ImageList_DrawIndirect);
X(ImageList_SetImageCount);
X(ImageList_SetImageCount);
X2(ImageList_SetColorTable, 390);
X(ImageList_GetFlags);
X(ImageList_BeginDrag);
X(ImageList_GetDragImage);
X(ImageList_EndDrag);
X(ImageList_GetImageCount);
X(ImageList_SetDragCursorImage);
X(ImageList_GetIconSize);
X(ImageList_Remove);
X(ImageList_ReplaceIcon);
X(ImageList_Replace);
X(ImageList_Merge);
X(ImageList_GetImageInfo);
X(ImageList_Write);
X(ImageList_Read);
X(ImageList_Copy);
X(ImageList_LoadImageW);
X(ImageList_CoCreateInstance);
X(HIMAGELIST_QueryInterface);
#undef X
#undef X2
}
START_TEST(imagelist)
{
ULONG_PTR ctx_cookie;
HANDLE hCtx;
HMODULE hComCtl32 = GetModuleHandleA("comctl32.dll");
pImageList_Create = NULL; /* These are not needed for non-v6.0 tests*/
pImageList_Add = NULL;
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");
init_functions();
hinst = GetModuleHandleA(NULL);
......@@ -2413,30 +2377,29 @@ START_TEST(imagelist)
test_copy();
test_loadimage();
FreeLibrary(hComCtl32);
/* Now perform v6 tests */
if (!load_v6_module(&ctx_cookie, &hCtx))
return;
/* Reload comctl32 */
hComCtl32 = LoadLibraryA("comctl32.dll");
pImageList_Create = (void*)GetProcAddress(hComCtl32, "ImageList_Create");
pImageList_Add = (void*)GetProcAddress(hComCtl32, "ImageList_Add");
pImageList_DrawIndirect = (void*)GetProcAddress(hComCtl32, "ImageList_DrawIndirect");
pImageList_SetImageCount = (void*)GetProcAddress(hComCtl32, "ImageList_SetImageCount");
pImageList_CoCreateInstance = (void*)GetProcAddress(hComCtl32, "ImageList_CoCreateInstance");
pHIMAGELIST_QueryInterface = (void*)GetProcAddress(hComCtl32, "HIMAGELIST_QueryInterface");
init_functions();
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
/* Do v6.0 tests */
test_add_remove();
test_imagecount();
test_DrawIndirect();
test_merge();
test_iconsize();
test_color_table(ILC_COLOR4);
test_color_table(ILC_COLOR8);
test_copy();
test_loadimage();
test_ImageList_DrawIndirect();
test_shell_imagelist();
test_iimagelist();
test_hotspot_v6();
test_IImageList_Add_Remove();
test_IImageList_Get_SetImageCount();
test_IImageList_Draw();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment