Fix bug where application menu items were wrong size
...in horizontal mode, also make CheckItemSizes more efficient
This commit is contained in:
@@ -776,15 +776,17 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
|
|||||||
- fDeskbarMenuWidth - kSepItemWidth;
|
- fDeskbarMenuWidth - kSepItemWidth;
|
||||||
int32 iconSize = static_cast<TBarApp*>(be_app)->IconSize();
|
int32 iconSize = static_cast<TBarApp*>(be_app)->IconSize();
|
||||||
float iconOnlyWidth = kIconPadding + iconSize + kIconPadding;
|
float iconOnlyWidth = kIconPadding + iconSize + kIconPadding;
|
||||||
float minItemWidth = fDrawLabel ? iconOnlyWidth + kMinMenuItemWidth
|
float minItemWidth = fDrawLabel
|
||||||
|
? iconOnlyWidth + kMinMenuItemWidth
|
||||||
: iconOnlyWidth - kIconPadding;
|
: iconOnlyWidth - kIconPadding;
|
||||||
float maxItemWidth = fDrawLabel ? sMinimumWindowWidth + iconSize
|
float maxItemWidth = fDrawLabel
|
||||||
- kMinimumIconSize : iconOnlyWidth;
|
? sMinimumWindowWidth + iconSize - kMinimumIconSize
|
||||||
|
: iconOnlyWidth;
|
||||||
float menuWidth = maxItemWidth * CountItems() + fDeskbarMenuWidth
|
float menuWidth = maxItemWidth * CountItems() + fDeskbarMenuWidth
|
||||||
+ kSepItemWidth;
|
+ kSepItemWidth;
|
||||||
|
|
||||||
bool reset = false;
|
bool reset = false;
|
||||||
float newWidth = 0.0f;
|
float newWidth = -1.0f;
|
||||||
|
|
||||||
if (delta >= 0 && menuWidth > maxWidth) {
|
if (delta >= 0 && menuWidth > maxWidth) {
|
||||||
fOverflow = true;
|
fOverflow = true;
|
||||||
@@ -798,15 +800,16 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
|
|||||||
newWidth = maxItemWidth;
|
newWidth = maxItemWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reset) {
|
||||||
if (newWidth > maxItemWidth)
|
if (newWidth > maxItemWidth)
|
||||||
newWidth = maxItemWidth;
|
newWidth = maxItemWidth;
|
||||||
else if (newWidth < minItemWidth)
|
else if (newWidth < minItemWidth)
|
||||||
newWidth = minItemWidth;
|
newWidth = minItemWidth;
|
||||||
|
|
||||||
if (reset) {
|
|
||||||
SetMaxContentWidth(newWidth);
|
SetMaxContentWidth(newWidth);
|
||||||
if (newWidth == maxItemWidth)
|
if (newWidth == maxItemWidth)
|
||||||
fOverflow = false;
|
fOverflow = false;
|
||||||
|
|
||||||
InvalidateLayout();
|
InvalidateLayout();
|
||||||
|
|
||||||
for (int32 index = 0; ; index++) {
|
for (int32 index = 0; ; index++) {
|
||||||
@@ -819,9 +822,8 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
|
|||||||
|
|
||||||
Invalidate();
|
Invalidate();
|
||||||
Window()->UpdateIfNeeded();
|
Window()->UpdateIfNeeded();
|
||||||
}
|
|
||||||
|
|
||||||
fBarView->CheckForScrolling();
|
fBarView->CheckForScrolling();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -894,7 +896,8 @@ TExpandoMenuBar::CheckForSizeOverrun()
|
|||||||
|
|
||||||
int32 iconSize = static_cast<TBarApp*>(be_app)->IconSize();
|
int32 iconSize = static_cast<TBarApp*>(be_app)->IconSize();
|
||||||
float iconOnlyWidth = kIconPadding + iconSize + kIconPadding;
|
float iconOnlyWidth = kIconPadding + iconSize + kIconPadding;
|
||||||
float minItemWidth = fDrawLabel ? iconOnlyWidth + kMinMenuItemWidth
|
float minItemWidth = fDrawLabel
|
||||||
|
? iconOnlyWidth + kMinMenuItemWidth
|
||||||
: iconOnlyWidth - kIconPadding;
|
: iconOnlyWidth - kIconPadding;
|
||||||
float menuWidth = minItemWidth * CountItems() + fDeskbarMenuWidth
|
float menuWidth = minItemWidth * CountItems() + fDeskbarMenuWidth
|
||||||
+ kSepItemWidth;
|
+ kSepItemWidth;
|
||||||
|
|||||||
Reference in New Issue
Block a user