More tweakings to the notification view :
* Use a BStatusBar for progress. * Smaller icon stripe on the left * Shift the message title aligned with the rest of the message * Fix drawing bugs at the right of the window Thanks to diver for the suggestion mockups! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42710 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
cfda569d7f
commit
beeda30637
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2010-2011, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2008-2009, Pier Luigi Fiorini. All Rights Reserved.
|
||||
* Copyright 2004-2008, Michael Davidson. All Rights Reserved.
|
||||
* Copyright 2004-2007, Mikael Eiman. All Rights Reserved.
|
||||
@ -10,6 +10,7 @@
|
||||
* Mikael Eiman, mikael@eiman.tv
|
||||
* Pier Luigi Fiorini, pierluigi.fiorini@gmail.com
|
||||
* Stephan Aßmus <superstippi@gmx.de>
|
||||
* Adrien Destugues <pulokmandy@pulkomandy.ath.cx>
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -22,6 +23,7 @@
|
||||
#include <Region.h>
|
||||
#include <Resources.h>
|
||||
#include <Roster.h>
|
||||
#include <StatusBar.h>
|
||||
#include <StringView.h>
|
||||
#include <TranslationUtils.h>
|
||||
|
||||
@ -32,7 +34,7 @@ const char* kSmallIconAttribute = "BEOS:M:STD_ICON";
|
||||
const char* kLargeIconAttribute = "BEOS:L:STD_ICON";
|
||||
const char* kIconAttribute = "BEOS:ICON";
|
||||
|
||||
static const int kIconStripeWidth = 30;
|
||||
static const int kIconStripeWidth = 16;
|
||||
|
||||
property_info message_prop_list[] = {
|
||||
{ "type", {B_GET_PROPERTY, B_SET_PROPERTY, 0},
|
||||
@ -100,6 +102,21 @@ NotificationView::NotificationView(NotificationWindow* win,
|
||||
SetViewColor(ui_color(B_FAILURE_COLOR));
|
||||
SetLowColor(ui_color(B_FAILURE_COLOR));
|
||||
break;
|
||||
case B_PROGRESS_NOTIFICATION:
|
||||
{
|
||||
BRect frame(kIconStripeWidth * 3, Bounds().bottom - 36,
|
||||
Bounds().right - kEdgePadding, Bounds().bottom - kEdgePadding);
|
||||
BStatusBar* progress = new BStatusBar(frame, "progress");
|
||||
progress->SetBarHeight(12.0f);
|
||||
progress->SetMaxValue(1.0f);
|
||||
progress->Update(fProgress);
|
||||
|
||||
BString label = "";
|
||||
label << (int)(fProgress * 100) << " %";
|
||||
progress->SetTrailingText(label);
|
||||
|
||||
AddChild(progress);
|
||||
}
|
||||
default:
|
||||
SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||
SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
|
||||
@ -241,15 +258,12 @@ NotificationView::MessageReceived(BMessage* msg)
|
||||
void
|
||||
NotificationView::GetPreferredSize(float* w, float* h)
|
||||
{
|
||||
// Parent width, minus the edge padding, minus the pensize
|
||||
*w = fParent->ViewWidth() - (kEdgePadding * 2) - (kPenSize * 2);
|
||||
*w = fParent->ViewWidth();
|
||||
*h = fHeight;
|
||||
|
||||
if (fType == B_PROGRESS_NOTIFICATION) {
|
||||
font_height fh;
|
||||
be_plain_font->GetHeight(&fh);
|
||||
float fontHeight = fh.ascent + fh.descent + fh.leading;
|
||||
*h += (kSmallPadding * 2) + (kEdgePadding * 1) + fontHeight;
|
||||
*h += 16 + kEdgePadding;
|
||||
// 16 is progress bar default size as stated in the BeBook
|
||||
}
|
||||
}
|
||||
|
||||
@ -259,41 +273,6 @@ NotificationView::Draw(BRect updateRect)
|
||||
{
|
||||
BRect progRect;
|
||||
|
||||
// Draw progress background
|
||||
if (fType == B_PROGRESS_NOTIFICATION) {
|
||||
PushState();
|
||||
|
||||
font_height fh;
|
||||
be_plain_font->GetHeight(&fh);
|
||||
float fontHeight = fh.ascent + fh.descent + fh.leading;
|
||||
|
||||
progRect = Bounds();
|
||||
progRect.InsetBy(kEdgePadding, kEdgePadding);
|
||||
progRect.top = progRect.bottom - (kSmallPadding * 2) - fontHeight;
|
||||
StrokeRect(progRect);
|
||||
|
||||
BRect barRect = progRect;
|
||||
barRect.InsetBy(1.0, 1.0);
|
||||
barRect.right *= fProgress;
|
||||
SetHighColor(ui_color(B_CONTROL_HIGHLIGHT_COLOR));
|
||||
FillRect(barRect);
|
||||
|
||||
SetHighColor(ui_color(B_PANEL_TEXT_COLOR));
|
||||
|
||||
BString label = "";
|
||||
label << (int)(fProgress * 100) << " %";
|
||||
|
||||
float labelWidth = be_plain_font->StringWidth(label.String());
|
||||
float labelX = progRect.left + (progRect.IntegerWidth() / 2) - (labelWidth / 2);
|
||||
|
||||
SetLowColor(B_TRANSPARENT_COLOR);
|
||||
SetDrawingMode(B_OP_ALPHA);
|
||||
DrawString(label.String(), label.Length(),
|
||||
BPoint(labelX, progRect.top + fh.ascent + fh.leading + kSmallPadding));
|
||||
|
||||
PopState();
|
||||
}
|
||||
|
||||
SetDrawingMode(B_OP_ALPHA);
|
||||
SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY);
|
||||
|
||||
@ -361,6 +340,8 @@ NotificationView::Draw(BRect updateRect)
|
||||
PopState();
|
||||
|
||||
Sync();
|
||||
|
||||
BView::Draw(updateRect);
|
||||
}
|
||||
|
||||
|
||||
@ -524,10 +505,7 @@ NotificationView::SetText(const char* app, const char* title, const char* text,
|
||||
titleLine->text = fTitle;
|
||||
titleLine->font = *be_bold_font;
|
||||
|
||||
if (fParent->Layout() == AllTextRightOfIcon)
|
||||
titleLine->location = BPoint(iconRight, y);
|
||||
else
|
||||
titleLine->location = BPoint(kEdgePadding, y);
|
||||
titleLine->location = BPoint(iconRight, y);
|
||||
|
||||
fLines.push_front(titleLine);
|
||||
y += fontHeight;
|
||||
|
Loading…
Reference in New Issue
Block a user