[PATCH 2/2] comctl32/toolbar: Support undocumented IDs for standard bitmap lists
Nikolay Sivov
nsivov at codeweavers.com
Tue May 30 21:56:39 CDT 2017
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/comctl32/tests/toolbar.c | 93 ++++++++++++++++++++++++++++++++++++++++++-
dlls/comctl32/toolbar.c | 7 +++-
2 files changed, 97 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c
index 2d12732b09..e2c29f45c6 100644
--- a/dlls/comctl32/tests/toolbar.c
+++ b/dlls/comctl32/tests/toolbar.c
@@ -490,13 +490,81 @@ static void add_128x15_bitmap(HWND hToolbar, int nCmds)
static void test_add_bitmap(void)
{
+ TBADDBITMAP stdsmall, std;
HWND hToolbar = NULL;
TBADDBITMAP bmp128;
TBADDBITMAP bmp80;
- TBADDBITMAP stdsmall;
TBADDBITMAP addbmp;
HIMAGELIST himl;
- INT ret;
+ INT ret, id;
+
+ /* Test default bitmaps range */
+ for (id = IDB_STD_SMALL_COLOR; id < IDB_HIST_LARGE_COLOR; id++)
+ {
+ HIMAGELIST himl;
+ int cx, cy, count;
+
+ rebuild_toolbar(&hToolbar);
+
+ std.hInst = HINST_COMMCTRL;
+ std.nID = id;
+
+ ret = SendMessageA(hToolbar, TB_ADDBITMAP, 0, (LPARAM)&std);
+ ok(ret == 0, "Got %d\n", ret);
+
+ himl = (HIMAGELIST)SendMessageA(hToolbar, TB_GETIMAGELIST, 0, 0);
+ ok(himl != NULL, "Got %p\n", himl);
+
+ ret = ImageList_GetIconSize(himl, &cx, &cy);
+ ok(ret, "Got %d\n", ret);
+ ok(cx == cy, "Got %d x %d\n", cx, cy);
+
+ count = ImageList_GetImageCount(himl);
+
+ /* Image count */
+ switch (id)
+ {
+ case IDB_STD_SMALL_COLOR:
+ case IDB_STD_LARGE_COLOR:
+ case 2:
+ case 3:
+ ok(count == 15, "got count %d\n", count);
+ break;
+ case IDB_VIEW_SMALL_COLOR:
+ case IDB_VIEW_LARGE_COLOR:
+ case 6:
+ case 7:
+ ok(count == 12, "got count %d\n", count);
+ break;
+ case IDB_HIST_SMALL_COLOR:
+ case IDB_HIST_LARGE_COLOR:
+ ok(count == 5, "got count %d\n", count);
+ break;
+ default:
+ ok(0, "id %d, count %d\n", id, count);
+ }
+
+ /* Image sizes */
+ switch (id)
+ {
+ case IDB_STD_SMALL_COLOR:
+ case 2:
+ case IDB_VIEW_SMALL_COLOR:
+ case 6:
+ case IDB_HIST_SMALL_COLOR:
+ ok(cx == 16, "got size %d\n", cx);
+ break;
+ case IDB_STD_LARGE_COLOR:
+ case 3:
+ case IDB_VIEW_LARGE_COLOR:
+ case 7:
+ case IDB_HIST_LARGE_COLOR:
+ ok(cx == 24, "got size %d\n", cx);
+ break;
+ default:
+ ok(0, "id %d, size %d\n", id, cx);
+ }
+ }
/* empty 128x15 bitmap */
bmp128.hInst = GetModuleHandleA(NULL);
@@ -2409,6 +2477,26 @@ todo_wine
DestroyWindow(hwnd);
}
+static void test_imagelist(void)
+{
+ HIMAGELIST imagelist;
+ HWND hwnd = NULL;
+ int ret;
+
+ rebuild_toolbar(&hwnd);
+
+ imagelist = (HIMAGELIST)SendMessageA(hwnd, TB_GETIMAGELIST, 0, 0);
+ ok(imagelist == NULL, "got %p\n", imagelist);
+
+ ret = SendMessageA(hwnd, TB_SETBITMAPSIZE, 0, MAKELONG(16, 16));
+ ok(ret, "got %d\n", ret);
+
+ imagelist = (HIMAGELIST)SendMessageA(hwnd, TB_GETIMAGELIST, 0, 0);
+ ok(imagelist == NULL, "got %p\n", imagelist);
+
+ DestroyWindow(hwnd);
+}
+
START_TEST(toolbar)
{
WNDCLASSA wc;
@@ -2454,6 +2542,7 @@ START_TEST(toolbar)
test_noresize();
test_save();
test_drawtext_flags();
+ test_imagelist();
PostQuitMessage(0);
while(GetMessageA(&msg,0,0,0)) {
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index 4da3008d5c..8a035979d2 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -2810,18 +2810,22 @@ TOOLBAR_AddBitmap (TOOLBAR_INFO *infoPtr, INT count, const TBADDBITMAP *lpAddBmp
switch (lpAddBmp->nID)
{
case IDB_STD_SMALL_COLOR:
+ case 2:
info.nButtons = 15;
info.nID = IDB_STD_SMALL;
break;
case IDB_STD_LARGE_COLOR:
+ case 3:
info.nButtons = 15;
info.nID = IDB_STD_LARGE;
break;
case IDB_VIEW_SMALL_COLOR:
+ case 6:
info.nButtons = 12;
info.nID = IDB_VIEW_SMALL;
break;
case IDB_VIEW_LARGE_COLOR:
+ case 7:
info.nButtons = 12;
info.nID = IDB_VIEW_LARGE;
break;
@@ -2834,6 +2838,7 @@ TOOLBAR_AddBitmap (TOOLBAR_INFO *infoPtr, INT count, const TBADDBITMAP *lpAddBmp
info.nID = IDB_HIST_LARGE;
break;
default:
+ WARN("unknown bitmap id, %ld\n", lpAddBmp->nID);
return -1;
}
@@ -4346,7 +4351,7 @@ TOOLBAR_SetBitmapSize (TOOLBAR_INFO *infoPtr, WPARAM wParam, LPARAM lParam)
short width = (short)LOWORD(lParam);
short height = (short)HIWORD(lParam);
- TRACE("hwnd=%p, wParam=%ld, lParam=%ld\n", infoPtr->hwndSelf, wParam, lParam);
+ TRACE("hwnd=%p, wParam=%ld, size %d x %d\n", infoPtr->hwndSelf, wParam, width, height);
if (wParam != 0)
FIXME("wParam is %ld. Perhaps image list index?\n", wParam);
--
2.11.0
More information about the wine-patches
mailing list