* Give Deskbar a refreshed and cleaner look.

* Fixed a bunch of problems in layouting the various views. (For example,
  the last app menu entry is no longer one pixel too short, but there was
  more...)
* Fixed Deskbar being not wide enough for the Haiku logo in certain modes.
* Enabled the mount menu. I think it's a good idea to have at a more prominent
  location where new Haiku users may look for it (Gnome also has this in
  the main panel).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29631 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2009-03-21 17:27:06 +00:00
parent 40a10e1c52
commit cb6afcb146
9 changed files with 324 additions and 166 deletions
+47 -4
View File
@@ -33,10 +33,13 @@ All rights reserved.
*/
#include <Debug.h>
#include "BarMenuTitle.h"
#include <Bitmap.h>
#include <ControlLook.h>
#include "BarApp.h"
#include "BarMenuTitle.h"
#include "BarView.h"
#include "BarWindow.h"
#include "ExpandoMenuBar.h"
@@ -77,7 +80,31 @@ TBarMenuTitle::GetContentSize(float *width, float *height)
void
TBarMenuTitle::Draw()
{
BMenuItem::Draw();
if (be_control_look == NULL) {
BMenuItem::Draw();
return;
}
// fill background if selected
rgb_color base = Menu()->LowColor();
BRect rect = Frame();
BRect windowBounds = Menu()->Window()->Bounds();
if (rect.right > windowBounds.right)
rect.right = windowBounds.right;
if (IsSelected()) {
be_control_look->DrawMenuItemBackground(Menu(), rect, rect, base,
BControlLook::B_ACTIVATED);
} else {
be_control_look->DrawButtonBackground(Menu(), rect, rect, base);
}
// draw content
DrawContent();
// make sure we restore state
Menu()->SetLowColor(base);
}
@@ -86,6 +113,21 @@ TBarMenuTitle::DrawContent()
{
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) - 0.0f));
menu->DrawBitmapAsync(fIcon, dstRect);
}
return;
}
rgb_color menuColor = menu->ViewColor();
rgb_color dark = tint_color(menuColor, B_DARKEN_1_TINT);
rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);
@@ -94,7 +136,7 @@ TBarMenuTitle::DrawContent()
bool inExpandoMode = dynamic_cast<TExpandoMenuBar*>(menu) != NULL;
BRect bounds(menu->Window()->Bounds());
if (bounds.right < frame.right)
if (bounds.right < frame.right)
frame.right = bounds.right;
menu->SetDrawingMode(B_OP_COPY);
@@ -108,7 +150,8 @@ TBarMenuTitle::DrawContent()
menu->AddLine(frame.RightBottom(), frame.RightTop(), dark);
if (inExpandoMode) {
frame.top += 1;
menu->AddLine(frame.LeftTop(), frame.RightTop() + BPoint(-1, 0), light);
menu->AddLine(frame.LeftTop(), frame.RightTop() + BPoint(-1, 0),
light);
}
menu->EndLineArray();
+19 -16
View File
@@ -67,7 +67,6 @@ const int32 kDefaultRecentAppCount = 10;
const int32 kMenuTrackMargin = 20;
TBarView::TBarView(BRect frame, bool vertical, bool left, bool top,
bool showInterval, uint32 state, float, bool showTime)
: BView(frame, "BarView", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
@@ -86,7 +85,7 @@ TBarView::TBarView(BRect frame, bool vertical, bool left, bool top,
fMaxRecentDocs(kDefaultRecentDocCount),
fMaxRecentApps(kDefaultRecentAppCount),
fLastDragItem(NULL)
{
{
}
@@ -94,10 +93,6 @@ TBarView::~TBarView()
{
delete fDragMessage;
delete fCachedTypesList;
// !! this should be done in DetachedFromWindow
// to be symetric
delete fTrackingHookData.fDragMessage;
}
@@ -124,6 +119,14 @@ TBarView::AttachedToWindow()
}
void
TBarView::DetachedFromWindow()
{
delete fTrackingHookData.fDragMessage;
fTrackingHookData.fDragMessage = NULL;
}
void
TBarView::Draw(BRect)
{
@@ -220,7 +223,7 @@ TBarView::PlaceBeMenu()
if (!fBarMenuBar)
return;
float width = kMinimumWindowWidth;
float width = sMinimumWindowWidth;
BPoint loc(B_ORIGIN);
BRect menuFrame(fBarMenuBar->Frame());
if (fState == kFullState) {
@@ -276,7 +279,7 @@ TBarView::PlaceTray(bool, bool, BRect screenFrame)
else
fReplicantTray->MoveTo(2, 2);
} else {
statusLoc.x = screenFrame.Width() - fDragRegion->Bounds().Width();
statusLoc.x = screenFrame.right - fDragRegion->Bounds().Width();
statusLoc.y = -1;
}
@@ -300,21 +303,21 @@ TBarView::PlaceApplicationBar(BRect screenFrame)
if (fVertical) {
// top left/right
if (fTrayLocation != 0)
expandoFrame.top = fDragRegion->Frame().bottom + 2;
expandoFrame.top = fDragRegion->Frame().bottom + 1;
else
expandoFrame.top = fBarMenuBar->Frame().bottom + 2;
expandoFrame.top = fBarMenuBar->Frame().bottom + 1;
expandoFrame.bottom = expandoFrame.top + 1;
if (fState == kFullState)
expandoFrame.right = fBarMenuBar->Frame().Width();
else
expandoFrame.right = kMinimumWindowWidth;
expandoFrame.right = sMinimumWindowWidth;
} else {
// top or bottom
expandoFrame.top = -1;
expandoFrame.top = 0;
expandoFrame.bottom = kHModeHeight;
if (fTrayLocation != 0)
expandoFrame.right = fDragRegion->Frame().left;
expandoFrame.right = fDragRegion->Frame().left - 1;
else
expandoFrame.right = screenFrame.Width();
}
@@ -328,15 +331,15 @@ TBarView::PlaceApplicationBar(BRect screenFrame)
void
TBarView::GetPreferredWindowSize(BRect screenFrame, float *width, float *height)
{
float windowHeight = 0;
float windowWidth = kMinimumWindowWidth;
float windowHeight = 0;
float windowWidth = sMinimumWindowWidth;
if (fState == kFullState) {
windowHeight = screenFrame.bottom;
windowWidth = fBarMenuBar->Frame().Width();
} else if (fState == kExpandoState) {
if (fVertical) {
// top left or right
windowHeight = fExpando->Frame().bottom - 1;
windowHeight = fExpando->Frame().bottom;
} else {
// top or bottom, full
fExpando->CheckItemSizes(0);
+6 -5
View File
@@ -72,6 +72,7 @@ class TBarView : public BView {
~TBarView();
virtual void AttachedToWindow();
virtual void DetachedFromWindow();
virtual void Draw(BRect updateRect);
virtual void MessageReceived(BMessage* message);
virtual void MouseMoved(BPoint where, uint32 transit,
@@ -148,11 +149,11 @@ class TBarView : public BView {
TDragRegion *fDragRegion;
TReplicantTray *fReplicantTray;
bool fShowInterval;
bool fShowClock;
bool fVertical;
bool fTop;
bool fLeft;
bool fShowInterval : 1;
bool fShowClock : 1;
bool fVertical : 1;
bool fTop : 1;
bool fLeft : 1;
int32 fState;
+42 -23
View File
@@ -33,12 +33,15 @@ All rights reserved.
*/
#include <Debug.h>
#include <string.h>
#include <Autolock.h>
#include <Bitmap.h>
#include <ControlLook.h>
#include <NodeInfo.h>
#include <Roster.h>
#include <Screen.h>
#include <Bitmap.h>
#include <Autolock.h>
#include "icons.h"
#include "icons_logo.h"
@@ -55,7 +58,7 @@ All rights reserved.
#include "WindowMenu.h"
#include "WindowMenuItem.h"
const float kBeMenuWidth = 50.0f;
const float kDefaultBeMenuWidth = 50.0f;
const float kSepItemWidth = 5.0f;
const uint32 M_MINIMIZE_TEAM = 'mntm';
@@ -77,6 +80,7 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView *bar, BRect frame, const char *name,
fIsScrolling(false),
fShowTeamExpander(static_cast<TBarApp *>(be_app)->Settings()->superExpando),
fExpandNewTeams(static_cast<TBarApp *>(be_app)->Settings()->expandNewTeams),
fBeMenuWidth(kDefaultBeMenuWidth),
fBarView(bar),
fFirstApp(0),
fPreviousDragTargetItem(NULL)
@@ -88,7 +92,7 @@ TExpandoMenuBar::TExpandoMenuBar(TBarView *bar, BRect frame, const char *name,
SetItemMargins(0.0f, 0.0f, 0.0f, 0.0f);
SetFont(be_plain_font);
SetMaxContentWidth(kMinimumWindowWidth);
SetMaxContentWidth(sMinimumWindowWidth);
}
@@ -106,15 +110,19 @@ TExpandoMenuBar::AttachedToWindow()
BMessenger self(this);
BList teamList;
TBarApp::Subscribe(self, &teamList);
float width = fVertical ? Frame().Width() : kMinimumWindowWidth;
float width = fVertical ? Frame().Width() : sMinimumWindowWidth;
float height = -1.0f;
// top or bottom mode, add be menu and sep for menubar tracking consistency
if (!fVertical) {
TBeMenu *beMenu = new TBeMenu(fBarView);
TBarWindow::SetBeMenu(beMenu);
fBeMenuItem = new TBarMenuTitle(kBeMenuWidth, Frame().Height(),
AppResSet()->FindBitmap(B_MESSAGE_TYPE, R_BeLogoIcon), beMenu, true);
const BBitmap* logoBitmap = AppResSet()->FindBitmap(B_MESSAGE_TYPE,
R_BeLogoIcon);
if (logoBitmap != NULL)
fBeMenuWidth = logoBitmap->Bounds().Width() + 16;
fBeMenuItem = new TBarMenuTitle(fBeMenuWidth, Frame().Height(),
logoBitmap, beMenu, true);
AddItem(fBeMenuItem);
fSeparatorItem = new TTeamMenuItem(kSepItemWidth, height, fVertical);
@@ -521,7 +529,7 @@ TExpandoMenuBar::TeamItemAtPoint(BPoint point, BMenuItem **_item)
void
TExpandoMenuBar::AddTeam(BList *team, BBitmap *icon, char *name, char *signature)
{
float itemWidth = fVertical ? fBarView->Bounds().Width() : kMinimumWindowWidth;
float itemWidth = fVertical ? fBarView->Bounds().Width() : sMinimumWindowWidth;
float itemHeight = -1.0f;
desk_settings *settings = ((TBarApp *)be_app)->Settings();
@@ -630,14 +638,14 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
int32 count = CountItems();
bool reset = false;
float newWidth = 0;
float fullWidth = (kMinimumWindowWidth * count);
float fullWidth = (sMinimumWindowWidth * count);
if (!fBarView->Vertical()) {
// in this case there are 2 extra items:
// The Be Menu
// The little separator item
fullWidth = fullWidth - (kMinimumWindowWidth * 2) + (kBeMenuWidth + kSepItemWidth);
width -= (kBeMenuWidth + kSepItemWidth);
fullWidth = fullWidth - (sMinimumWindowWidth * 2) + (fBeMenuWidth + kSepItemWidth);
width -= (fBeMenuWidth + kSepItemWidth);
count -= 2;
}
@@ -650,14 +658,14 @@ TExpandoMenuBar::CheckItemSizes(int32 delta)
if (fullWidth > width)
newWidth = floorf(width/count);
else
newWidth = kMinimumWindowWidth;
newWidth = sMinimumWindowWidth;
}
if (newWidth > kMinimumWindowWidth)
newWidth = kMinimumWindowWidth;
if (newWidth > sMinimumWindowWidth)
newWidth = sMinimumWindowWidth;
if (reset) {
SetMaxContentWidth(newWidth);
if (newWidth == kMinimumWindowWidth)
if (newWidth == sMinimumWindowWidth)
fOverflow = false;
InvalidateLayout();
@@ -691,25 +699,36 @@ TExpandoMenuBar::Draw(BRect update)
void
TExpandoMenuBar::DrawBackground(BRect)
{
if (fVertical)
return;
BRect bounds(Bounds());
rgb_color menuColor = ViewColor();
rgb_color hilite = tint_color(menuColor, B_DARKEN_1_TINT);
rgb_color dark = tint_color(menuColor, B_DARKEN_2_TINT);
rgb_color vlight = tint_color(menuColor, B_LIGHTEN_2_TINT);
int32 last = CountItems() - 1;
float start;
if (last >= 0)
start = ItemAt(last)->Frame().right + 1;
bounds.left = ItemAt(last)->Frame().right + 1;
else
start = 0;
bounds.left = 0;
if (!fVertical) {
if (be_control_look != NULL) {
SetHighColor(tint_color(menuColor, 1.22));
StrokeLine(bounds.LeftTop(), bounds.LeftBottom());
bounds.left++;
uint32 borders = BControlLook::B_TOP_BORDER
| BControlLook::B_BOTTOM_BORDER | BControlLook::B_RIGHT_BORDER;
be_control_look->DrawButtonBackground(this, bounds, bounds, menuColor,
0, borders);
} else {
SetHighColor(vlight);
StrokeLine(BPoint(start, bounds.top+1), bounds.RightTop() + BPoint(0,1));
StrokeLine(BPoint(start, bounds.top+1), BPoint(start, bounds.bottom));
StrokeLine(bounds.LeftTop(), bounds.RightTop());
StrokeLine(BPoint(bounds.left, bounds.top + 1), bounds.LeftBottom());
SetHighColor(hilite);
StrokeLine(BPoint(start+1, bounds.bottom), bounds.RightBottom());
StrokeLine(BPoint(bounds.left + 1, bounds.bottom), bounds.RightBottom());
}
}
+8 -6
View File
@@ -91,12 +91,14 @@ class TExpandoMenuBar : public BMenuBar {
void _FinishedDrag(bool invoke = false);
bool fVertical;
bool fOverflow;
bool fDrawLabel;
bool fIsScrolling;
bool fShowTeamExpander;
bool fExpandNewTeams;
bool fVertical : 1;
bool fOverflow : 1;
bool fDrawLabel : 1;
bool fIsScrolling : 1;
bool fShowTeamExpander : 1;
bool fExpandNewTeams : 1;
float fBeMenuWidth;
TBarView *fBarView;
int32 fFirstApp;
+1 -1
View File
@@ -18,7 +18,7 @@ local targetSource ;
if $(TARGET_PLATFORM) = haiku {
targetLib = libshared.a ;
targetSource = CalendarMenuWindow.cpp ;
SubDirC++Flags -D_SHOW_CALENDAR_MENU_WINDOW=1 ;
SubDirC++Flags -D_SHOW_CALENDAR_MENU_WINDOW=1 -DMOUNT_MENU_IN_DESKBAR=1 ;
} else {
SubDirC++Flags -D_SHOW_CALENDAR_MENU_ITEM=1 ;
}
+105 -56
View File
@@ -44,9 +44,10 @@ All rights reserved.
#include <fs_index.h>
#include <fs_info.h>
#include <Debug.h>
#include <Application.h>
#include <Beep.h>
#include <Bitmap.h>
#include <ControlLook.h>
#include <Directory.h>
#include <FindDirectory.h>
#include <MenuItem.h>
@@ -60,11 +61,13 @@ All rights reserved.
#include <VolumeRoster.h>
#include <Window.h>
#include "icons_logo.h"
#include "BarApp.h"
#include "DeskBarUtils.h"
#include "ResourceSet.h"
#include "StatusView.h"
#include "StatusViewShelf.h"
#include "TimeView.h"
#include "BarApp.h"
using std::max;
@@ -83,6 +86,8 @@ const char *const kStatusPredicate = "be:deskbar_item_status";
const char *const kEnabledPredicate = "be:deskbar_item_status=enabled";
const char *const kDisabledPredicate = "be:deskbar_item_status=disabled";
float sMinimumWindowWidth = kGutter + kMinimumTrayWidth + kDragRegionWidth;
static void
DumpItem(DeskbarItemInfo *item)
@@ -122,8 +127,17 @@ TReplicantTray::TReplicantTray(TBarView *parent, bool vertical)
fBarView(parent),
fShelf(new TReplicantShelf(this)),
fMultiRowMode(vertical),
fMinimumTrayWidth(kMinimumTrayWidth),
fAlignmentSupport(false)
{
// init the minimum window width according to the logo.
const BBitmap* logoBitmap = AppResSet()->FindBitmap(B_MESSAGE_TYPE,
R_BeLogoIcon);
if (logoBitmap != NULL) {
sMinimumWindowWidth = max_c(sMinimumWindowWidth,
2 * (logoBitmap->Bounds().Width() + 8));
fMinimumTrayWidth = sMinimumWindowWidth - kGutter - kDragRegionWidth;
}
}
@@ -138,8 +152,12 @@ TReplicantTray::AttachedToWindow()
{
BView::AttachedToWindow();
SetViewColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
B_DARKEN_1_TINT));
if (be_control_look != NULL) {
SetViewColor(Parent()->ViewColor());
} else {
SetViewColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
B_DARKEN_1_TINT));
}
SetDrawingMode(B_OP_COPY);
Window()->SetPulseRate(1000000);
@@ -236,7 +254,7 @@ TReplicantTray::DealWithClock(bool showClock)
if (!fClock) {
desk_settings *settings = ((TBarApp *)be_app)->Settings();
fClock = new TTimeView(kMinimumTrayWidth, kMaxReplicantHeight - 1.0,
fClock = new TTimeView(fMinimumTrayWidth, kMaxReplicantHeight - 1.0,
settings->timeShowSeconds, settings->timeShowMil,
settings->timeFullDate, settings->timeShowEuro, false);
AddChild(fClock);
@@ -278,7 +296,7 @@ TReplicantTray::GetPreferredSize(float *preferredWidth, float *preferredHeight)
height = kGutter + (rowCount * kMaxReplicantHeight)
+ ((rowCount - 1) * kIconGap) + kGutter;
height = max(kMinimumTrayHeight, height);
width = kMinimumTrayWidth;
width = fMinimumTrayWidth;
} else {
// if last replicant overruns clock then
// resize to accomodate
@@ -291,7 +309,7 @@ TReplicantTray::GetPreferredSize(float *preferredWidth, float *preferredHeight)
width = fRightBottomReplicant.right + 3;
}
// this view has a fixed minimum width
width = max(kMinimumTrayWidth, width);
width = max(fMinimumTrayWidth, width);
}
*preferredWidth = width;
@@ -325,6 +343,7 @@ TReplicantTray::AdjustPlacement()
void
TReplicantTray::Draw(BRect)
{
return;
rgb_color menuColor = ViewColor();
rgb_color vdark = tint_color(menuColor, B_DARKEN_3_TINT);
rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);
@@ -1276,7 +1295,7 @@ TReplicantTray::LocationForReplicant(int32 index, float width)
// try to find free space in every row
for (int32 row = 0; ; loc.y += kMaxReplicantHeight + kIconGap, row++) {
// determine free space in this row
BRect rect(loc.x, loc.y, loc.x + kMinimumTrayWidth - kIconGap - 2.0, loc.y + kMaxReplicantHeight);
BRect rect(loc.x, loc.y, loc.x + fMinimumTrayWidth - kIconGap - 2.0, loc.y + kMaxReplicantHeight);
if (row == 0 && fBarView->ShowingClock())
rect.right -= fClock->Frame().Width() + kIconGap;
@@ -1407,7 +1426,10 @@ void
TDragRegion::AttachedToWindow()
{
BView::AttachedToWindow();
SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
if (be_control_look != NULL)
SetViewColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR), 1.1));
else
SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
ResizeToPreferred();
}
@@ -1443,6 +1465,8 @@ TDragRegion::Draw(BRect)
{
rgb_color menuColor = ViewColor();
rgb_color hilite = tint_color(menuColor, B_DARKEN_1_TINT);
rgb_color ldark = tint_color(menuColor, 1.02);
rgb_color dark = tint_color(menuColor, B_DARKEN_2_TINT);
rgb_color vdark = tint_color(menuColor, B_DARKEN_3_TINT);
rgb_color vvdark = tint_color(menuColor, B_DARKEN_4_TINT);
rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);
@@ -1450,23 +1474,43 @@ TDragRegion::Draw(BRect)
BRect frame(Bounds());
BeginLineArray(4);
if (fBarView->Vertical()) {
AddLine(frame.LeftTop(), frame.RightTop(), light);
AddLine(frame.LeftTop(), frame.LeftBottom(), light);
AddLine(frame.RightBottom(), frame.RightTop(), hilite);
} else if (fBarView->AcrossTop()) {
AddLine(frame.LeftTop()+BPoint(0, 1), frame.RightTop()+BPoint(-1, 1),
light);
AddLine(frame.RightTop(), frame.RightBottom(), vvdark);
AddLine(frame.RightTop()+BPoint(-1, 2),frame.RightBottom()+BPoint(-1, -1),
hilite);
AddLine(frame.LeftBottom(), frame.RightBottom()+BPoint(-1, 0), hilite);
} else if (fBarView->AcrossBottom()) {
AddLine(frame.LeftTop()+BPoint(0, 1), frame.RightTop()+BPoint(-1, 1), light);
AddLine(frame.LeftBottom(), frame.RightBottom(), hilite);
AddLine(frame.RightTop(), frame.RightBottom(), vvdark);
AddLine(frame.RightTop()+BPoint(-1, 1),frame.RightBottom()+BPoint(-1, -1),
hilite);
if (be_control_look != NULL) {
if (fBarView->Vertical()) {
AddLine(frame.LeftTop(), frame.RightTop(), dark);
AddLine(BPoint(frame.left, frame.top + 1),
BPoint(frame.right, frame.top + 1), ldark);
AddLine(frame.LeftBottom(), frame.RightBottom(), hilite);
} else if (fBarView->AcrossTop() || fBarView->AcrossBottom()) {
AddLine(frame.LeftTop(),
BPoint(frame.left, frame.bottom), dark);
AddLine(BPoint(frame.left + 1, frame.top + 1),
BPoint(frame.right - 1, frame.top + 1), light);
AddLine(BPoint(frame.right, frame.top + 2),
BPoint(frame.right, frame.bottom), hilite);
AddLine(BPoint(frame.left + 1, frame.bottom),
BPoint(frame.right - 1, frame.bottom), hilite);
}
} else {
if (fBarView->Vertical()) {
AddLine(frame.LeftTop(), frame.RightTop(), light);
AddLine(frame.LeftTop(), frame.LeftBottom(), light);
AddLine(frame.RightBottom(), frame.RightTop(), hilite);
} else if (fBarView->AcrossTop()) {
AddLine(BPoint(frame.left, frame.top + 1),
BPoint(frame.right - 1, frame.top + 1), light);
AddLine(frame.RightTop(), frame.RightBottom(), vvdark);
AddLine(BPoint(frame.right - 1, frame.top + 2),
BPoint(frame.right - 1, frame.bottom - 1), hilite);
AddLine(frame.LeftBottom(),
BPoint(frame.right - 1, frame.bottom), hilite);
} else if (fBarView->AcrossBottom()) {
AddLine(BPoint(frame.left, frame.top + 1),
BPoint(frame.right - 1, frame.top + 1), light);
AddLine(frame.LeftBottom(), frame.RightBottom(), hilite);
AddLine(frame.RightTop(), frame.RightBottom(), vvdark);
AddLine(BPoint(frame.right - 1, frame.top + 1),
BPoint(frame.right - 1, frame.bottom - 1), hilite);
}
}
EndLineArray();
@@ -1479,33 +1523,29 @@ TDragRegion::Draw(BRect)
void
TDragRegion::DrawDragRegion()
{
rgb_color menuColor = ViewColor();
rgb_color menuHilite = tint_color(menuColor, B_HIGHLIGHT_BACKGROUND_TINT);
rgb_color vdark = tint_color(menuColor, B_DARKEN_3_TINT);
rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);
BRect dragRegion(DragRegion());
BeginLineArray(dragRegion.IntegerHeight());
BPoint pt = dragRegion.LeftTop() + BPoint(1,1);
// Draw drag region highlighted if tracking mouse
rgb_color menuColor = ViewColor();
rgb_color menuHilite = menuColor;
if (IsTracking()) {
// Draw drag region highlighted if tracking mouse
menuHilite = tint_color(menuColor, B_HIGHLIGHT_BACKGROUND_TINT);
SetHighColor(menuHilite);
FillRect(dragRegion);
while (pt.y + 1 <= dragRegion.bottom) {
AddLine(pt, pt, light);
AddLine(pt+BPoint(1,1), pt+BPoint(1,1), vdark);
pt.y += 3;
}
} else {
while (pt.y + 1 <= dragRegion.bottom) {
AddLine(pt, pt, vdark);
AddLine(pt+BPoint(1,1), pt+BPoint(1,1), light);
pt.y += 3;
}
}
rgb_color vdark = tint_color(menuHilite, B_DARKEN_3_TINT);
rgb_color light = tint_color(menuHilite, B_LIGHTEN_2_TINT);
BeginLineArray(dragRegion.IntegerHeight());
BPoint pt;
pt.x = floorf((dragRegion.left + dragRegion.right) / 2 + 0.5) - 1;
pt.y = dragRegion.top + 2;
while (pt.y + 1 <= dragRegion.bottom) {
AddLine(pt, pt, vdark);
AddLine(pt + BPoint(1, 1), pt + BPoint(1, 1), light);
pt.y += 3;
}
EndLineArray();
}
@@ -1514,9 +1554,18 @@ TDragRegion::DrawDragRegion()
BRect
TDragRegion::DragRegion() const
{
float kTopBottomInset = 2;
float kLeftRightInset = 1;
float kDragWidth = 3;
if (be_control_look != NULL) {
kTopBottomInset = 1;
kLeftRightInset = 0;
kDragWidth = 4;
}
BRect dragRegion(Bounds());
dragRegion.top += 2;
dragRegion.bottom -= 2;
dragRegion.top += kTopBottomInset;
dragRegion.bottom -= kTopBottomInset;
bool placeOnLeft=false;
if (fDragLocation == kAutoPlaceDragRegion) {
@@ -1530,11 +1579,11 @@ TDragRegion::DragRegion() const
placeOnLeft = false;
if (placeOnLeft) {
dragRegion.left += 1;
dragRegion.right = dragRegion.left + 3;
dragRegion.left += kLeftRightInset;
dragRegion.right = dragRegion.left + kDragWidth;
} else {
dragRegion.right -= 1;
dragRegion.left = dragRegion.right - 3;
dragRegion.right -= kLeftRightInset;
dragRegion.left = dragRegion.right - kDragWidth;
}
return dragRegion;
@@ -1612,7 +1661,7 @@ TDragRegion::MouseMoved(BPoint where, uint32 code, const BMessage *message)
BRect frame = screen.Frame();
float hDivider = frame.Width() / 6;
hDivider = (hDivider < kMinimumWindowWidth + 10.0f) ? kMinimumWindowWidth + 10.0f : hDivider;
hDivider = (hDivider < sMinimumWindowWidth + 10.0f) ? sMinimumWindowWidth + 10.0f : hDivider;
float miniDivider = frame.top + kMiniHeight + 10.0f;
float vDivider = frame.Height() / 2;
#ifdef FULL_MODE
+2 -1
View File
@@ -59,7 +59,7 @@ const float kMinimumTrayWidth = kIconGap
+ (kMinimumReplicantCount * kMaxReplicantWidth) + kGutter;
const float kMinimumTrayHeight = kGutter + kMaxReplicantHeight + kGutter;
const float kMinimumWindowWidth = kGutter + kMinimumTrayWidth + kDragRegionWidth;
extern float sMinimumWindowWidth;
#ifdef DB_ADDONS
struct DeskbarItemInfo {
@@ -161,6 +161,7 @@ private:
int32 fLastReplicant;
bool fMultiRowMode;
float fMinimumTrayWidth;
bool fAlignmentSupport;
#ifdef DB_ADDONS
+94 -54
View File
@@ -34,11 +34,14 @@ All rights reserved.
#include <Debug.h>
#include "TeamMenuItem.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <Bitmap.h>
#include <ControlLook.h>
#include <Font.h>
#include <Region.h>
#include <Roster.h>
@@ -50,7 +53,6 @@ All rights reserved.
#include "ResourceSet.h"
#include "ShowHideMenuItem.h"
#include "TeamMenu.h"
#include "TeamMenuItem.h"
#include "WindowMenu.h"
#include "WindowMenuItem.h"
@@ -229,12 +231,49 @@ TTeamMenuItem::Draw()
BRect frame(Frame());
BMenu *menu = Menu();
menu->PushState();
rgb_color menuColor = menu->ViewColor();
rgb_color menuColor = menu->LowColor();
TBarView *barview = (static_cast<TBarApp *>(be_app))->BarView();
bool canHandle = !barview->Dragging()
|| barview->AppCanHandleTypes(Signature());
if (be_control_look != NULL) {
uint32 flags = 0;
if (_IsSelected() && canHandle)
flags |= BControlLook::B_ACTIVATED;
uint32 borders = BControlLook::B_TOP_BORDER;
if (fVertical) {
menu->SetHighColor(tint_color(menuColor, B_DARKEN_1_TINT));
borders |= BControlLook::B_LEFT_BORDER
| BControlLook::B_RIGHT_BORDER;
menu->StrokeLine(frame.LeftBottom(), frame.RightBottom());
frame.bottom--;
be_control_look->DrawMenuBarBackground(menu, frame, frame,
menuColor, flags, borders);
} else {
if (flags & BControlLook::B_ACTIVATED)
menu->SetHighColor(tint_color(menuColor, B_DARKEN_3_TINT));
else
menu->SetHighColor(tint_color(menuColor, 1.22));
borders |= BControlLook::B_BOTTOM_BORDER;
menu->StrokeLine(frame.LeftTop(), frame.LeftBottom());
frame.left++;
be_control_look->DrawButtonBackground(menu, frame, frame,
menuColor, flags, borders);
}
menu->MovePenTo(ContentLocation());
DrawContent();
menu->PopState();
return;
}
// if not selected or being tracked on, fill with gray
TBarView *barview = (static_cast<TBarApp *>(be_app))->BarView();
bool canHandle = !barview->Dragging() || barview->AppCanHandleTypes(Signature());
if (!_IsSelected() && !menu->IsRedrawAfterSticky() || !canHandle || !IsEnabled()) {
if (!_IsSelected() && !menu->IsRedrawAfterSticky() || !canHandle
|| !IsEnabled()) {
frame.InsetBy(1, 1);
menu->SetHighColor(menuColor);
menu->FillRect(frame);
@@ -246,8 +285,6 @@ TTeamMenuItem::Draw()
rgb_color light = tint_color(menuColor, B_LIGHTEN_2_TINT);
frame = Frame();
if (!fVertical)
frame.top += 1;
menu->SetHighColor(shadow);
if (fVertical)
@@ -301,9 +338,6 @@ TTeamMenuItem::DrawContent()
}
BRect frame(Frame());
if (!fVertical)
frame.top += 1;
BRect iconBounds(fIcon->Bounds());
BRect dstRect(iconBounds);
float extra = fVertical ? 0.0f : 1.0f;
@@ -312,8 +346,6 @@ TTeamMenuItem::DrawContent()
((frame.Height() - iconBounds.Height()) / 2) + extra));
menu->DrawBitmapAsync(fIcon, dstRect);
menu->SetDrawingMode(B_OP_COPY);
float labelHeight = fLabelAscent + fLabelDescent;
BPoint drawLoc = contLoc + BPoint(kHPad, kVPad);
drawLoc.x += iconBounds.Width() + kLabelOffset;
@@ -322,14 +354,16 @@ TTeamMenuItem::DrawContent()
}
// set the pen to black so that either method will draw in the same color
// low color is set in inherited::DrawContent, override makes sure its what we want
// low color is set in inherited::DrawContent, override makes sure its
// what we want
if (fDrawLabel) {
menu->SetDrawingMode(B_OP_OVER);
menu->SetHighColor(0, 0, 0);
// 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
DrawContentLabel();
DrawContentLabel();
}
// Draw the expandable icon.
@@ -341,46 +375,53 @@ TTeamMenuItem::DrawContent()
rect.OffsetTo(BPoint(frame.right - rect.Width(),
ContentLocation().y + ((frame.Height() - rect.Height()) / 2)));
rgb_color outlineColor = {80, 80, 80, 255};
rgb_color middleColor = {200, 200, 200, 255};
menu->SetDrawingMode(B_OP_OVER);
if (!fExpanded) {
menu->BeginLineArray(6);
menu->AddLine(BPoint(rect.left + 3, rect.top + 1),
BPoint(rect.left + 3, rect.bottom - 1), outlineColor);
menu->AddLine(BPoint(rect.left + 3, rect.top + 1),
BPoint(rect.left + 7, rect.top + 5), outlineColor);
menu->AddLine(BPoint(rect.left + 7, rect.top + 5),
BPoint(rect.left + 3, rect.bottom - 1), outlineColor);
menu->AddLine(BPoint(rect.left + 4, rect.top + 3),
BPoint(rect.left + 4, rect.bottom - 3), middleColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 4),
BPoint(rect.left + 5, rect.bottom - 4), middleColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 5),
BPoint(rect.left + 6, rect.top + 5), middleColor);
menu->EndLineArray();
if (be_control_look != NULL) {
uint32 arrowDirection = fExpanded
? BControlLook::B_UP_ARROW : BControlLook::B_DOWN_ARROW;
be_control_look->DrawArrowShape(menu, rect, rect, menu->LowColor(),
arrowDirection, 0, B_DARKEN_3_TINT);
} else {
// expanded state
menu->BeginLineArray(6);
menu->AddLine(BPoint(rect.left + 1, rect.top + 3),
BPoint(rect.right - 3, rect.top + 3), outlineColor);
menu->AddLine(BPoint(rect.left + 1, rect.top + 3),
BPoint(rect.left + 5, rect.top + 7), outlineColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 7),
BPoint(rect.right - 3, rect.top + 3), outlineColor);
menu->AddLine(BPoint(rect.left + 3, rect.top + 4),
BPoint(rect.right - 5, rect.top + 4), middleColor);
menu->AddLine(BPoint(rect.left + 4, rect.top + 5),
BPoint(rect.right - 6, rect.top + 5), middleColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 5),
BPoint(rect.left + 5, rect.top + 6), middleColor);
menu->EndLineArray();
rgb_color outlineColor = {80, 80, 80, 255};
rgb_color middleColor = {200, 200, 200, 255};
menu->SetDrawingMode(B_OP_OVER);
if (!fExpanded) {
menu->BeginLineArray(6);
menu->AddLine(BPoint(rect.left + 3, rect.top + 1),
BPoint(rect.left + 3, rect.bottom - 1), outlineColor);
menu->AddLine(BPoint(rect.left + 3, rect.top + 1),
BPoint(rect.left + 7, rect.top + 5), outlineColor);
menu->AddLine(BPoint(rect.left + 7, rect.top + 5),
BPoint(rect.left + 3, rect.bottom - 1), outlineColor);
menu->AddLine(BPoint(rect.left + 4, rect.top + 3),
BPoint(rect.left + 4, rect.bottom - 3), middleColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 4),
BPoint(rect.left + 5, rect.bottom - 4), middleColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 5),
BPoint(rect.left + 6, rect.top + 5), middleColor);
menu->EndLineArray();
} else {
// expanded state
menu->BeginLineArray(6);
menu->AddLine(BPoint(rect.left + 1, rect.top + 3),
BPoint(rect.right - 3, rect.top + 3), outlineColor);
menu->AddLine(BPoint(rect.left + 1, rect.top + 3),
BPoint(rect.left + 5, rect.top + 7), outlineColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 7),
BPoint(rect.right - 3, rect.top + 3), outlineColor);
menu->AddLine(BPoint(rect.left + 3, rect.top + 4),
BPoint(rect.right - 5, rect.top + 4), middleColor);
menu->AddLine(BPoint(rect.left + 4, rect.top + 5),
BPoint(rect.right - 6, rect.top + 5), middleColor);
menu->AddLine(BPoint(rect.left + 5, rect.top + 5),
BPoint(rect.left + 5, rect.top + 6), middleColor);
menu->EndLineArray();
}
}
}
}
@@ -391,7 +432,6 @@ TTeamMenuItem::DrawContentLabel()
{
BMenu *menu = Menu();
menu->MovePenBy(0, fLabelAscent);
menu->SetDrawingMode(B_OP_COPY);
float cachedWidth = menu->StringWidth(Label());
if (Submenu() && fVertical)