HaikuDepot: Scrollbars for content, document window look

* All text views that potentially need scrolling are now
   embedded into a CustomScrollView. That one controls a
   vertical BScrollBar only and has B_NO_BORDER frame. Since
   the regular BScrollView doesn't do some adjustments in
   this setup, the CustomScrollView takes care of moving the
   BScrollBar such that the B_DOCUMENT_WINDOW_LOOK resize
   handle does not obscure the bottom arrow button.
This commit is contained in:
Stephan Aßmus
2013-08-04 18:29:23 +02:00
parent a8b89c6b4f
commit 127061e76f
2 changed files with 64 additions and 17 deletions
+2 -2
View File
@@ -30,7 +30,7 @@
MainWindow::MainWindow(BRect frame)
:
BWindow(frame, B_TRANSLATE_SYSTEM_NAME("HaikuDepot"),
B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_DOCUMENT_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
B_ASYNCHRONOUS_CONTROLS | B_AUTO_UPDATE_SIZE_LIMITS)
{
BMenuBar* menuBar = new BMenuBar(B_TRANSLATE("Main Menu"));
@@ -40,7 +40,7 @@ MainWindow::MainWindow(BRect frame)
fPackageListView = new PackageListView();
fPackageInfoView = new PackageInfoView(&fPackageManager);
fSplitView = new BSplitView(B_VERTICAL, B_USE_SMALL_SPACING);
fSplitView = new BSplitView(B_VERTICAL, 5.0f);
BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f)
.Add(menuBar)
+62 -15
View File
@@ -17,6 +17,7 @@
#include <LayoutUtils.h>
#include <Message.h>
#include <TabView.h>
#include <ScrollView.h>
#include <SpaceLayoutItem.h>
#include <StringView.h>
@@ -111,6 +112,41 @@ private:
};
//! Layouts the scrollbar so it looks nice with no border and the document
// window look.
class CustomScrollView : public BScrollView {
public:
CustomScrollView(const char* name, BView* target)
:
BScrollView(name, target, 0, false, true, B_NO_BORDER)
{
}
virtual void DoLayout()
{
BRect innerFrame = Bounds();
innerFrame.right -= B_V_SCROLL_BAR_WIDTH + 1;
BView* target = Target();
if (target != NULL) {
Target()->MoveTo(innerFrame.left, innerFrame.top);
Target()->ResizeTo(innerFrame.Width(), innerFrame.Height());
}
BScrollBar* scrollBar = ScrollBar(B_VERTICAL);
if (scrollBar != NULL) {
BRect rect = innerFrame;
rect.left = rect.right + 1;
rect.right = rect.left + B_V_SCROLL_BAR_WIDTH;
rect.bottom -= B_H_SCROLL_BAR_HEIGHT;
scrollBar->MoveTo(rect.left, rect.top);
scrollBar->ResizeTo(rect.Width(), rect.Height());
}
}
};
// #pragma mark - AboutView
@@ -421,19 +457,20 @@ public:
AboutView()
:
BView("about view", 0),
fLayout(new BGroupLayout(B_HORIZONTAL)),
fEmailIcon("text/x-email"),
fWebsiteIcon("text/html")
{
SetViewColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
kContentTint));
SetLayout(fLayout);
fDescriptionView = new BTextView("description view");
fDescriptionView->SetViewColor(ViewColor());
fDescriptionView->MakeEditable(false);
fDescriptionView->SetInsets(0.0f, be_plain_font->Size(), 0.0f, 0.0f);
const float textInset = be_plain_font->Size();
fDescriptionView->SetInsets(textInset, textInset, textInset, 0.0f);
BScrollView* scrollView = new CustomScrollView(
"description scroll view", fDescriptionView);
BFont smallFont;
GetFont(&smallFont);
@@ -449,9 +486,8 @@ public:
fWebsiteLinkView->SetFont(&smallFont);
fWebsiteLinkView->SetHighColor(kLightBlack);
BLayoutBuilder::Group<>(fLayout)
.Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f))
.Add(fDescriptionView, 1.0f)
BLayoutBuilder::Group<>(this, B_HORIZONTAL, 0.0f)
// .Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f))
.AddGroup(B_VERTICAL, 0.0f)
.AddGlue()
.AddGroup(B_HORIZONTAL)
@@ -465,9 +501,13 @@ public:
.End()
.End()
.End()
.Add(scrollView, 1.0f)
.SetExplicitMaxSize(BSize(B_SIZE_UNSET, B_SIZE_UNLIMITED))
.SetInsets(B_USE_DEFAULT_SPACING, 0.0f, 0.0f, 0.0f)
.SetInsets(B_USE_DEFAULT_SPACING, -1.0f, -1.0f, -1.0f)
;
scrollView->ScrollBar(B_VERTICAL)->ResizeBy(0, -B_H_SCROLL_BAR_HEIGHT);
}
virtual ~AboutView()
@@ -494,7 +534,6 @@ public:
}
private:
BGroupLayout* fLayout;
BTextView* fDescriptionView;
SharedBitmap fEmailIcon;
@@ -525,12 +564,16 @@ public:
fTextView = new BTextView("ratings view");
fTextView->SetViewColor(ViewColor());
fTextView->MakeEditable(false);
fTextView->SetInsets(0.0f, be_plain_font->Size(), 0.0f, 0.0f);
const float textInset = be_plain_font->Size();
fTextView->SetInsets(textInset, textInset, textInset, 0.0f);
BScrollView* scrollView = new CustomScrollView(
"ratings scroll view", fTextView);
BLayoutBuilder::Group<>(fLayout)
.Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f))
.Add(fTextView, 1.0f)
.SetInsets(B_USE_DEFAULT_SPACING, 0.0f, 0.0f, 0.0f)
.Add(scrollView, 1.0f)
.SetInsets(B_USE_DEFAULT_SPACING, -1.0f, -1.0f, -1.0f)
;
}
@@ -594,12 +637,16 @@ public:
fTextView = new BTextView("changelog view");
fTextView->SetViewColor(ViewColor());
fTextView->MakeEditable(false);
fTextView->SetInsets(0.0f, be_plain_font->Size(), 0.0f, 0.0f);
const float textInset = be_plain_font->Size();
fTextView->SetInsets(textInset, textInset, textInset, 0.0f);
BScrollView* scrollView = new CustomScrollView(
"changelog scroll view", fTextView);
BLayoutBuilder::Group<>(fLayout)
.Add(BSpaceLayoutItem::CreateHorizontalStrut(32.0f))
.Add(fTextView, 1.0f)
.SetInsets(B_USE_DEFAULT_SPACING, 0.0f, 0.0f, 0.0f)
.Add(scrollView, 1.0f)
.SetInsets(B_USE_DEFAULT_SPACING, -1.0f, -1.0f, -1.0f)
;
}