From: Ziqing Hui Subject: [PATCH 1/2] comctl32/tests: Add test for disabled toolbar button. Message-Id: <70388aee-0a41-a151-d244-1bf6ed96ae89@codeweavers.com> Date: Mon, 10 Sep 2018 14:03:22 +0800 Signed-off-by: Ziqing Hui --- dlls/comctl32/tests/toolbar.c | 103 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/dlls/comctl32/tests/toolbar.c b/dlls/comctl32/tests/toolbar.c index 4180725..0326243 100644 --- a/dlls/comctl32/tests/toolbar.c +++ b/dlls/comctl32/tests/toolbar.c @@ -43,6 +43,7 @@ static BOOL (WINAPI *pImageList_Destroy)(HIMAGELIST); static INT (WINAPI *pImageList_GetImageCount)(HIMAGELIST); static BOOL (WINAPI *pImageList_GetIconSize)(HIMAGELIST, int *, int *); static HIMAGELIST (WINAPI *pImageList_LoadImageA)(HINSTANCE, LPCSTR, int, int, COLORREF, UINT, UINT); +static HIMAGELIST (WINAPI *pImageList_Create)(int, int, UINT, int, int); static struct msg_sequence *sequences[NUM_MSG_SEQUENCES]; @@ -942,6 +943,106 @@ static void test_hotitem(void) DestroyWindow(hToolbar); } +#define is_gray(color) (GetRValue(color) == GetGValue(color) && GetGValue(color) == GetBValue(color)) + +static HWND create_one_button_toolbar(HINSTANCE hInst, LPCSTR name, UINT size, COLORREF mask_color, int bitmap_index) +{ + HWND hToolbar; + HIMAGELIST himl; + TBBUTTON btn; + + hToolbar = CreateWindowExA(0, TOOLBARCLASSNAMEA, NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT, + 0, 0, 0, 0, hMainWnd, 0, GetModuleHandleA(NULL), NULL); + SendMessageA(hToolbar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); + if (hInst == HINST_COMMCTRL) { + himl = pImageList_Create(size, size, ILC_MASK | ILC_COLOR32, 1, 0); + SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl); + SendMessageA(hToolbar, TB_LOADIMAGES, (WPARAM)name, (LPARAM)HINST_COMMCTRL); + } else { + himl = pImageList_LoadImageA(hInst, name, size, 0, mask_color, IMAGE_BITMAP, LR_CREATEDIBSECTION); + SendMessageA(hToolbar, TB_SETIMAGELIST, 0, (LPARAM)himl); + } + + btn.iBitmap = bitmap_index; + btn.idCommand = 0; + btn.fsState = TBSTATE_ENABLED; + btn.fsStyle = BTNS_AUTOSIZE; + btn.dwData = 0; + btn.iString = (INT_PTR)NULL; + SendMessageA(hToolbar, TB_ADDBUTTONSA, 1, (LPARAM)&btn); + SendMessageA(hToolbar, TB_AUTOSIZE, 0, 0); + ShowWindow(hToolbar, SW_SHOW); + UpdateWindow(hToolbar); + return hToolbar; +} + +static void check_disabled_button_pixels(UINT size, HWND hToolbar) +{ + const COLORREF WINXP_GRAY = RGB(0xac, 0xa8, 0x99); + HDC hdc; + int x, y; + COLORREF bitmap[64][64]; + BOOL correct_draw; + COLORREF pixel; + + hdc = GetDC(hToolbar); + for (y = 0; y < size * 2; y++) + { + for (x = 0; x < size * 2; x++) + { + bitmap[x][y] = GetPixel(hdc, x, y); + } + } + + SendMessageA(hToolbar, TB_ENABLEBUTTON, 0, (LPARAM)FALSE); + UpdateWindow(hToolbar); + correct_draw = TRUE; + for (y = 0; y < size * 2; y++) + { + for (x = 0; x < size * 2; x++) + { + pixel = GetPixel(hdc, x, y); + switch(bitmap[x][y]) + { + case CLR_INVALID: + break; + case RGB(255, 255, 255): + /* transparent pixel */ + if (pixel != RGB(255, 255, 255)) { + correct_draw = FALSE; + goto check_end; + } + break; + default: + /* other colors, should be gray */ + if ((!is_gray(pixel) | (pixel == RGB(255, 255, 255))) + && pixel != WINXP_GRAY ) { /* gray color is different on winxp */ + correct_draw = FALSE; + goto check_end; + } + break; + } + + } + } + +check_end: + ok(correct_draw, "Disabled button is drawn unexpectedly\n"); +} + +static void test_disabled(void) +{ + HWND hToolbar = NULL; + + hToolbar = create_one_button_toolbar(HINST_COMMCTRL, MAKEINTRESOURCEA(IDB_STD_SMALL_COLOR), 16, CLR_NONE, STD_HELP); + check_disabled_button_pixels(16, hToolbar); + DestroyWindow(hToolbar); + + hToolbar = create_one_button_toolbar(HINST_COMMCTRL,MAKEINTRESOURCEA( IDB_STD_LARGE_COLOR), 24, CLR_NONE, STD_HELP); + check_disabled_button_pixels(24, hToolbar); + DestroyWindow(hToolbar); +} + #if 0 /* use this to generate more tests*/ static void dump_sizes(HWND hToolbar) @@ -2523,6 +2624,7 @@ static void init_functions(void) X(ImageList_GetImageCount); X(ImageList_LoadImageA); X(ImageList_Destroy); + X(ImageList_Create); #undef X } @@ -2556,6 +2658,7 @@ START_TEST(toolbar) test_add_bitmap(); test_add_string(); test_hotitem(); + todo_wine test_disabled(); test_sizes(); test_recalc(); test_getbuttoninfo();