[PATCH v2 2/3] comctl32/tests: Test that themed toolbar buttons don't use pattern brushes to draw checked background.

Zhiyi Zhang wine at gitlab.winehq.org
Tue Jun 21 15:44:39 CDT 2022


From: Zhiyi Zhang <zzhang at codeweavers.com>

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
 dlls/comctl32/tests/toolbar.c | 60 ++++++++++++++++++++++++++++-------
 1 file changed, 49 insertions(+), 11 deletions(-)

diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c
index 31c360304c6..897405098c2 100644
--- a/dlls/comctl32/tests/toolbar.c
+++ b/dlls/comctl32/tests/toolbar.c
@@ -62,6 +62,7 @@ static BOOL g_fExpectedHotItemOld;
 static BOOL g_fExpectedHotItemNew;
 static DWORD g_dwExpectedDispInfoMask;
 static BOOL g_ResetDispTextPtr;
+static BOOL g_TestCheckedItemPrePaint;
 
 static const struct message ttgetdispinfo_parent_seq[] = {
     { WM_NOTIFY, sent|id, 0, 0, TBN_GETINFOTIPA },
@@ -348,6 +349,28 @@ static LRESULT parent_wnd_notify(LPARAM lParam)
             }
             return 0;
         }
+        case NM_CUSTOMDRAW:
+        {
+            NMTBCUSTOMDRAW *cd = (NMTBCUSTOMDRAW *)lParam;
+
+            switch (cd->nmcd.dwDrawStage)
+            {
+            case CDDS_PREPAINT:
+                return CDRF_NOTIFYITEMDRAW;
+            case CDDS_ITEMPREPAINT:
+            {
+                if (g_TestCheckedItemPrePaint)
+                {
+                    cd->clrBtnHighlight = RGB(0xff, 0, 0);
+                    cd->clrBtnFace = RGB(0xff, 0, 0);
+                    return TBCDRF_NOBACKGROUND;
+                }
+                return CDRF_DODEFAULT;
+            }
+            }
+
+            return 0;
+        }
     }
     return 0;
 }
@@ -2617,34 +2640,49 @@ static void test_visual(void)
     HDC mem_dc1, mem_dc2, toolbar_dc;
     TBBUTTON tbbutton;
     int width, height;
+    COLORREF color;
     HTHEME theme;
     HWND toolbar;
     RECT rect;
     BOOL ret;
 
-    if (!is_theme_active)
-    {
-        skip("Theming is not active, skipping visual tests.\n");
-        return;
-    }
-
-    /* Test that toolbar shouldn't use outside theme handles */
     toolbar = CreateWindowA(TOOLBARCLASSNAMEA, "", WS_CHILD | WS_VISIBLE, 0, 0, 50, 50, hMainWnd, 0, 0, NULL);
     ok(!!toolbar, "Failed to create a toolbar window.\n");
 
-    /* Toolbar needs data for it to show */
+    /* Test that the comctl32 55AA pattern brush is not used to draw checked background when theming is on */
     memset(&tbbutton, 0, sizeof(tbbutton));
-    tbbutton.fsState = TBSTATE_ENABLED;
-    tbbutton.iString = (INT_PTR)"test";
+    tbbutton.idCommand = 1000;
+    tbbutton.fsState = TBSTATE_ENABLED | TBSTATE_CHECKED;
+    tbbutton.iString = (INT_PTR)" ";
     SendMessageA(toolbar, TB_BUTTONSTRUCTSIZE, sizeof(tbbutton), 0);
     ret = SendMessageA(toolbar, TB_ADDBUTTONSA, 1, (LPARAM)&tbbutton);
     ok(ret, "TB_ADDBUTTONSA failed.\n");
     flush_events();
+    g_TestCheckedItemPrePaint = TRUE;
+    ret = RedrawWindow(toolbar, NULL, NULL, RDW_FRAME | RDW_INVALIDATE | RDW_ERASE | RDW_ERASENOW | RDW_UPDATENOW);
+    ok(ret, "RedrawWindow failed.\n");
+    g_TestCheckedItemPrePaint = FALSE;
+
+    toolbar_dc = GetDC(toolbar);
+    color = GetPixel(toolbar_dc, 5, 5);
+    if (is_theme_active)
+        todo_wine
+        ok(color != RGB(0xff, 0, 0), "Unexpected color %#lx.\n", color);
+    else
+        ok(color == RGB(0xff, 0, 0), "Unexpected color %#lx.\n", color);
 
+    if (!is_theme_active)
+    {
+        skip("Theming is not active, skipping the rest of visual tests.\n");
+        ReleaseDC(toolbar, toolbar_dc);
+        DestroyWindow(toolbar);
+        return;
+    }
+
+    /* Test that toolbar shouldn't use outside theme handles */
     theme = pGetWindowTheme(toolbar);
     ok(!theme, "Expected theme not opened by window.\n");
 
-    toolbar_dc = GetDC(toolbar);
     GetClientRect(toolbar, &rect);
     width = rect.right - rect.left;
     height = rect.bottom - rect.top;
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/288



More information about the wine-devel mailing list