Nikolay Sivov : comctl32/toolbar: Support undocumented IDs for standard bitmap lists.

Alexandre Julliard julliard at winehq.org
Fri Oct 20 07:19:59 CDT 2017


Module: wine
Branch: stable
Commit: 852b83950ee06fa06e9ba42fa6e3a6b23424beb7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=852b83950ee06fa06e9ba42fa6e3a6b23424beb7

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Wed May 31 05:56:39 2017 +0300

comctl32/toolbar: Support undocumented IDs for standard bitmap lists.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit d93ae6ff346d0a84ad0db2cc034b72f0595e59e0)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 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 a8bcd40..1cfbe3e 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);
@@ -2408,6 +2476,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;
@@ -2453,6 +2541,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 92ab856..b6e4a05 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -2809,18 +2809,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;
@@ -2833,6 +2837,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;
 	}
 
@@ -4345,7 +4350,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);




More information about the wine-cvs mailing list