* Make a BStatusBar comfortable to use without any text labels.

* In SetBarHeight(), use InvalidateLayout() when used with layout management.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35418 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2010-02-06 09:48:37 +00:00
parent f0599fd4e4
commit a487da80ba
2 changed files with 31 additions and 14 deletions
+1
View File
@@ -98,6 +98,7 @@ private:
BRect _BarFrame(const font_height* fontHeight BRect _BarFrame(const font_height* fontHeight
= NULL) const; = NULL) const;
float _BarPosition(const BRect& barFrame) const; float _BarPosition(const BRect& barFrame) const;
bool _HasText() const;
BString fLabel; BString fLabel;
BString fTrailingLabel; BString fTrailingLabel;
+19 -3
View File
@@ -207,11 +207,14 @@ BStatusBar::GetPreferredSize(float* _width, float* _height)
} }
if (_height) { if (_height) {
float labelHeight = 0;
if (_HasText()) {
font_height fontHeight; font_height fontHeight;
GetFontHeight(&fontHeight); GetFontHeight(&fontHeight);
labelHeight = ceilf(fontHeight.ascent + fontHeight.descent) + 6;
}
*_height = ceilf(fontHeight.ascent + fontHeight.descent) + 6 *_height = labelHeight + BarHeight();
+ BarHeight();
} }
} }
@@ -475,10 +478,14 @@ BStatusBar::SetBarHeight(float barHeight)
return; return;
// resize so that the height fits // resize so that the height fits
if ((Flags() & B_SUPPORTS_LAYOUT) != 0) {
InvalidateLayout();
} else {
float width, height; float width, height;
GetPreferredSize(&width, &height); GetPreferredSize(&width, &height);
ResizeTo(Bounds().Width(), height); ResizeTo(Bounds().Width(), height);
} }
}
void void
@@ -813,13 +820,15 @@ BStatusBar::_SetTextData(BString& text, const char* source,
BRect BRect
BStatusBar::_BarFrame(const font_height* fontHeight) const BStatusBar::_BarFrame(const font_height* fontHeight) const
{ {
float top; float top = 2;
if (_HasText()) {
if (fontHeight == NULL) { if (fontHeight == NULL) {
font_height height; font_height height;
GetFontHeight(&height); GetFontHeight(&height);
top = ceilf(height.ascent + height.descent) + 6; top = ceilf(height.ascent + height.descent) + 6;
} else } else
top = ceilf(fontHeight->ascent + fontHeight->descent) + 6; top = ceilf(fontHeight->ascent + fontHeight->descent) + 6;
}
return BRect(2, top, Bounds().right - 2, top + BarHeight() - 4); return BRect(2, top, Bounds().right - 2, top + BarHeight() - 4);
} }
@@ -835,3 +844,10 @@ BStatusBar::_BarPosition(const BRect& barFrame) const
+ (fCurrent * (barFrame.Width() + 3) / fMax)); + (fCurrent * (barFrame.Width() + 3) / fMax));
} }
bool
BStatusBar::_HasText() const
{
return fLabel.Length() > 0 || fTrailingLabel.Length() > 0
|| fTrailingText.Length() > 0 || fText.Length() > 0;
}