diff --git a/src/apps/deskbar/BarMenuBar.cpp b/src/apps/deskbar/BarMenuBar.cpp index c1873f40b7..7f3213ee55 100644 --- a/src/apps/deskbar/BarMenuBar.cpp +++ b/src/apps/deskbar/BarMenuBar.cpp @@ -37,11 +37,14 @@ All rights reserved. #include "BarMenuBar.h" #include +#include #include #include #include "icons.h" +#include "BarMenuTitle.h" +#include "BarView.h" #include "BarWindow.h" #include "DeskbarMenu.h" #include "DeskbarUtils.h" @@ -51,21 +54,62 @@ All rights reserved. const float kSepItemWidth = 5.0f; -TBarMenuBar::TBarMenuBar(TBarView* bar, BRect frame, const char* name) - : BMenuBar(frame, name, B_FOLLOW_NONE, B_ITEMS_IN_ROW, false), - fBarView(bar), + +// #pragma mark - TSeparatorItem + + +TSeparatorItem::TSeparatorItem() + : + BSeparatorItem() +{ +} + + +void +TSeparatorItem::Draw() +{ + BMenu* menu = Menu(); + if (menu == NULL) + return; + + BRect frame(Frame()); + frame.right = frame.left + kSepItemWidth; + rgb_color base = menu->LowColor(); + + menu->PushState(); + + menu->SetHighColor(tint_color(base, 1.22)); + frame.top--; + // need to expand the frame for some reason + + // stroke a darker line on the left edge + menu->StrokeLine(frame.LeftTop(), frame.LeftBottom()); + frame.left++; + + // fill in background + be_control_look->DrawButtonBackground(menu, frame, frame, base); + + menu->PopState(); +} + + +// #pragma mark - TBarMenuBar + + +TBarMenuBar::TBarMenuBar(BRect frame, const char* name, TBarView* barView) + : + BMenuBar(frame, name, B_FOLLOW_NONE, B_ITEMS_IN_ROW, false), + fBarView(barView), fAppListMenuItem(NULL), fSeparatorItem(NULL) { SetItemMargins(0.0f, 0.0f, 0.0f, 0.0f); - TDeskbarMenu* beMenu = new TDeskbarMenu(bar); + TDeskbarMenu* beMenu = new TDeskbarMenu(barView); TBarWindow::SetDeskbarMenu(beMenu); - const BBitmap* logoBitmap = AppResSet()->FindBitmap(B_MESSAGE_TYPE, - R_LeafLogoBitmap); - fDeskbarMenuItem = new TBarMenuTitle(frame.Width(), frame.Height(), - logoBitmap, beMenu); + fDeskbarMenuItem = new TBarMenuTitle(0.0f, 0.0f, + AppResSet()->FindBitmap(B_MESSAGE_TYPE, R_LeafLogoBitmap), beMenu); AddItem(fDeskbarMenuItem); } @@ -144,7 +188,7 @@ TBarMenuBar::RemoveTeamMenu() bool -TBarMenuBar::AddSeperatorItem() +TBarMenuBar::AddSeparatorItem() { if (CountItems() > 1) return false; @@ -152,9 +196,7 @@ TBarMenuBar::AddSeperatorItem() BRect frame(Frame()); delete fSeparatorItem; - fSeparatorItem = new TTeamMenuItem(kSepItemWidth, - frame.Height() - 2, false); - fSeparatorItem->SetEnabled(false); + fSeparatorItem = new TSeparatorItem(); bool added = AddItem(fSeparatorItem); @@ -189,7 +231,7 @@ TBarMenuBar::RemoveSeperatorItem() void TBarMenuBar::Draw(BRect updateRect) { - // want to skip the fancy BMenuBar drawing code. + // skip the fancy BMenuBar drawing code BMenu::Draw(updateRect); } diff --git a/src/apps/deskbar/BarMenuBar.h b/src/apps/deskbar/BarMenuBar.h index 75dfd24784..f470d38b1c 100644 --- a/src/apps/deskbar/BarMenuBar.h +++ b/src/apps/deskbar/BarMenuBar.h @@ -42,39 +42,48 @@ All rights reserved. #include - -#include "BarView.h" -#include "BarMenuTitle.h" -#include "TimeView.h" +#include -class TBarMenuBar : public BMenuBar { - public: - TBarMenuBar(TBarView* bar, BRect frame, const char* name); - virtual ~TBarMenuBar(); +class TBarMenuTitle; +class TBarView; - virtual void MouseMoved(BPoint where, uint32 code, - const BMessage* message); - virtual void Draw(BRect); +class TSeparatorItem : public BSeparatorItem { +public: + TSeparatorItem(); - void DrawBackground(BRect); - void SmartResize(float width = -1.0f, float height = -1.0f); - - bool AddTeamMenu(); - bool RemoveTeamMenu(); - - bool AddSeperatorItem(); - bool RemoveSeperatorItem(); - - void InitTrackingHook(bool (* hookfunction)(BMenu*, void*), void* state, - bool both = false); - - private: - TBarView* fBarView; - TBarMenuTitle* fDeskbarMenuItem; - TBarMenuTitle* fAppListMenuItem; - TTeamMenuItem* fSeparatorItem; + virtual void Draw(); }; +class TBarMenuBar : public BMenuBar { +public: + TBarMenuBar(BRect frame, const char* name, + TBarView* barView); + virtual ~TBarMenuBar(); -#endif /* BARMENUBAR_H */ + virtual void MouseMoved(BPoint where, uint32 code, + const BMessage* message); + virtual void Draw(BRect); + + void DrawBackground(BRect); + void SmartResize(float width = -1.0f, + float height = -1.0f); + + bool AddTeamMenu(); + bool RemoveTeamMenu(); + + bool AddSeparatorItem(); + bool RemoveSeperatorItem(); + + void InitTrackingHook( + bool (* hookfunction)(BMenu*, void*), + void* state, bool both = false); + +private: + TBarView* fBarView; + TBarMenuTitle* fDeskbarMenuItem; + TBarMenuTitle* fAppListMenuItem; + TSeparatorItem* fSeparatorItem; +}; + +#endif // BARMENUBAR_H diff --git a/src/apps/deskbar/BarMenuTitle.cpp b/src/apps/deskbar/BarMenuTitle.cpp index a20b362697..50c0d79471 100644 --- a/src/apps/deskbar/BarMenuTitle.cpp +++ b/src/apps/deskbar/BarMenuTitle.cpp @@ -82,120 +82,51 @@ TBarMenuTitle::GetContentSize(float* width, float* height) void TBarMenuTitle::Draw() { - if (be_control_look == NULL) { - BMenuItem::Draw(); + BMenu* menu = Menu(); + if (menu == NULL) return; - } - // fill background if selected - rgb_color base = Menu()->LowColor(); - BRect rect = Frame(); + BRect frame(Frame()); + rgb_color base = menu->LowColor(); - BRect windowBounds = Menu()->Window()->Bounds(); - if (rect.right > windowBounds.right) - rect.right = windowBounds.right; + menu->PushState(); + BRect windowBounds = menu->Window()->Bounds(); + if (frame.right > windowBounds.right) + frame.right = windowBounds.right; + + // fill in background if (IsSelected()) { - be_control_look->DrawMenuItemBackground(Menu(), rect, rect, base, + be_control_look->DrawMenuItemBackground(menu, frame, frame, base, BControlLook::B_ACTIVATED); - } else { - be_control_look->DrawButtonBackground(Menu(), rect, rect, base); - } + } else + be_control_look->DrawButtonBackground(menu, frame, frame, base); - // draw content + menu->MovePenTo(ContentLocation()); DrawContent(); - // make sure we restore state - Menu()->SetLowColor(base); + menu->PopState(); } void TBarMenuTitle::DrawContent() { + if (fIcon == NULL) + return; + BMenu* menu = Menu(); BRect frame(Frame()); - - if (be_control_look != NULL) { - menu->SetDrawingMode(B_OP_ALPHA); - - if (fIcon != NULL) { - BRect dstRect(fIcon->Bounds()); - dstRect.OffsetTo(frame.LeftTop()); - dstRect.OffsetBy(rintf(((frame.Width() - dstRect.Width()) / 2) - - 1.0f), rintf(((frame.Height() - dstRect.Height()) / 2) - + 2.0f)); - - menu->DrawBitmapAsync(fIcon, dstRect); - } - return; - } - - rgb_color menuColor = menu->LowColor(); - rgb_color dark = tint_color(menuColor, B_DARKEN_1_TINT); - rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT); - - bool inExpandoMode = dynamic_cast(menu) != NULL; - - BRect bounds(menu->Window()->Bounds()); - if (bounds.right < frame.right) - frame.right = bounds.right; - - menu->SetDrawingMode(B_OP_COPY); - - if (!IsSelected() && !menu->IsRedrawAfterSticky()) { - menu->BeginLineArray(8); - menu->AddLine(frame.RightTop(), frame.LeftTop(), light); - menu->AddLine(frame.LeftBottom(), frame.RightBottom(), dark); - menu->AddLine(frame.LeftTop(), - frame.LeftBottom()+BPoint(0, inExpandoMode ? 0 : -1), light); - menu->AddLine(frame.RightBottom(), frame.RightTop(), dark); - if (inExpandoMode) { - frame.top += 1; - menu->AddLine(frame.LeftTop(), frame.RightTop() + BPoint(-1, 0), - light); - } - - menu->EndLineArray(); - - frame.InsetBy(1, 1); - menu->SetHighColor(menuColor); - menu->FillRect(frame); - if (IsSelected()) - menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR)); - else - menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR)); - frame.InsetBy(-1, -1); - if (inExpandoMode) - frame.top -= 1; - } - - ASSERT(IsEnabled()); - if (IsSelected() && !menu->IsRedrawAfterSticky()) { - menu->SetHighColor(tint_color(menuColor, B_HIGHLIGHT_BACKGROUND_TINT)); - menu->FillRect(frame); - - if (menu->IndexOf(this) > 0) { - menu->SetHighColor(tint_color(menuColor, B_DARKEN_4_TINT)); - menu->StrokeLine(frame.LeftTop(), frame.LeftBottom()); - } - - if (IsSelected()) - menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR)); - else - menu->SetHighColor(ui_color(B_MENU_ITEM_TEXT_COLOR)); - } + BRect iconRect(fIcon->Bounds()); menu->SetDrawingMode(B_OP_ALPHA); + iconRect.OffsetTo(frame.LeftTop()); - if (fIcon != NULL) { - BRect dstRect(fIcon->Bounds()); - dstRect.OffsetTo(frame.LeftTop()); - dstRect.OffsetBy(rintf(((frame.Width() - dstRect.Width()) / 2) - 1.0f), - rintf(((frame.Height() - dstRect.Height()) / 2) - 0.0f)); + float widthOffset = rintf((frame.Width() - iconRect.Width()) / 2); + float heightOffset = rintf((frame.Height() - iconRect.Height()) / 2); + iconRect.OffsetBy(widthOffset - 1.0f, heightOffset + 2.0f); - menu->DrawBitmapAsync(fIcon, dstRect); - } + menu->DrawBitmapAsync(fIcon, iconRect); } diff --git a/src/apps/deskbar/BarMenuTitle.h b/src/apps/deskbar/BarMenuTitle.h index c875c06a87..f7bcac02ec 100644 --- a/src/apps/deskbar/BarMenuTitle.h +++ b/src/apps/deskbar/BarMenuTitle.h @@ -50,7 +50,7 @@ class BMenu; class TBarMenuTitle : public BMenuItem { public: TBarMenuTitle(float width, float height, const BBitmap* icon, - BMenu* menu, bool inexpando = false); + BMenu* menu, bool expando = false); virtual ~TBarMenuTitle(); void SetContentSize(float width, float height); diff --git a/src/apps/deskbar/BarView.cpp b/src/apps/deskbar/BarView.cpp index 0c5d6ba5ab..95feb08a4a 100644 --- a/src/apps/deskbar/BarView.cpp +++ b/src/apps/deskbar/BarView.cpp @@ -395,7 +395,7 @@ TBarView::PlaceDeskbarMenu() width += 1; } else { // shows apps to the right of bemenu - fBarMenuBar->AddSeperatorItem(); + fBarMenuBar->AddSeparatorItem(); width = floorf(width) / 2 + kSepItemWidth; } loc = Bounds().LeftTop(); diff --git a/src/apps/deskbar/TeamMenu.cpp b/src/apps/deskbar/TeamMenu.cpp index 7f5a7beef5..50aa6c1bb4 100644 --- a/src/apps/deskbar/TeamMenu.cpp +++ b/src/apps/deskbar/TeamMenu.cpp @@ -44,6 +44,7 @@ All rights reserved. #include "BarApp.h" #include "BarMenuBar.h" +#include "BarView.h" #include "DeskbarUtils.h" #include "TeamMenuItem.h" diff --git a/src/apps/deskbar/TeamMenuItem.cpp b/src/apps/deskbar/TeamMenuItem.cpp index 7c393cd594..7c5d42f2ce 100644 --- a/src/apps/deskbar/TeamMenuItem.cpp +++ b/src/apps/deskbar/TeamMenuItem.cpp @@ -50,6 +50,7 @@ All rights reserved. #include "BarApp.h" #include "BarMenuBar.h" +#include "BarView.h" #include "ExpandoMenuBar.h" #include "ResourceSet.h" #include "ShowHideMenuItem.h" diff --git a/src/apps/deskbar/WindowMenuItem.cpp b/src/apps/deskbar/WindowMenuItem.cpp index 21559c581c..b6110d4f24 100644 --- a/src/apps/deskbar/WindowMenuItem.cpp +++ b/src/apps/deskbar/WindowMenuItem.cpp @@ -44,6 +44,7 @@ All rights reserved. #include "BarApp.h" #include "BarMenuBar.h" +#include "BarView.h" #include "ExpandoMenuBar.h" #include "icons.h" #include "ResourceSet.h"