Added handling of TBSTYLE_AUTOSIZE.
This commit is contained in:
parent
c94e086161
commit
d9ac53f15a
@ -46,6 +46,15 @@ DEFAULT_DEBUG_CHANNEL(toolbar)
|
|||||||
|
|
||||||
#define TOOLBAR_GetInfoPtr(hwnd) ((TOOLBAR_INFO *)GetWindowLongA(hwnd,0))
|
#define TOOLBAR_GetInfoPtr(hwnd) ((TOOLBAR_INFO *)GetWindowLongA(hwnd,0))
|
||||||
|
|
||||||
|
static BOOL
|
||||||
|
TOOLBAR_IsValidBitmapIndex(TOOLBAR_INFO *infoPtr, INT index)
|
||||||
|
{
|
||||||
|
if ((index>=0) && (index < infoPtr->nNumBitmaps))
|
||||||
|
return TRUE;
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
TOOLBAR_DrawFlatSeparator (LPRECT lpRect, HDC hdc)
|
TOOLBAR_DrawFlatSeparator (LPRECT lpRect, HDC hdc)
|
||||||
@ -96,7 +105,7 @@ TOOLBAR_DrawString (TOOLBAR_INFO *infoPtr, TBUTTON_INFO *btnPtr,
|
|||||||
|
|
||||||
InflateRect (&rcText, -3, -3);
|
InflateRect (&rcText, -3, -3);
|
||||||
|
|
||||||
if (himl && btnPtr->iBitmap>=0) {
|
if (himl && TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap)) {
|
||||||
if ((dwStyle & TBSTYLE_LIST) &&
|
if ((dwStyle & TBSTYLE_LIST) &&
|
||||||
((btnPtr->fsStyle & TBSTYLE_AUTOSIZE) == 0) &&
|
((btnPtr->fsStyle & TBSTYLE_AUTOSIZE) == 0) &&
|
||||||
(btnPtr->iBitmap != I_IMAGENONE)) {
|
(btnPtr->iBitmap != I_IMAGENONE)) {
|
||||||
@ -228,7 +237,8 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc)
|
|||||||
DrawEdge (hdc, &rc, EDGE_RAISED,
|
DrawEdge (hdc, &rc, EDGE_RAISED,
|
||||||
BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
|
BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
|
||||||
|
|
||||||
if (infoPtr->himlDis && btnPtr->iBitmap>=0)
|
if (infoPtr->himlDis &&
|
||||||
|
TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap))
|
||||||
ImageList_Draw (infoPtr->himlDis, btnPtr->iBitmap, hdc,
|
ImageList_Draw (infoPtr->himlDis, btnPtr->iBitmap, hdc,
|
||||||
rc.left+1, rc.top+1, ILD_NORMAL);
|
rc.left+1, rc.top+1, ILD_NORMAL);
|
||||||
else
|
else
|
||||||
@ -245,7 +255,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc)
|
|||||||
DrawEdge (hdc, &rc, BDR_SUNKENOUTER, BF_RECT | BF_MIDDLE | BF_ADJUST);
|
DrawEdge (hdc, &rc, BDR_SUNKENOUTER, BF_RECT | BF_MIDDLE | BF_ADJUST);
|
||||||
else
|
else
|
||||||
DrawEdge (hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_MIDDLE | BF_ADJUST);
|
DrawEdge (hdc, &rc, EDGE_SUNKEN, BF_RECT | BF_MIDDLE | BF_ADJUST);
|
||||||
if (btnPtr->iBitmap>=0)
|
if (TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap))
|
||||||
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
||||||
rc.left+2, rc.top+2, ILD_NORMAL);
|
rc.left+2, rc.top+2, ILD_NORMAL);
|
||||||
TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState, dwStyle,
|
TOOLBAR_DrawString (infoPtr, btnPtr, hdc, btnPtr->fsState, dwStyle,
|
||||||
@ -265,7 +275,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc)
|
|||||||
|
|
||||||
TOOLBAR_DrawPattern (hdc, &rc);
|
TOOLBAR_DrawPattern (hdc, &rc);
|
||||||
|
|
||||||
if (btnPtr->iBitmap>=0)
|
if (TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap))
|
||||||
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
||||||
rc.left+2, rc.top+2, ILD_NORMAL);
|
rc.left+2, rc.top+2, ILD_NORMAL);
|
||||||
|
|
||||||
@ -291,10 +301,11 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc)
|
|||||||
{
|
{
|
||||||
if (btnPtr->bHot)
|
if (btnPtr->bHot)
|
||||||
DrawEdge (hdc, &rc, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
|
DrawEdge (hdc, &rc, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
|
||||||
if (btnPtr->bHot && infoPtr->himlHot && btnPtr->iBitmap>=0)
|
if (btnPtr->bHot && infoPtr->himlHot &&
|
||||||
|
TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap))
|
||||||
ImageList_Draw (infoPtr->himlHot, btnPtr->iBitmap, hdc,
|
ImageList_Draw (infoPtr->himlHot, btnPtr->iBitmap, hdc,
|
||||||
rc.left +2, rc.top +2, ILD_NORMAL);
|
rc.left +2, rc.top +2, ILD_NORMAL);
|
||||||
else if (btnPtr->iBitmap>=0)
|
else if (TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap))
|
||||||
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
||||||
rc.left +2, rc.top +2, ILD_NORMAL);
|
rc.left +2, rc.top +2, ILD_NORMAL);
|
||||||
}
|
}
|
||||||
@ -303,7 +314,7 @@ TOOLBAR_DrawButton (HWND hwnd, TBUTTON_INFO *btnPtr, HDC hdc)
|
|||||||
DrawEdge (hdc, &rc, EDGE_RAISED,
|
DrawEdge (hdc, &rc, EDGE_RAISED,
|
||||||
BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
|
BF_SOFT | BF_RECT | BF_MIDDLE | BF_ADJUST);
|
||||||
|
|
||||||
if (btnPtr->iBitmap>=0)
|
if (TOOLBAR_IsValidBitmapIndex(infoPtr,btnPtr->iBitmap))
|
||||||
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
ImageList_Draw (infoPtr->himlDef, btnPtr->iBitmap, hdc,
|
||||||
rc.left+1, rc.top+1, ILD_NORMAL);
|
rc.left+1, rc.top+1, ILD_NORMAL);
|
||||||
}
|
}
|
||||||
@ -330,6 +341,34 @@ TOOLBAR_Refresh (HWND hwnd, HDC hdc, PAINTSTRUCT* ps)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
TOOLBAR_MeasureString(HWND hwnd, INT index, LPSIZE lpSize)
|
||||||
|
{
|
||||||
|
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
|
||||||
|
TBUTTON_INFO *btnPtr;
|
||||||
|
HDC hdc;
|
||||||
|
HFONT hOldFont;
|
||||||
|
|
||||||
|
lpSize->cx = 0;
|
||||||
|
lpSize->cy = 0;
|
||||||
|
hdc = GetDC (0);
|
||||||
|
hOldFont = SelectObject (hdc, infoPtr->hFont);
|
||||||
|
|
||||||
|
btnPtr = &infoPtr->buttons[index];
|
||||||
|
|
||||||
|
if (!(btnPtr->fsState & TBSTATE_HIDDEN) &&
|
||||||
|
(btnPtr->iString > -1) &&
|
||||||
|
(btnPtr->iString < infoPtr->nNumStrings))
|
||||||
|
{
|
||||||
|
LPWSTR lpText = infoPtr->strings[btnPtr->iString];
|
||||||
|
GetTextExtentPoint32W (hdc, lpText, lstrlenW (lpText), lpSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectObject (hdc, hOldFont);
|
||||||
|
ReleaseDC (0, hdc);
|
||||||
|
|
||||||
|
TRACE("string size %d x %d!\n", lpSize->cx, lpSize->cy);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
TOOLBAR_CalcStrings (HWND hwnd, LPSIZE lpSize)
|
TOOLBAR_CalcStrings (HWND hwnd, LPSIZE lpSize)
|
||||||
@ -337,39 +376,21 @@ TOOLBAR_CalcStrings (HWND hwnd, LPSIZE lpSize)
|
|||||||
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
|
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
|
||||||
TBUTTON_INFO *btnPtr;
|
TBUTTON_INFO *btnPtr;
|
||||||
INT i;
|
INT i;
|
||||||
HDC hdc;
|
|
||||||
HFONT hOldFont;
|
|
||||||
SIZE sz;
|
SIZE sz;
|
||||||
LPWSTR lpText = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
lpSize->cx = 0;
|
lpSize->cx = 0;
|
||||||
lpSize->cy = 0;
|
lpSize->cy = 0;
|
||||||
hdc = GetDC (0);
|
|
||||||
hOldFont = SelectObject (hdc, infoPtr->hFont);
|
|
||||||
|
|
||||||
btnPtr = infoPtr->buttons;
|
btnPtr = infoPtr->buttons;
|
||||||
for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++) {
|
for (i = 0; i < infoPtr->nNumButtons; i++, btnPtr++) {
|
||||||
if (!(btnPtr->fsState & TBSTATE_HIDDEN) &&
|
TOOLBAR_MeasureString(hwnd,i,&sz);
|
||||||
(btnPtr->iString > -1) &&
|
if (sz.cx > lpSize->cx)
|
||||||
(btnPtr->iString < infoPtr->nNumStrings)) {
|
lpSize->cx = sz.cx;
|
||||||
/* get a pointer to the text */
|
if (sz.cy > lpSize->cy)
|
||||||
if (HIWORD(btnPtr->iString) != 0)
|
lpSize->cy = sz.cy;
|
||||||
lpText = (LPWSTR)btnPtr->iString;
|
|
||||||
else if ((btnPtr->iString >= 0) && (btnPtr->iString < infoPtr->nNumStrings))
|
|
||||||
lpText = infoPtr->strings[btnPtr->iString];
|
|
||||||
|
|
||||||
GetTextExtentPoint32W (hdc, lpText, lstrlenW (lpText), &sz);
|
|
||||||
if (sz.cx > lpSize->cx)
|
|
||||||
lpSize->cx = sz.cx;
|
|
||||||
if (sz.cy > lpSize->cy)
|
|
||||||
lpSize->cy = sz.cy;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectObject (hdc, hOldFont);
|
|
||||||
ReleaseDC (0, hdc);
|
|
||||||
|
|
||||||
TRACE("string size %d x %d!\n", lpSize->cx, lpSize->cy);
|
TRACE("string size %d x %d!\n", lpSize->cx, lpSize->cy);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -556,7 +577,7 @@ TOOLBAR_CalcToolbar (HWND hwnd)
|
|||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
for (i = 0; i < infoPtr->nNumButtons && !usesBitmaps; i++)
|
for (i = 0; i < infoPtr->nNumButtons && !usesBitmaps; i++)
|
||||||
if (infoPtr->buttons[i].iBitmap >=0)
|
if (TOOLBAR_IsValidBitmapIndex(infoPtr,infoPtr->buttons[i].iBitmap))
|
||||||
usesBitmaps = TRUE;
|
usesBitmaps = TRUE;
|
||||||
|
|
||||||
if (sizeString.cy > 0) {
|
if (sizeString.cy > 0) {
|
||||||
@ -633,7 +654,14 @@ TOOLBAR_CalcToolbar (HWND hwnd)
|
|||||||
cx = (btnPtr->iBitmap > 0) ?
|
cx = (btnPtr->iBitmap > 0) ?
|
||||||
btnPtr->iBitmap : SEPARATOR_WIDTH;
|
btnPtr->iBitmap : SEPARATOR_WIDTH;
|
||||||
else {
|
else {
|
||||||
cx = infoPtr->nButtonWidth;
|
if (btnPtr->fsStyle & TBSTYLE_AUTOSIZE)
|
||||||
|
{
|
||||||
|
SIZE sz;
|
||||||
|
TOOLBAR_MeasureString(hwnd,i,&sz);
|
||||||
|
cx = sz.cx + 6;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
cx = infoPtr->nButtonWidth;
|
||||||
}
|
}
|
||||||
cy = infoPtr->nHeight;
|
cy = infoPtr->nHeight;
|
||||||
|
|
||||||
@ -986,7 +1014,7 @@ TOOLBAR_AddBitmap (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
{
|
{
|
||||||
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
|
TOOLBAR_INFO *infoPtr = TOOLBAR_GetInfoPtr (hwnd);
|
||||||
LPTBADDBITMAP lpAddBmp = (LPTBADDBITMAP)lParam;
|
LPTBADDBITMAP lpAddBmp = (LPTBADDBITMAP)lParam;
|
||||||
INT nIndex = 0, nButtons;
|
INT nIndex = 0, nButtons, nCount;
|
||||||
HBITMAP hbmLoad;
|
HBITMAP hbmLoad;
|
||||||
|
|
||||||
if (!lpAddBmp)
|
if (!lpAddBmp)
|
||||||
@ -1044,6 +1072,8 @@ TOOLBAR_AddBitmap (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
infoPtr->himlInt = infoPtr->himlDef;
|
infoPtr->himlInt = infoPtr->himlDef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nCount = ImageList_GetImageCount(infoPtr->himlDef);
|
||||||
|
|
||||||
/* Add bitmaps to the default image list */
|
/* Add bitmaps to the default image list */
|
||||||
if (lpAddBmp->hInst == (HINSTANCE)0)
|
if (lpAddBmp->hInst == (HINSTANCE)0)
|
||||||
{
|
{
|
||||||
@ -1117,7 +1147,21 @@ TOOLBAR_AddBitmap (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
DeleteObject (hbmLoad);
|
DeleteObject (hbmLoad);
|
||||||
}
|
}
|
||||||
|
|
||||||
infoPtr->nNumBitmaps += nButtons;
|
if (nIndex != -1)
|
||||||
|
{
|
||||||
|
INT imagecount = ImageList_GetImageCount(infoPtr->himlDef);
|
||||||
|
|
||||||
|
if (infoPtr->nNumBitmaps + nButtons != imagecount)
|
||||||
|
{
|
||||||
|
WARN("Desired images do not match recieved images : Previous image number %s Previous images in list %i added %i expecting total %i, Images in list %i\n",
|
||||||
|
infoPtr->nNumBitmaps, nCount, imagecount - nCount,
|
||||||
|
infoPtr->nNumBitmaps+nButtons,imagecount);
|
||||||
|
|
||||||
|
infoPtr->nNumBitmaps = imagecount;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
infoPtr->nNumBitmaps += nButtons;
|
||||||
|
}
|
||||||
|
|
||||||
return nIndex;
|
return nIndex;
|
||||||
}
|
}
|
||||||
@ -2817,6 +2861,7 @@ TOOLBAR_SetImageList (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
himlTemp = infoPtr->himlDef;
|
himlTemp = infoPtr->himlDef;
|
||||||
infoPtr->himlDef = (HIMAGELIST)lParam;
|
infoPtr->himlDef = (HIMAGELIST)lParam;
|
||||||
|
|
||||||
|
infoPtr->nNumBitmaps = ImageList_GetImageCount(infoPtr->himlDef);
|
||||||
/* FIXME: redraw ? */
|
/* FIXME: redraw ? */
|
||||||
|
|
||||||
return (LRESULT)himlTemp;
|
return (LRESULT)himlTemp;
|
||||||
@ -3022,6 +3067,8 @@ TOOLBAR_Create (HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||||||
infoPtr->nMaxTextRows = 1;
|
infoPtr->nMaxTextRows = 1;
|
||||||
infoPtr->cxMin = -1;
|
infoPtr->cxMin = -1;
|
||||||
infoPtr->cxMax = -1;
|
infoPtr->cxMax = -1;
|
||||||
|
infoPtr->nNumBitmaps = 0;
|
||||||
|
infoPtr->nNumStrings = 0;
|
||||||
|
|
||||||
infoPtr->bCaptured = FALSE;
|
infoPtr->bCaptured = FALSE;
|
||||||
infoPtr->bUnicode = IsWindowUnicode (hwnd);
|
infoPtr->bUnicode = IsWindowUnicode (hwnd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user