From ce65700663f94d141818f3c7d6ac9e35cbf24ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Mon, 23 Mar 2009 15:03:41 +0000 Subject: [PATCH] Beautified the Tracker job status window: * Centered icon in available space. * Improved button layout. * Pause button remains pressed when paused. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29668 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/tracker/StatusWindow.cpp | 84 +++++++++++++++++++------------ 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/src/kits/tracker/StatusWindow.cpp b/src/kits/tracker/StatusWindow.cpp index 0d1316f5c0..c1899ac9f1 100644 --- a/src/kits/tracker/StatusWindow.cpp +++ b/src/kits/tracker/StatusWindow.cpp @@ -37,6 +37,7 @@ All rights reserved. #include #include +#include #include #include #include @@ -109,18 +110,24 @@ TCustomButton::Draw(BRect updateRect) if (Message()->what == kStopButton) { updateRect = Bounds(); - updateRect.InsetBy(9, 7); + updateRect.InsetBy(9, 8); SetHighColor(0, 0, 0); + if (Value() == B_CONTROL_ON) + updateRect.OffsetBy(1, 1); FillRect(updateRect); } else { updateRect = Bounds(); - updateRect.InsetBy(9, 6); + updateRect.InsetBy(9, 7); BRect rect(updateRect); rect.right -= 3; updateRect.left += 3; updateRect.OffsetBy(1, 0); SetHighColor(0, 0, 0); + if (Value() == B_CONTROL_ON) { + updateRect.OffsetBy(1, 1); + rect.OffsetBy(1, 1); + } FillRect(updateRect); FillRect(rect); } @@ -386,10 +393,13 @@ BStatusView::BStatusView(BRect bounds, thread_id thread, StatusWindowState type) SetHighColor(20, 20, 20); SetDrawingMode(B_OP_OVER); + const float buttonWidth = 22; + const float buttonHeight = 20; + BRect rect(bounds); rect.OffsetTo(B_ORIGIN); rect.left += 40; - rect.right -= 50; + rect.right -= buttonWidth * 2 + 12; rect.top += 6; rect.bottom = rect.top + 15; @@ -457,20 +467,19 @@ BStatusView::BStatusView(BRect bounds, thread_id thread, StatusWindowState type) if (id) GetTrackerResources()->GetBitmapResource(B_MESSAGE_TYPE, id, &fBitmap); - rect = Bounds(); - rect.left = rect.right - 46; - rect.right = rect.left + 17; - rect.top += 17; - rect.bottom = rect.top + 10; + rect.left = rect.right - buttonWidth * 2 - 7; + rect.right = rect.left + buttonWidth; + rect.top = floorf((rect.top + rect.bottom) / 2 + 0.5) - buttonHeight / 2; + rect.bottom = rect.top + buttonHeight; fPauseButton = new TCustomButton(rect, kPauseButton); - fPauseButton->ResizeTo(22, 18); + fPauseButton->ResizeTo(buttonWidth, buttonHeight); AddChild(fPauseButton); - rect.OffsetBy(20, 0); + rect.OffsetBy(buttonWidth + 2, 0); fStopButton = new TCustomButton(rect, kStopButton); - fStopButton->ResizeTo(22, 18); + fStopButton->ResizeTo(buttonWidth, buttonHeight); AddChild(fStopButton); } @@ -578,7 +587,8 @@ BStatusView::UpdateStatus(const char *curItem, off_t itemSize, bool optional) const char *statusItem = curItem != NULL ? curItem : fPendingStatusString; - fStatusBar->Update((float)fItemSize / fTotalSize, statusItem, buffer.String()); + fStatusBar->Update((float)fItemSize / fTotalSize, statusItem, + buffer.String()); // we already displayed this item, clear the stash fPendingStatusString[0] = '\0'; @@ -609,6 +619,7 @@ BStatusView::MessageReceived(BMessage *message) switch (message->what) { case kPauseButton: fIsPaused = !fIsPaused; + fPauseButton->SetValue(fIsPaused ? B_CONTROL_ON : B_CONTROL_OFF); if (!fIsPaused) { // force window update @@ -641,43 +652,50 @@ BStatusView::MessageReceived(BMessage *message) void -BStatusView::Draw(BRect) +BStatusView::Draw(BRect updateRect) { - if (fBitmap) - DrawBitmap(fBitmap, BPoint(4, 10)); + if (fBitmap) { + BPoint location; + location.x = (fStatusBar->Frame().left - fBitmap->Bounds().Width()) / 2; + location.y = (Bounds().Height()- fBitmap->Bounds().Height()) / 2; + DrawBitmap(fBitmap, location); + } BRect bounds(Bounds()); - // draw a frame, which also separates multiple BStatusViews - rgb_color light = tint_color(ViewColor(), B_LIGHTEN_MAX_TINT); - rgb_color shadow = tint_color(ViewColor(), B_DARKEN_1_TINT); - BeginLineArray(4); - AddLine(BPoint(bounds.left, bounds.bottom - 1.0f), - BPoint(bounds.left, bounds.top), light); - AddLine(BPoint(bounds.left + 1.0f, bounds.top), - BPoint(bounds.right, bounds.top), light); - AddLine(BPoint(bounds.right, bounds.top + 1.0f), - BPoint(bounds.right, bounds.bottom), shadow); - AddLine(BPoint(bounds.right - 1.0f, bounds.bottom), - BPoint(bounds.left, bounds.bottom), shadow); - EndLineArray(); + if (be_control_look != NULL) { + be_control_look->DrawRaisedBorder(this, bounds, updateRect, + ViewColor()); + } else { + // draw a frame, which also separates multiple BStatusViews + rgb_color light = tint_color(ViewColor(), B_LIGHTEN_MAX_TINT); + rgb_color shadow = tint_color(ViewColor(), B_DARKEN_1_TINT); + BeginLineArray(4); + AddLine(BPoint(bounds.left, bounds.bottom - 1.0f), + BPoint(bounds.left, bounds.top), light); + AddLine(BPoint(bounds.left + 1.0f, bounds.top), + BPoint(bounds.right, bounds.top), light); + AddLine(BPoint(bounds.right, bounds.top + 1.0f), + BPoint(bounds.right, bounds.bottom), shadow); + AddLine(BPoint(bounds.right - 1.0f, bounds.bottom), + BPoint(bounds.left, bounds.bottom), shadow); + EndLineArray(); + } SetHighColor(0, 0, 0); BPoint tp = fStatusBar->Frame().LeftBottom(); font_height fh; GetFontHeight(&fh); - tp.x += 2; - tp.y += fh.leading + fh.ascent; - MovePenTo(tp); + tp.y += ceilf(fh.leading) + ceilf(fh.ascent); if (IsPaused()) - DrawString("Paused: click to resume or stop"); + DrawString("Paused: click to resume or stop", tp); else if (fDestDir.Length()) { BString buffer; buffer << "To: " << fDestDir; SetHighColor(0, 0, 0); - DrawString(buffer.String()); + DrawString(buffer.String(), tp); } }