Improved/fixed the look of file panels. If I feel motivated enough, I may

also fix the font-sensitivity issues.
* The CountView can now draw part of the PoseView focus indication. Though I
  am not convinced anymore that I am approaching this the right way. Maybe
  scroll views should simply leave room for drawing a frame between child
  and scroll bars...
* ContainerWindow::BackgroundView uses the new BControlLook method to draw
  the scroll view frame to look just like a regular scroll view.
* Some fixes to layout of controls in file panels and minimum window size.
  There would be much more left to do...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29663 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus 2009-03-23 11:26:53 +00:00
parent 5d67bb7cfa
commit cafee0b7f5
5 changed files with 104 additions and 15 deletions

View File

@ -65,6 +65,7 @@ All rights reserved.
#include "BackgroundImage.h"
#include "Commands.h"
#include "ContainerWindow.h"
#include "CountView.h"
#include "DeskWindow.h"
#include "FavoritesMenu.h"
#include "FindPanel.h"
@ -3967,9 +3968,25 @@ BackgroundView::FrameResized(float, float)
void
BackgroundView::PoseViewFocused(bool)
BackgroundView::PoseViewFocused(bool focused)
{
Invalidate();
BContainerWindow* window = dynamic_cast<BContainerWindow*>(Window());
if (!window)
return;
BScrollBar* hScrollBar = window->PoseView()->HScrollBar();
if (hScrollBar != NULL)
hScrollBar->SetBorderHighlighted(focused);
BScrollBar* vScrollBar = window->PoseView()->VScrollBar();
if (vScrollBar != NULL)
vScrollBar->SetBorderHighlighted(focused);
BCountView* countView = window->PoseView()->CountView();
if (countView != NULL)
countView->SetBorderHighlighted(focused);
}
@ -3981,18 +3998,49 @@ BackgroundView::WindowActivated(bool)
void
BackgroundView::Draw(BRect)
BackgroundView::Draw(BRect updateRect)
{
BContainerWindow *window = dynamic_cast<BContainerWindow *>(Window());
if (!window)
return;
BRect frame(window->PoseView()->Frame());
BPoseView* poseView = window->PoseView();
BRect frame(poseView->Frame());
frame.InsetBy(-1, -1);
frame.top -= kTitleViewHeight;
frame.bottom += B_H_SCROLL_BAR_HEIGHT;
frame.right += B_V_SCROLL_BAR_WIDTH;
if (be_control_look != NULL) {
uint32 flags = 0;
if (window->IsActive() && window->PoseView()->IsFocus())
flags |= BControlLook::B_FOCUSED;
frame.top--;
frame.InsetBy(-1, -1);
BRect rect(frame);
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
BScrollBar* hScrollBar = poseView->HScrollBar();
BScrollBar* vScrollBar = poseView->VScrollBar();
BRect verticalScrollBarFrame(0, 0, -1, -1);
if (vScrollBar)
verticalScrollBarFrame = vScrollBar->Frame();
BRect horizontalScrollBarFrame(0, 0, -1, -1);
if (hScrollBar) {
horizontalScrollBarFrame = hScrollBar->Frame();
// CountView extends horizontal scroll bar frame:
horizontalScrollBarFrame.left = frame.left + 1;
}
be_control_look->DrawScrollViewFrame(this, rect, updateRect,
verticalScrollBarFrame, horizontalScrollBarFrame, base,
B_FANCY_BORDER, flags);
return;
}
SetHighColor(100, 100, 100);
StrokeRect(frame);

View File

@ -55,6 +55,7 @@ BCountView::BCountView(BRect bounds, BPoseView* view)
fLastCount(-1),
fPoseView(view),
fShowingBarberPole(false),
fBorderHighlighted(false),
fBarberPoleMap(NULL),
fLastBarberPoleOffset(5),
fStartSpinningAfter(0),
@ -98,6 +99,17 @@ BCountView::Pulse()
}
void
BCountView::WindowActivated(bool active)
{
if (fBorderHighlighted) {
BRect dirty(Bounds());
dirty.bottom = dirty.top;
Invalidate(dirty);
}
}
void
BCountView::EndBarberPole()
{
@ -186,7 +198,10 @@ BCountView::Draw(BRect updateRect)
if (be_control_look != NULL) {
rgb_color base = ViewColor();
SetHighColor(tint_color(base, B_DARKEN_2_TINT));
if (fBorderHighlighted && Window()->IsActive())
SetHighColor(ui_color(B_KEYBOARD_NAVIGATION_COLOR));
else
SetHighColor(tint_color(base, B_DARKEN_2_TINT));
StrokeLine(bounds.LeftTop(), bounds.RightTop());
bounds.top++;
be_control_look->DrawMenuBarBackground(this, bounds, updateRect,
@ -329,3 +344,16 @@ BCountView::IsTypingAhead() const
{
return fTypeAheadString.Length() != 0;
}
void
BCountView::SetBorderHighlighted(bool highlighted)
{
if (fBorderHighlighted == highlighted)
return;
fBorderHighlighted = highlighted;
BRect dirty(Bounds());
dirty.bottom = dirty.top;
Invalidate(dirty);
}

View File

@ -53,6 +53,7 @@ public:
virtual void MouseDown(BPoint);
virtual void AttachedToWindow();
virtual void Pulse();
virtual void WindowActivated(bool active);
void CheckCount();
void StartBarberPole();
@ -61,7 +62,9 @@ public:
void SetTypeAhead(const char *);
const char *TypeAhead() const;
bool IsTypingAhead() const;
void SetBorderHighlighted(bool highlighted);
private:
BRect BarberPoleInnerRect() const;
BRect BarberPoleOuterRect() const;
@ -71,7 +74,8 @@ private:
int32 fLastCount;
BPoseView *fPoseView;
bool fShowingBarberPole;
bool fShowingBarberPole : 1;
bool fBorderHighlighted : 1;
BBitmap *fBarberPoleMap;
float fLastBarberPoleOffset;
bigtime_t fStartSpinningAfter;

View File

@ -661,8 +661,8 @@ TFilePanel::Init(const BMessage *)
float f_height = ht.ascent + ht.descent + ht.leading;
BRect rect;
rect.top = fMenuBar->Bounds().Height() + 2;
rect.left = windRect.left + 9;
rect.top = fMenuBar->Bounds().Height() + 8;
rect.left = windRect.left + 8;
rect.right = rect.left + 300;
rect.bottom = rect.top + (f_height > 22 ? f_height : 22);
@ -687,7 +687,7 @@ TFilePanel::Init(const BMessage *)
if (fIsSavePanel) {
BRect rect(windRect);
rect.top = rect.bottom - 35;
rect.left = 9;
rect.left = 8;
rect.right = rect.left + 170;
rect.bottom = rect.top + 13;
@ -704,7 +704,7 @@ TFilePanel::Init(const BMessage *)
fButtonText = "Open";
rect = windRect;
rect.OffsetTo(10, fMenuBar->Bounds().Height() * 2 + 16);
rect.OffsetTo(10, fDirMenuField->Frame().bottom + 10);
rect.bottom = windRect.bottom - 60;
rect.right -= B_V_SCROLL_BAR_WIDTH + 20;
@ -725,7 +725,9 @@ TFilePanel::Init(const BMessage *)
PoseView()->SetSelectionHandler(this);
PoseView()->SetSelectionChangedHook(true);
PoseView()->DisableSaveLocation();
PoseView()->VScrollBar()->MoveBy(0, -1);
PoseView()->VScrollBar()->ResizeBy(0, 1);
AddShortcut('W', B_COMMAND_KEY, new BMessage(kCancelButton));
AddShortcut('H', B_COMMAND_KEY, new BMessage(kSwitchToHome));
@ -780,7 +782,7 @@ TFilePanel::Init(const BMessage *)
SetTitle(title.String());
SetSizeLimits(360, 10000, 200, 10000);
SetSizeLimits(370, 10000, 200, 10000);
}

View File

@ -189,8 +189,9 @@ class BPoseView : public BView {
virtual void UpdateScrollRange();
virtual void SetScrollBarsTo(BPoint);
virtual void AddScrollBars();
BHScrollBar *HScrollBar() const;
BScrollBar *VScrollBar() const ;
BHScrollBar* HScrollBar() const;
BScrollBar* VScrollBar() const ;
BCountView* CountView() const;
void DisableScrollBars();
void EnableScrollBars();
@ -786,6 +787,12 @@ BPoseView::VScrollBar() const
return fVScrollBar;
}
inline BCountView*
BPoseView::CountView() const
{
return fCountView;
}
inline bool
BPoseView::StateNeedsSaving()
{