Module: wine Branch: master Commit: a8a0a655153a9d835f2482ead564b72463ac1726 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a8a0a655153a9d835f2482ead5...
Author: Mikołaj Zalewski mikolaj@zalewski.pl Date: Wed Nov 1 23:00:35 2006 +0100
comctl32: toolbar: Add a LayoutToolbar that works like CalcToolbar but doesn't overwrite the button sizes.
---
dlls/comctl32/toolbar.c | 59 +++++++++++++++++++++++++++++++--------------- 1 files changed, 40 insertions(+), 19 deletions(-)
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c index 22ba6c9..99c329e 100644 --- a/dlls/comctl32/toolbar.c +++ b/dlls/comctl32/toolbar.c @@ -247,6 +247,7 @@ static VOID TOOLBAR_DeleteImageList(PIML static HIMAGELIST TOOLBAR_InsertImageList(PIMLENTRY **pies, INT *cies, HIMAGELIST himl, INT id); static LRESULT TOOLBAR_LButtonDown(HWND hwnd, WPARAM wParam, LPARAM lParam); static void TOOLBAR_SetHotItemEx (TOOLBAR_INFO *infoPtr, INT nHit, DWORD dwReason); +static void TOOLBAR_LayoutToolbar(HWND hwnd); static LRESULT TOOLBAR_AutoSize(HWND hwnd); static void TOOLBAR_CheckImageListIconSize(TOOLBAR_INFO *infoPtr); static void TOOLBAR_TooltipSetRect(TOOLBAR_INFO *infoPtr, TBUTTON_INFO *button); @@ -1615,14 +1616,8 @@ static void TOOLBAR_CalcToolbar (HWND hwnd) { TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(hwnd); - DWORD dwStyle = infoPtr->dwStyle; - TBUTTON_INFO *btnPtr; - INT i, nRows, nSepRows; - INT x, y, cx, cy; SIZE sizeString, sizeButton; - BOOL bWrap; BOOL validImageList = FALSE; - BOOL hasDropDownArrows = TOOLBAR_HasDropDownArrows(infoPtr->dwExStyle);
TOOLBAR_CalcStrings (hwnd, &sizeString);
@@ -1639,15 +1634,25 @@ TOOLBAR_CalcToolbar (HWND hwnd) if ( infoPtr->cxMax > 0 && infoPtr->nButtonWidth > infoPtr->cxMax ) infoPtr->nButtonWidth = infoPtr->cxMax;
- TOOLBAR_WrapToolbar( hwnd, dwStyle ); + TOOLBAR_LayoutToolbar(hwnd); +}
- x = infoPtr->nIndent; - if (infoPtr->dwStyle & TBSTYLE_FLAT) - y = 0; - else - y = TOP_BORDER; +static void +TOOLBAR_LayoutToolbar(HWND hwnd) +{ + TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr(hwnd); + TBUTTON_INFO *btnPtr; + SIZE sizeButton; + INT i, nRows, nSepRows; + INT x, y, cx, cy; + BOOL bWrap; + BOOL validImageList = TOOLBAR_IsValidImageList(infoPtr, 0); + BOOL hasDropDownArrows = TOOLBAR_HasDropDownArrows(infoPtr->dwExStyle); + + TOOLBAR_WrapToolbar(hwnd, infoPtr->dwStyle);
- /* from above, minimum is a button, and possible text */ + x = infoPtr->nIndent; + y = (infoPtr->dwStyle & TBSTYLE_FLAT ? 0 : TOP_BORDER); cx = infoPtr->nButtonWidth; cy = infoPtr->nButtonHeight;
@@ -2867,6 +2872,7 @@ TOOLBAR_AddButtonsT(HWND hwnd, WPARAM wP TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd); LPTBBUTTON lpTbb = (LPTBBUTTON)lParam; INT nOldButtons, nNewButtons, nAddButtons, nCount; + BOOL fHasString = FALSE;
TRACE("adding %d buttons (unicode=%d)!\n", wParam, fUnicode);
@@ -2892,6 +2898,7 @@ TOOLBAR_AddButtonsT(HWND hwnd, WPARAM wP Str_SetPtrW ((LPWSTR*)&btnPtr->iString, (LPWSTR)lpTbb[nCount].iString ); else Str_SetPtrAtoW((LPWSTR*)&btnPtr->iString, (LPSTR)lpTbb[nCount].iString); + fHasString = TRUE; } else btnPtr->iString = lpTbb[nCount].iString; @@ -2899,7 +2906,10 @@ TOOLBAR_AddButtonsT(HWND hwnd, WPARAM wP TOOLBAR_TooltipAddTool(infoPtr, btnPtr); }
- TOOLBAR_CalcToolbar (hwnd); + if (infoPtr->nNumStrings > 0 || fHasString) + TOOLBAR_CalcToolbar(hwnd); + else + TOOLBAR_LayoutToolbar(hwnd); TOOLBAR_AutoSize (hwnd);
TOOLBAR_DumpToolbar (infoPtr, __LINE__); @@ -2915,6 +2925,7 @@ TOOLBAR_AddStringW (HWND hwnd, WPARAM wP { #define MAX_RESOURCE_STRING_LENGTH 512 TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd); + BOOL fFirstString = (infoPtr->nNumStrings == 0); INT nIndex = infoPtr->nNumStrings;
if ((wParam) && (HIWORD(lParam) == 0)) { @@ -2971,6 +2982,8 @@ #define MAX_RESOURCE_STRING_LENGTH 512 } }
+ if (fFirstString) + TOOLBAR_CalcToolbar(hwnd); return nIndex; }
@@ -2979,6 +2992,7 @@ static LRESULT TOOLBAR_AddStringA (HWND hwnd, WPARAM wParam, LPARAM lParam) { TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd); + BOOL fFirstString = (infoPtr->nNumStrings == 0); LPSTR p; INT nIndex; INT len; @@ -3003,6 +3017,8 @@ TOOLBAR_AddStringA (HWND hwnd, WPARAM wP p += (len+1); }
+ if (fFirstString) + TOOLBAR_CalcToolbar(hwnd); return nIndex; }
@@ -3035,7 +3051,7 @@ TOOLBAR_AutoSize (HWND hwnd)
if ((infoPtr->dwStyle & TBSTYLE_WRAPABLE) || (infoPtr->dwExStyle & TBSTYLE_EX_UNDOC1)) { - TOOLBAR_CalcToolbar(hwnd); + TOOLBAR_LayoutToolbar(hwnd); InvalidateRect( hwnd, NULL, TRUE ); }
@@ -3261,7 +3277,7 @@ TOOLBAR_DeleteButton (HWND hwnd, WPARAM Free (oldButtons); }
- TOOLBAR_CalcToolbar (hwnd); + TOOLBAR_LayoutToolbar(hwnd);
InvalidateRect (hwnd, NULL, TRUE);
@@ -3864,7 +3880,10 @@ TOOLBAR_InsertButtonT(HWND hwnd, WPARAM
TOOLBAR_TooltipAddTool(infoPtr, &infoPtr->buttons[nIndex]);
- TOOLBAR_CalcToolbar (hwnd); + if (infoPtr->nNumStrings > 0) + TOOLBAR_CalcToolbar(hwnd); + else + TOOLBAR_LayoutToolbar(hwnd); TOOLBAR_AutoSize (hwnd);
InvalidateRect (hwnd, NULL, TRUE); @@ -4483,6 +4502,7 @@ TOOLBAR_SetBitmapSize (HWND hwnd, WPARAM infoPtr->nBitmapHeight); }
+ TOOLBAR_CalcToolbar(hwnd); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); return TRUE; } @@ -5387,8 +5407,6 @@ TOOLBAR_Create (HWND hwnd, WPARAM wParam
TOOLBAR_CheckStyle (hwnd, dwStyle);
- TOOLBAR_CalcToolbar(hwnd); - return 0; }
@@ -6589,6 +6607,9 @@ TOOLBAR_StyleChanged (HWND hwnd, INT nTy
infoPtr->dwStyle = lpStyle->styleNew;
+ if ((dwOldStyle ^ lpStyle->styleNew) & (TBSTYLE_WRAPABLE | CCS_VERT)) + TOOLBAR_LayoutToolbar(hwnd); + /* only resize if one of the CCS_* styles was changed */ if ((dwOldStyle ^ lpStyle->styleNew) & COMMON_STYLES) {