diff --git a/src/apps/deskbar/BarView.cpp b/src/apps/deskbar/BarView.cpp index dcea99ed31..b6ebf8632d 100644 --- a/src/apps/deskbar/BarView.cpp +++ b/src/apps/deskbar/BarView.cpp @@ -64,9 +64,10 @@ const int32 kDefaultRecentDocCount = 10; const int32 kDefaultRecentAppCount = 10; const int32 kMenuTrackMargin = 20; +const float kMinTeamItemHeight = 20.0f; +const float kVPad = 2.0f; const uint32 kUpdateOrientation = 'UpOr'; -const float kSepItemWidth = 5.0f; class BarViewMessageFilter : public BMessageFilter @@ -149,6 +150,7 @@ TBarView::TBarView(BRect frame, bool vertical, bool left, bool top, fMouseFilter(NULL) { // determine the initial Be menu size + // (will be updated later) BRect menuFrame(frame); if (fVertical) menuFrame.bottom = menuFrame.top + kMenuBarHeight; @@ -212,6 +214,9 @@ TBarView::AttachedToWindow() fTrackingHookData.fTrackingHook = MenuTrackingHook; fTrackingHookData.fTarget = BMessenger(this); fTrackingHookData.fDragMessage = new BMessage(B_REFS_RECEIVED); + + if (!fVertical) + UpdatePlacement(); // update MenuBarHeight } @@ -434,7 +439,8 @@ TBarView::PlaceDeskbarMenu() menuFrame.bottom = menuFrame.top + height; } else { width = gMinimumWindowWidth; - height = fBarApp->IconSize() + 4; + height = std::max(TeamMenuItemHeight(), + kGutter + fReplicantTray->MaxReplicantHeight() + kGutter); menuFrame.bottom = menuFrame.top + height; } @@ -574,7 +580,7 @@ TBarView::PlaceApplicationBar() } else { // top or bottom expandoFrame.top = 0; - expandoFrame.bottom = fBarApp->IconSize() + 4; + expandoFrame.bottom = TeamMenuItemHeight(); if (fBarMenuBar != NULL) expandoFrame.left = fBarMenuBar->Frame().Width() + 1; @@ -594,11 +600,6 @@ TBarView::PlaceApplicationBar() fExpandoMenuBar->MoveTo(0, 0); fExpandoMenuBar->ResizeTo(expandoFrame.Width(), expandoFrame.Height()); - if (!fVertical) { - // Set the max item width based on icon size - fExpandoMenuBar->SetMaxItemWidth(); - } - if (fState == kExpandoState) fExpandoMenuBar->BuildItems(); @@ -645,7 +646,8 @@ TBarView::GetPreferredWindowSize(BRect screenFrame, float* width, float* height) } else { // top or bottom, full fExpandoMenuBar->CheckItemSizes(0); - windowHeight = fBarApp->IconSize() + 4; + windowHeight = std::max(TeamMenuItemHeight(), + kGutter + fReplicantTray->MaxReplicantHeight() + kGutter); windowWidth = screenFrame.Width(); } } else { @@ -1230,3 +1232,37 @@ TBarView::IconFrame(const char* name) const { return OffsetIconFrame(fReplicantTray->IconFrame(name)); } + + +float +TBarView::TeamMenuItemHeight() const +{ + const int32 iconSize = fBarApp->IconSize(); + float iconSizePadded = kVPad + iconSize + kVPad; + + font_height fontHeight; + if (fExpandoMenuBar != NULL) + fExpandoMenuBar->GetFontHeight(&fontHeight); + else + GetFontHeight(&fontHeight); + + float labelHeight = fontHeight.ascent + fontHeight.descent; + labelHeight = labelHeight < kMinTeamItemHeight ? kMinTeamItemHeight + : ceilf(labelHeight * 1.1f); + + bool hideLabels = static_cast(be_app)->Settings()->hideLabels; + if (hideLabels && iconSize > B_MINI_ICON) { + // height is determined based solely on icon size + return iconSizePadded; + } else if (!fVertical || fVertical && iconSize <= B_LARGE_ICON) { + // horizontal or vertical with label on same row as icon: + // height based on icon size or font size, whichever is bigger + return std::max(iconSizePadded, labelHeight); + } else if (fVertical && iconSize > B_LARGE_ICON) { + // vertical with label below icon: height based on icon and label + return ceilf(iconSizePadded + labelHeight); + } else { + // height is determined based solely on label height + return labelHeight; + } +} diff --git a/src/apps/deskbar/BarView.h b/src/apps/deskbar/BarView.h index 6ed2b6eb87..b1da59f7bd 100644 --- a/src/apps/deskbar/BarView.h +++ b/src/apps/deskbar/BarView.h @@ -169,6 +169,8 @@ public: TDragRegion* DragRegion() const { return fDragRegion; } TReplicantTray* ReplicantTray() const { return fReplicantTray; } + float TeamMenuItemHeight() const; + private: friend class TBarApp; friend class TDeskbarMenu; diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp b/src/apps/deskbar/ExpandoMenuBar.cpp index 36fac162c7..f1d9536fdc 100644 --- a/src/apps/deskbar/ExpandoMenuBar.cpp +++ b/src/apps/deskbar/ExpandoMenuBar.cpp @@ -71,7 +71,6 @@ All rights reserved. const float kMinMenuItemWidth = 50.0f; -const float kSepItemWidth = 5.0f; const float kIconPadding = 8.0f; const uint32 kMinimizeTeam = 'mntm'; @@ -95,14 +94,13 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView* barView, bool vertical) fVertical(vertical), fOverflow(false), fFirstBuild(true), - fDeskbarMenuWidth(kMinMenuItemWidth), + fDeskbarMenuWidth(gMinimumWindowWidth), fPreviousDragTargetItem(NULL), fLastMousedOverItem(NULL), fLastClickedItem(NULL) { SetItemMargins(0.0f, 0.0f, 0.0f, 0.0f); SetFont(be_plain_font); - SetMaxItemWidth(); // top or bottom mode, add deskbar menu and sep for menubar tracking // consistency @@ -468,21 +466,12 @@ TExpandoMenuBar::BuildItems() BMessenger self(this); TBarApp::Subscribe(self, &fTeamList); - int32 iconSize = static_cast(be_app)->IconSize(); - desk_settings* settings = static_cast(be_app)->Settings(); - float itemWidth = -1.0f; if (fVertical) { itemWidth = Frame().Width(); SetMaxContentWidth(itemWidth); - } else { - itemWidth = iconSize; - if (!settings->hideLabels) - itemWidth += gMinimumWindowWidth - kMinimumIconSize; - else - itemWidth += kIconPadding * 2; - } - float itemHeight = -1.0f; + } else + CheckItemSizes(0, true); // force reset TeamMenuItemMap items; int32 itemCount = CountItems(); @@ -495,6 +484,7 @@ TExpandoMenuBar::BuildItems() items[BString(item->Signature()).ToLower()] = item; } + desk_settings* settings = static_cast(be_app)->Settings(); if (settings->sortRunningApps) fTeamList.SortItems(TTeamMenu::CompareByName); @@ -506,8 +496,7 @@ TExpandoMenuBar::BuildItems() if (iter == items.end()) { // new team TTeamMenuItem* item = new TTeamMenuItem(barInfo->teams, - barInfo->icon, barInfo->name, barInfo->sig, itemWidth, - itemHeight); + barInfo->icon, barInfo->name, barInfo->sig, itemWidth); if (settings->trackerAlwaysFirst && strcasecmp(barInfo->sig, kTrackerSignature) == 0) { @@ -522,7 +511,6 @@ TExpandoMenuBar::BuildItems() TTeamMenuItem* item = iter->second; item->SetIcon(barInfo->icon); item->SetOverrideWidth(itemWidth); - item->SetOverrideHeight(itemHeight); if (settings->trackerAlwaysFirst && strcasecmp(barInfo->sig, kTrackerSignature) == 0) { @@ -560,7 +548,7 @@ TExpandoMenuBar::BuildItems() if (CountItems() == 0) { // If we're empty, BMenuBar::AttachedToWindow() resizes us to some // weird value - we just override it again - ResizeTo(itemWidth, 0); + ResizeTo(gMinimumWindowWidth, 0); } fFirstBuild = false; @@ -624,24 +612,9 @@ void TExpandoMenuBar::AddTeam(BList* team, BBitmap* icon, char* name, char* signature) { - int32 iconSize = static_cast(be_app)->IconSize(); + TTeamMenuItem* item = new TTeamMenuItem(team, icon, name, signature); + desk_settings* settings = static_cast(be_app)->Settings(); - - float itemWidth = -1.0f; - if (fVertical) - itemWidth = fBarView->Bounds().Width(); - else { - itemWidth = iconSize; - if (!settings->hideLabels) - itemWidth += gMinimumWindowWidth - kMinimumIconSize; - else - itemWidth += kIconPadding * 2; - } - float itemHeight = -1.0f; - - TTeamMenuItem* item = new TTeamMenuItem(team, icon, name, signature, - itemWidth, itemHeight); - if (settings->trackerAlwaysFirst && strcasecmp(signature, kTrackerSignature) == 0) { AddItem(item, 0); @@ -746,34 +719,44 @@ TExpandoMenuBar::RemoveTeam(team_id team, bool partial) void -TExpandoMenuBar::CheckItemSizes(int32 delta) +TExpandoMenuBar::CheckItemSizes(int32 delta, bool reset) { - if (fBarView->Vertical()) + if (fVertical) return; - bool drawLabels = !static_cast(be_app)->Settings()->hideLabels; + int32 itemCount = CountItems(); + TTeamMenuItem* item = static_cast(ItemAt(0)); + if (itemCount < 1 || item == NULL) + return; - float maxWidth = fBarView->DragRegion()->Frame().left - - fDeskbarMenuWidth - kSepItemWidth; int32 iconSize = static_cast(be_app)->IconSize(); float iconOnlyWidth = kIconPadding + iconSize + kIconPadding; - float minItemWidth = drawLabels - ? iconOnlyWidth + kMinMenuItemWidth - : iconOnlyWidth - kIconPadding; - float maxItemWidth = drawLabels - ? gMinimumWindowWidth + iconSize - kMinimumIconSize - : iconOnlyWidth; - float menuWidth = maxItemWidth * CountItems() + fDeskbarMenuWidth - + kSepItemWidth; - bool reset = false; + float maxItemWidth; + float minItemWidth; + if (static_cast(be_app)->Settings()->hideLabels) { + maxItemWidth = iconOnlyWidth; + minItemWidth = iconOnlyWidth - kIconPadding * 3 / 4; + } else { + float labelWidth = gMinimumWindowWidth; + labelWidth += (be_plain_font->Size() - 12) * 4 + iconSize + - kMinimumIconSize; + maxItemWidth = iconOnlyWidth + labelWidth; + minItemWidth = iconOnlyWidth + floorf(labelWidth / 4); + } + + float menuWidth = fDeskbarMenuWidth + kSepItemWidth + + maxItemWidth * itemCount; + float maxWidth = fBarView->DragRegion()->Frame().left - 1 + - fDeskbarMenuWidth - kSepItemWidth; + float newWidth = -1.0f; if (delta >= 0 && menuWidth > maxWidth) { fOverflow = true; reset = true; newWidth = floorf(maxWidth / CountItems()); - } else if (delta < 0 && fOverflow) { + } else if (reset || (delta < 0 && fOverflow)) { reset = true; if (menuWidth > maxWidth) newWidth = floorf(maxWidth / CountItems()); @@ -820,8 +803,7 @@ TExpandoMenuBar::SetMenuLayout(menu_layout layout) { fVertical = layout == B_ITEMS_IN_COLUMN; BPrivate::MenuPrivate(this).SetLayout(layout); - SetMaxItemWidth(); - // when the menu layout changes, make sure to set the max width + InvalidateLayout(); } @@ -884,38 +866,22 @@ TExpandoMenuBar::CheckForSizeOverrun() } // horizontal - int32 count = CountItems() - 1; - if (count < 0) + int32 itemCount = CountItems(); + TTeamMenuItem* item = static_cast(ItemAt(0)); + if (itemCount < 1 || item == NULL) return false; - int32 iconSize = static_cast(be_app)->IconSize(); - float iconOnlyWidth = kIconPadding + iconSize + kIconPadding; - float minItemWidth = !static_cast(be_app)->Settings()->hideLabels - ? iconOnlyWidth + kMinMenuItemWidth - : iconOnlyWidth - kIconPadding; - float menuWidth = minItemWidth * CountItems() + fDeskbarMenuWidth - + kSepItemWidth; - float maxWidth = fBarView->DragRegion()->Frame().left - - fDeskbarMenuWidth - kSepItemWidth; + float itemWidth = item->Frame().Width(); + if (itemWidth <= 0) + return false; + + float menuWidth = fDeskbarMenuWidth + kSepItemWidth + itemWidth * itemCount; + float maxWidth = fBarView->DragRegion()->Frame().left - 1; return menuWidth > maxWidth; } -void -TExpandoMenuBar::SetMaxItemWidth() -{ - if (fVertical) - SetMaxContentWidth(static_cast(be_app)->Settings()->width); - else { - // Make more room for the icon in horizontal mode - int32 iconSize = static_cast(be_app)->IconSize(); - SetMaxContentWidth(gMinimumWindowWidth + iconSize - - kMinimumIconSize); - } -} - - void TExpandoMenuBar::SizeWindow(int32 delta) { @@ -1029,9 +995,10 @@ TExpandoMenuBar::monitor_team_windows(void* arg) ((1 << current_workspace()) & wInfo->workspaces) != 0); - if (strcasecmp(item->Label(), windowName) > 0) + if (strcasecmp(item->Label(), windowName) + > 0) { item->SetLabel(windowName); - + } if (item->Modified()) itemModified = true; } else if (teamItem->IsExpanded()) { diff --git a/src/apps/deskbar/ExpandoMenuBar.h b/src/apps/deskbar/ExpandoMenuBar.h index 1aa2e86533..ffb1e518aa 100644 --- a/src/apps/deskbar/ExpandoMenuBar.h +++ b/src/apps/deskbar/ExpandoMenuBar.h @@ -45,6 +45,9 @@ All rights reserved. #include +const float kSepItemWidth = 5.0f; + + enum drag_and_drop_selection { kNoSelection, kDeskbarMenuSelection, @@ -83,13 +86,11 @@ public: BMenuItem** _item = NULL); bool InDeskbarMenu(BPoint) const; - void CheckItemSizes(int32 delta); + void CheckItemSizes(int32 delta, bool reset = false); menu_layout MenuLayout() const; void SetMenuLayout(menu_layout layout); - void SetMaxItemWidth(); - void SizeWindow(int32 delta); bool CheckForSizeOverrun(); diff --git a/src/apps/deskbar/StatusView.cpp b/src/apps/deskbar/StatusView.cpp index 35d8ed5ebb..871f87ceda 100644 --- a/src/apps/deskbar/StatusView.cpp +++ b/src/apps/deskbar/StatusView.cpp @@ -70,6 +70,7 @@ All rights reserved. #include "BarApp.h" #include "DeskbarUtils.h" +#include "ExpandoMenuBar.h" #include "ResourceSet.h" #include "StatusViewShelf.h" #include "TimeView.h" @@ -1191,7 +1192,8 @@ TReplicantTray::LocationForReplicant(int32 index, float replicantWidth) replicantRect.left = view->Frame().right + kIconGap + 1; } - // calculated left position, add replicantWidth to get right position + // calculated left position, add replicantWidth to get the + // right position replicantRect.right = replicantRect.left + replicantWidth; // check if replicant fits in this row @@ -1203,15 +1205,36 @@ TReplicantTray::LocationForReplicant(int32 index, float replicantWidth) // check next row } - } else if (index > 0) { - // get the last replicant added for placement reference - BView* view = NULL; - fShelf->ReplicantAt(index - 1, &view); - if (view != NULL) { - // push this replicant placement past the last one - loc.x = view->Frame().right + kIconGap + 1; - loc.y = view->Frame().top; + + fTime->MoveTo(Bounds().right - fTime->Bounds().Width() + - kTrayPadding, 2); + } else { + if (index > 0) { + // get the last replicant added for placement reference + BView* view = NULL; + fShelf->ReplicantAt(index - 1, &view); + if (view != NULL) { + // push this replicant placement past the last one + loc.x = view->Frame().right + kIconGap + 1; + } } + + if (fBarView->Vertical()) { + // center vertically + loc.y = floorf((kMenuBarHeight - fMaxReplicantHeight) / 2) - 1; + } else { + if (fBarView->Top()) { + // align top + loc.y = 3; + } else { + // align bottom + loc.y = fBarView->TeamMenuItemHeight() - fMaxReplicantHeight - 2; + } + } + + // move time in place next to replicants + fTime->MoveTo(Bounds().right - fTime->Bounds().Width() - kTrayPadding, + loc.y + (fMaxReplicantHeight - fTime->Bounds().Height()) / 2); } if (loc.y > fRightBottomReplicant.top diff --git a/src/apps/deskbar/TeamMenuItem.cpp b/src/apps/deskbar/TeamMenuItem.cpp index 1c1fd1f740..fd9bf4e8b1 100644 --- a/src/apps/deskbar/TeamMenuItem.cpp +++ b/src/apps/deskbar/TeamMenuItem.cpp @@ -40,10 +40,13 @@ All rights reserved. #include #include +#include + #include #include #include #include +#include #include #include #include @@ -54,6 +57,7 @@ All rights reserved. #include "ExpandoMenuBar.h" #include "ResourceSet.h" #include "ShowHideMenuItem.h" +#include "StatusView.h" #include "TeamMenu.h" #include "WindowMenu.h" #include "WindowMenuItem.h" @@ -62,7 +66,7 @@ All rights reserved. const float kHPad = 8.0f; const float kVPad = 2.0f; const float kLabelOffset = 8.0f; -const float kSwitchWidth = 12.0f; +const float kIconPadding = 8.0f; // #pragma mark - TTeamMenuItem @@ -138,39 +142,39 @@ TTeamMenuItem::SetIcon(BBitmap* icon) { void TTeamMenuItem::GetContentSize(float* width, float* height) { - BRect iconBounds; - - if (fIcon != NULL) - iconBounds = fIcon->Bounds(); - else - iconBounds = BRect(0, 0, kMinimumIconSize - 1, kMinimumIconSize - 1); - BMenuItem::GetContentSize(width, height); if (fOverrideWidth != -1.0f) *width = fOverrideWidth; else { - *width = kHPad + iconBounds.Width() + kHPad; - if (iconBounds.Width() <= 32 - && !static_cast(be_app)->Settings()->hideLabels) { - *width += LabelWidth() + kHPad; - } + bool hideLabels = static_cast(be_app)->Settings()->hideLabels; + float iconSize = static_cast(be_app)->IconSize(); + float iconOnlyWidth = kIconPadding + iconSize + kIconPadding; + + if (fBarView->MiniState()) { + if (hideLabels) + *width = iconOnlyWidth; + else + *width = gMinimumWindowWidth - (kDragRegionWidth + kGutter) * 2; + } else if (!fBarView->Vertical()) { + if (hideLabels) + *width = iconOnlyWidth; + else { + float labelWidth = gMinimumWindowWidth; + BFont font; + Menu()->GetFont(&font); + labelWidth += (font.Size() - 12) * 4 + iconSize - 16; + // do font and icon scaling + *width = iconOnlyWidth + labelWidth; + } + } else + *width = static_cast(be_app)->Settings()->width; } if (fOverrideHeight != -1.0f) *height = fOverrideHeight; - else { - if (fBarView->Vertical()) { - *height = iconBounds.Height() + kVPad * 2; - if (!static_cast(be_app)->Settings()->hideLabels - && iconBounds.Width() > 32) { - *height += fLabelAscent + fLabelDescent; - } - } else { - *height = iconBounds.Height() + kVPad * 2; - } - } - *height += 2; + else + *height = fBarView->TeamMenuItemHeight(); } @@ -223,6 +227,8 @@ void TTeamMenuItem::DrawContent() { BMenu* menu = Menu(); + BRect frame = Frame(); + if (fIcon != NULL) { if (fIcon->ColorSpace() == B_RGBA32) { menu->SetDrawingMode(B_OP_ALPHA); @@ -230,48 +236,50 @@ TTeamMenuItem::DrawContent() } else menu->SetDrawingMode(B_OP_OVER); - BRect frame = Frame(); - BRect iconBounds = fIcon->Bounds(); + BRect iconBounds = fIcon != NULL ? fIcon->Bounds() + : BRect(0, 0, kMinimumIconSize - 1, kMinimumIconSize - 1); BRect updateRect = iconBounds; - float extra = fBarView->Vertical() ? 0.0f : -1.0f; BPoint contentLocation = ContentLocation(); BPoint drawLocation = contentLocation + BPoint(kHPad, kVPad); if (static_cast(be_app)->Settings()->hideLabels || (fBarView->Vertical() && iconBounds.Width() > 32)) { + // determine icon location (centered horizontally) float offsetx = contentLocation.x - + ((frame.Width() - iconBounds.Width()) / 2) + extra; - float offsety = contentLocation.y + 3.0f + extra; + + floorf((frame.Width() - iconBounds.Width()) / 2); + float offsety = contentLocation.y + kVPad + kGutter; + // draw icon updateRect.OffsetTo(BPoint(offsetx, offsety)); menu->DrawBitmapAsync(fIcon, updateRect); - drawLocation.x = ((frame.Width() - LabelWidth()) / 2); - drawLocation.y = frame.top + iconBounds.Height() + kVPad * 2; + // determine label position (below icon) + drawLocation.x = floorf((frame.Width() - fLabelWidth) / 2); + drawLocation.y = frame.top + kVPad + iconBounds.Height() + kVPad; } else { + // determine icon location (centered vertically) float offsetx = contentLocation.x + kHPad; float offsety = contentLocation.y + - ((frame.Height() - iconBounds.Height()) / 2) + extra; + floorf((frame.Height() - iconBounds.Height()) / 2); + // draw icon updateRect.OffsetTo(BPoint(offsetx, offsety)); menu->DrawBitmapAsync(fIcon, updateRect); - float labelHeight = fLabelAscent + fLabelDescent; + // determine label position (centered vertically) drawLocation.x += iconBounds.Width() + kLabelOffset; - drawLocation.y = frame.top + ((frame.Height() - labelHeight) / 2) - + extra; + drawLocation.y = frame.top + + ceilf((frame.Height() - fLabelHeight) / 2); } menu->MovePenTo(drawLocation); } - menu->SetDrawingMode(B_OP_OVER); - menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR)); - // override the drawing of the content when the item is disabled // the wrong lowcolor is used when the item is disabled since the // text color does not change - menu->MovePenBy(0, fLabelAscent); + menu->SetDrawingMode(B_OP_OVER); + menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR)); bool canHandle = !fBarView->Dragging() || fBarView->AppCanHandleTypes(Signature()); @@ -286,13 +294,18 @@ TTeamMenuItem::DrawContent() else menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR)); + menu->MovePenBy(0, fLabelAscent); + + // draw label if (!static_cast(be_app)->Settings()->hideLabels) { float labelWidth = menu->StringWidth(Label()); BPoint penLocation = menu->PenLocation(); - float offset = penLocation.x - Frame().left; + // truncate to max width + float offset = penLocation.x - frame.left; menu->DrawString(Label(labelWidth + offset)); } + // draw expander arrow if (fBarView->Vertical() && static_cast(be_app)->Settings()->superExpando && fBarView->ExpandoState()) { @@ -304,23 +317,18 @@ TTeamMenuItem::DrawContent() void TTeamMenuItem::DrawExpanderArrow() { - BMenu* menu = Menu(); BRect frame = Frame(); BRect rect(0.0f, 0.0f, kSwitchWidth, kHPad + 2.0f); - rect.OffsetTo(BPoint(frame.right - rect.Width(), ContentLocation().y + ((frame.Height() - rect.Height()) / 2))); float colorTint = B_DARKEN_3_TINT; - rgb_color bgColor = ui_color(B_MENU_BACKGROUND_COLOR); - if (bgColor.red + bgColor.green + bgColor.blue <= 128 * 3) { + if (bgColor.red + bgColor.green + bgColor.blue <= 128 * 3) colorTint = B_LIGHTEN_2_TINT; - } - be_control_look->DrawArrowShape(menu, rect, rect, - bgColor, fArrowDirection, 0, - colorTint); + be_control_look->DrawArrowShape(Menu(), rect, Menu()->Frame(), + bgColor, fArrowDirection, 0, colorTint); } @@ -372,8 +380,8 @@ TTeamMenuItem::ToggleExpandState(bool resizeWindow) int32 childIndex = parent->IndexOf(this) + 1; while (parent->SubmenuAt(childIndex) == NULL && childIndex < parent->CountItems()) { - windowItem - = static_cast(parent->RemoveItem(childIndex)); + windowItem = static_cast( + parent->RemoveItem(childIndex)); sub->AddItem(windowItem, 0); windowItem->SetExpanded(false); } @@ -449,6 +457,7 @@ TTeamMenuItem::_Init(BList* team, BBitmap* icon, char* name, char* signature, font.GetHeight(&fontHeight); fLabelAscent = ceilf(fontHeight.ascent); fLabelDescent = ceilf(fontHeight.descent + fontHeight.leading); + fLabelHeight = fLabelAscent + fLabelDescent; fOverriddenSelected = false; diff --git a/src/apps/deskbar/TeamMenuItem.h b/src/apps/deskbar/TeamMenuItem.h index e8f770eabd..011fa7c849 100644 --- a/src/apps/deskbar/TeamMenuItem.h +++ b/src/apps/deskbar/TeamMenuItem.h @@ -44,6 +44,9 @@ All rights reserved. #include "TruncatableMenuItem.h" +const float kSwitchWidth = 12.0f; + + class BBitmap; class TBarView; class TWindowMenuItem; @@ -108,6 +111,7 @@ private: float fLabelWidth; float fLabelAscent; float fLabelDescent; + float fLabelHeight; bool fOverriddenSelected; diff --git a/src/apps/deskbar/TimeView.cpp b/src/apps/deskbar/TimeView.cpp index ce462fd2fc..05c9aec551 100644 --- a/src/apps/deskbar/TimeView.cpp +++ b/src/apps/deskbar/TimeView.cpp @@ -52,6 +52,9 @@ All rights reserved. #include #include "BarApp.h" +#include "BarView.h" +#include "BarWindow.h" +#include "StatusView.h" #include "CalendarMenuWindow.h" #include "StatusView.h" @@ -185,16 +188,21 @@ TTimeView::FrameMoved(BPoint) void TTimeView::GetPreferredSize(float* width, float* height) { - *height = fHeight; - float timeWidth = StringWidth(fCurrentTimeStr); - if (fOrientation) { + // set the height based on the font size + font_height fontHeight; + GetFontHeight(&fontHeight); + fHeight = fontHeight.ascent + fontHeight.descent; + + if (Vertical()) { float appWidth = static_cast(be_app)->Settings()->width; *width = fMaxWidth = std::min(appWidth - (kDragRegionWidth + kHMargin) * 2, timeWidth); } else *width = fMaxWidth = timeWidth; + + *height = fHeight; } @@ -418,7 +426,8 @@ TTimeView::UpdateTimeFormat() delete fTimeFormat; fTimeFormat = new BDateTimeFormat(BLocale::Default()); - fTimeFormat->SetDateTimeFormat(B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT, fields); + fTimeFormat->SetDateTimeFormat(B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT, + fields); delete fDateFormat; fDateFormat = new BDateFormat(BLocale::Default()); @@ -454,8 +463,6 @@ TTimeView::GetCurrentDate() void TTimeView::CalculateTextPlacement() { - BRect bounds(Bounds()); - fDateLocation.x = 0.0; fTimeLocation.x = 0.0; @@ -469,7 +476,8 @@ TTimeView::CalculateTextPlacement() font.GetBoundingBoxesForStrings(stringArray, 1, B_SCREEN_METRIC, &delta, rectArray); - fTimeLocation.y = fDateLocation.y = ceilf((bounds.Height() + // center vertically + fTimeLocation.y = fDateLocation.y = ceilf((Bounds().Height() - rectArray[0].Height() + 1.0) / 2.0 - rectArray[0].top); if (fOrientation) { diff --git a/src/apps/deskbar/TimeView.h b/src/apps/deskbar/TimeView.h index db269519c5..4f01976ee4 100644 --- a/src/apps/deskbar/TimeView.h +++ b/src/apps/deskbar/TimeView.h @@ -66,7 +66,6 @@ const uint32 kShowTimeZone = 'SwTz'; const uint32 kGetClockSettings = 'GCkS'; - class BCountry; class BMessageRunner; class CalendarMenuWindow; diff --git a/src/apps/deskbar/TruncatableMenuItem.cpp b/src/apps/deskbar/TruncatableMenuItem.cpp index 542b4d013c..c9a5420731 100644 --- a/src/apps/deskbar/TruncatableMenuItem.cpp +++ b/src/apps/deskbar/TruncatableMenuItem.cpp @@ -47,7 +47,6 @@ All rights reserved. const float kVPad = 2.0f; -const float kSwitchWidth = 12.0f; // #pragma mark - TTruncatableMenuItem