From 838a1ea09d71228b5d52e9e398b3a4a8789da7dd Mon Sep 17 00:00:00 2001 From: Robert Shearman Date: Thu, 18 Mar 2004 04:01:02 +0000 Subject: [PATCH] - Fix SetBitmapSize. - Fix SetButtonInfo. --- dlls/comctl32/toolbar.c | 57 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c index 8181dfb6d67..cdc2058eeb4 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -65,7 +65,6 @@ * - TBN_TOOLBARCHANGE * - Button wrapping (under construction). * - Fix TB_SETROWS. - * - Fix TOOLBAR_SetButtonInfo32A/W. * - iListGap custom draw support. * - Customization dialog: * - Minor buglet in 'available buttons' list: @@ -94,7 +93,6 @@ #include "wine/unicode.h" #include "winnls.h" #include "commctrl.h" -#include "imagelist.h" #include "comctl32.h" #include "wine/debug.h" @@ -108,10 +106,10 @@ typedef struct BYTE fsStyle; DWORD dwData; INT iString; - BOOL bHot; INT nRow; RECT rect; + INT cx; /* manually set size */ } TBUTTON_INFO; typedef struct @@ -1506,7 +1504,9 @@ TOOLBAR_CalcToolbar (HWND hwnd) } else { - if ((infoPtr->dwExStyle & TBSTYLE_EX_MIXEDBUTTONS) || + if (btnPtr->cx) + cx = btnPtr->cx; + else if ((infoPtr->dwExStyle & TBSTYLE_EX_MIXEDBUTTONS) || (btnPtr->fsStyle & BTNS_AUTOSIZE)) { SIZE sz; @@ -1541,7 +1541,10 @@ TOOLBAR_CalcToolbar (HWND hwnd) else cx = infoPtr->nButtonWidth; - if ((hasDropDownArrows && (btnPtr->fsStyle & BTNS_DROPDOWN)) || (btnPtr->fsStyle & BTNS_WHOLEDROPDOWN)) + /* if size has been set manually then don't add on extra space + * for the drop down arrow */ + if (!btnPtr->cx && hasDropDownArrows && + ((btnPtr->fsStyle & BTNS_DROPDOWN) || (btnPtr->fsStyle & BTNS_WHOLEDROPDOWN))) cx += DDARROW_WIDTH; } if (btnPtr->fsState & TBSTATE_WRAP ) @@ -4159,6 +4162,11 @@ TOOLBAR_SetBitmapSize (HWND hwnd, WPARAM wParam, LPARAM lParam) TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd); HIMAGELIST himlDef = GETDEFIMAGELIST(infoPtr, 0); + TRACE("hwnd=%p, wParam=%d, lParam=%ld\n", hwnd, wParam, lParam); + + if (wParam != 0) + FIXME("wParam is %d. Perhaps image list index?\n", wParam); + if ((LOWORD(lParam) <= 0) || (HIWORD(lParam)<=0)) return FALSE; @@ -4172,10 +4180,11 @@ TOOLBAR_SetBitmapSize (HWND hwnd, WPARAM wParam, LPARAM lParam) infoPtr->nBitmapHeight = (INT)HIWORD(lParam); - /* uses image list internals directly */ - if (himlDef) { - himlDef->cx = infoPtr->nBitmapWidth; - himlDef->cy = infoPtr->nBitmapHeight; + if ((himlDef == infoPtr->himlInt) && + (ImageList_GetImageCount(infoPtr->himlInt) == 0)) + { + ImageList_SetIconSize(infoPtr->himlInt, infoPtr->nBitmapWidth, + infoPtr->nBitmapHeight); } return TRUE; @@ -4189,6 +4198,7 @@ TOOLBAR_SetButtonInfoA (HWND hwnd, WPARAM wParam, LPARAM lParam) LPTBBUTTONINFOA lptbbi = (LPTBBUTTONINFOA)lParam; TBUTTON_INFO *btnPtr; INT nIndex; + RECT oldBtnRect; if (lptbbi == NULL) return FALSE; @@ -4207,8 +4217,8 @@ TOOLBAR_SetButtonInfoA (HWND hwnd, WPARAM wParam, LPARAM lParam) btnPtr->iBitmap = lptbbi->iImage; if (lptbbi->dwMask & TBIF_LPARAM) btnPtr->dwData = lptbbi->lParam; -/* if (lptbbi->dwMask & TBIF_SIZE) */ -/* btnPtr->cx = lptbbi->cx; */ + if (lptbbi->dwMask & TBIF_SIZE) + btnPtr->cx = lptbbi->cx; if (lptbbi->dwMask & TBIF_STATE) btnPtr->fsState = lptbbi->fsState; if (lptbbi->dwMask & TBIF_STYLE) @@ -4221,6 +4231,16 @@ TOOLBAR_SetButtonInfoA (HWND hwnd, WPARAM wParam, LPARAM lParam) Str_SetPtrAtoW ((LPWSTR *)&btnPtr->iString, lptbbi->pszText); } + + /* save the button rect to see if we need to redraw the whole toolbar */ + oldBtnRect = btnPtr->rect; + TOOLBAR_CalcToolbar(hwnd); + + if (!EqualRect(&oldBtnRect, &btnPtr->rect)) + InvalidateRect(hwnd, NULL, TRUE); + else + InvalidateRect(hwnd, &btnPtr->rect, TRUE); + return TRUE; } @@ -4232,6 +4252,7 @@ TOOLBAR_SetButtonInfoW (HWND hwnd, WPARAM wParam, LPARAM lParam) LPTBBUTTONINFOW lptbbi = (LPTBBUTTONINFOW)lParam; TBUTTON_INFO *btnPtr; INT nIndex; + RECT oldBtnRect; if (lptbbi == NULL) return FALSE; @@ -4250,8 +4271,8 @@ TOOLBAR_SetButtonInfoW (HWND hwnd, WPARAM wParam, LPARAM lParam) btnPtr->iBitmap = lptbbi->iImage; if (lptbbi->dwMask & TBIF_LPARAM) btnPtr->dwData = lptbbi->lParam; -/* if (lptbbi->dwMask & TBIF_SIZE) */ -/* btnPtr->cx = lptbbi->cx; */ + if (lptbbi->dwMask & TBIF_SIZE) + btnPtr->cx = lptbbi->cx; if (lptbbi->dwMask & TBIF_STATE) btnPtr->fsState = lptbbi->fsState; if (lptbbi->dwMask & TBIF_STYLE) @@ -4263,6 +4284,16 @@ TOOLBAR_SetButtonInfoW (HWND hwnd, WPARAM wParam, LPARAM lParam) btnPtr->iString=0; Str_SetPtrW ((LPWSTR *)&btnPtr->iString, lptbbi->pszText); } + + /* save the button rect to see if we need to redraw the whole toolbar */ + oldBtnRect = btnPtr->rect; + TOOLBAR_CalcToolbar(hwnd); + + if (!EqualRect(&oldBtnRect, &btnPtr->rect)) + InvalidateRect(hwnd, NULL, TRUE); + else + InvalidateRect(hwnd, &btnPtr->rect, TRUE); + return TRUE; } -- 2.11.4.GIT