Fixed various layout/size related issues (mostly off-by-one bugs). The
terminal opens with the correct size, now. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25969 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
535841fcb5
commit
272f87d67b
@ -21,11 +21,15 @@ const static uint32 kCloseTab = 'ClTb';
|
||||
SmartTabView::SmartTabView(BRect frame, const char *name, button_width width,
|
||||
uint32 resizingMode, uint32 flags)
|
||||
:
|
||||
BTabView(frame, name, width, resizingMode, flags)
|
||||
BTabView(frame, name, width, resizingMode, flags),
|
||||
fInsets(0, 0, 0, 0)
|
||||
{
|
||||
// See BTabView::_InitObject() to see why we are doing this
|
||||
ContainerView()->MoveBy(-3, -TabHeight() - 3);
|
||||
ContainerView()->ResizeBy(10, TabHeight() + 9);
|
||||
// Resize the container view to fill the complete tab view for single-tab
|
||||
// mode. Later, when more than one tab is added, we shrink the container
|
||||
// view again.
|
||||
frame.OffsetTo(B_ORIGIN);
|
||||
ContainerView()->MoveTo(frame.LeftTop());
|
||||
ContainerView()->ResizeTo(frame.Width(), frame.Height());
|
||||
}
|
||||
|
||||
|
||||
@ -34,6 +38,16 @@ SmartTabView::~SmartTabView()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SmartTabView::SetInsets(float left, float top, float right, float bottom)
|
||||
{
|
||||
fInsets.left = left;
|
||||
fInsets.top = top;
|
||||
fInsets.right = right;
|
||||
fInsets.bottom = bottom;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SmartTabView::MouseDown(BPoint point)
|
||||
{
|
||||
@ -106,8 +120,10 @@ SmartTabView::Select(int32 index)
|
||||
BTabView::Select(index);
|
||||
BView *view = ViewForTab(index);
|
||||
if (view != NULL) {
|
||||
view->ResizeTo(ContainerView()->Bounds().Width(),
|
||||
ContainerView()->Bounds().Height());
|
||||
view->MoveTo(fInsets.LeftTop());
|
||||
view->ResizeTo(ContainerView()->Bounds().Width()
|
||||
- fInsets.left - fInsets.right,
|
||||
ContainerView()->Bounds().Height() - fInsets.top - fInsets.bottom);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,8 @@ public:
|
||||
B_FRAME_EVENTS | B_NAVIGABLE);
|
||||
virtual ~SmartTabView();
|
||||
|
||||
void SetInsets(float left, float top, float right, float bottom);
|
||||
|
||||
virtual void MouseDown(BPoint where);
|
||||
|
||||
virtual void AttachedToWindow();
|
||||
@ -39,6 +41,9 @@ public:
|
||||
|
||||
private:
|
||||
int32 _ClickedTabIndex(const BPoint &point);
|
||||
|
||||
private:
|
||||
BRect fInsets;
|
||||
};
|
||||
|
||||
#endif // __SMARTTABVIEW_H
|
||||
|
@ -32,13 +32,18 @@ public:
|
||||
TermScrollView::TermScrollView(const char* name, BView* child, BView* target,
|
||||
uint32 resizingMode)
|
||||
:
|
||||
BScrollView(name, child, resizingMode, 0, false, true)
|
||||
BScrollView(name, child, resizingMode, 0, false, true, B_NO_BORDER)
|
||||
{
|
||||
// replace the vertical scroll bar with our own
|
||||
if (fVerticalScrollBar != NULL) {
|
||||
BRect frame(fVerticalScrollBar->Frame());
|
||||
RemoveChild(fVerticalScrollBar);
|
||||
|
||||
// Overlap one pixel at the top and the bottom of the scroll bar with
|
||||
// the menu respectively resize knob for aesthetical reasons.
|
||||
frame.top -= 1;
|
||||
frame.bottom += 1;
|
||||
|
||||
TermScrollBar* scrollBar = new TermScrollBar(frame, "_VSB_", target, 0,
|
||||
1000, B_VERTICAL);
|
||||
AddChild(scrollBar);
|
||||
|
@ -456,9 +456,9 @@ void
|
||||
TermView::GetPreferredSize(float *width, float *height)
|
||||
{
|
||||
if (width)
|
||||
*width = fTermColumns * fFontWidth;
|
||||
*width = fTermColumns * fFontWidth - 1;
|
||||
if (height)
|
||||
*height = fTermRows * fFontHeight;
|
||||
*height = fTermRows * fFontHeight - 1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -179,6 +179,10 @@ TermWindow::_InitWindow()
|
||||
|
||||
fTabView = new TabView(this, textFrame, "tab view");
|
||||
AddChild(fTabView);
|
||||
|
||||
// Make the scroll view one pixel wider than the tab view container view, so
|
||||
// the scroll bar will look good.
|
||||
fTabView->SetInsets(0, 0, -1, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -670,10 +674,6 @@ TermWindow::_AddTab(Arguments *args)
|
||||
tab->SetLabel(session->name.String());
|
||||
view->SetScrollBar(scrollView->ScrollBar(B_VERTICAL));
|
||||
|
||||
// Resize the vertical scrollbar to take the window gripping handle into account
|
||||
// TODO: shouldn't this be done in BScrollView itself ? At least BScrollBar does that.
|
||||
scrollView->ScrollBar(B_VERTICAL)->ResizeBy(0, -13);
|
||||
|
||||
view->SetEncoding(EncodingID(PrefHandler::Default()->getString(PREF_TEXT_ENCODING)));
|
||||
|
||||
BFont font;
|
||||
@ -685,14 +685,14 @@ TermWindow::_AddTab(Arguments *args)
|
||||
int width, height;
|
||||
view->GetFontSize(&width, &height);
|
||||
|
||||
float minimumHeight = 0;
|
||||
float minimumHeight = -1;
|
||||
if (fMenubar)
|
||||
minimumHeight += fMenubar->Bounds().Height();
|
||||
minimumHeight += fMenubar->Bounds().Height() + 1;
|
||||
if (fTabView && fTabView->CountTabs() > 1)
|
||||
minimumHeight += fTabView->TabHeight();
|
||||
SetSizeLimits(MIN_COLS * width, MAX_COLS * width,
|
||||
minimumHeight + MIN_ROWS * height,
|
||||
minimumHeight + MAX_ROWS * height);
|
||||
minimumHeight += fTabView->TabHeight() + 1;
|
||||
SetSizeLimits(MIN_COLS * width - 1, MAX_COLS * width - 1,
|
||||
minimumHeight + MIN_ROWS * height - 1,
|
||||
minimumHeight + MAX_ROWS * height - 1);
|
||||
|
||||
// If it's the first time we're called, setup the window
|
||||
if (fTabView->CountTabs() == 1) {
|
||||
@ -701,7 +701,9 @@ TermWindow::_AddTab(Arguments *args)
|
||||
|
||||
// Resize Window
|
||||
ResizeTo(viewWidth + B_V_SCROLL_BAR_WIDTH,
|
||||
viewHeight + fMenubar->Bounds().Height());
|
||||
viewHeight + fMenubar->Bounds().Height() + 1);
|
||||
// NOTE: Width is one pixel too small, since the scroll view
|
||||
// is one pixel wider than its parent.
|
||||
}
|
||||
// TODO: No fTabView->Select(tab); ?
|
||||
fTabView->Select(fTabView->CountTabs() - 1);
|
||||
@ -789,24 +791,26 @@ TermWindow::_ResizeView(TermView *view)
|
||||
{
|
||||
int fontWidth, fontHeight;
|
||||
view->GetFontSize(&fontWidth, &fontHeight);
|
||||
|
||||
float minimumHeight = 0;
|
||||
|
||||
float minimumHeight = -1;
|
||||
if (fMenubar)
|
||||
minimumHeight += fMenubar->Bounds().Height();
|
||||
minimumHeight += fMenubar->Bounds().Height() + 1;
|
||||
if (fTabView && fTabView->CountTabs() > 1)
|
||||
minimumHeight += fTabView->TabHeight();
|
||||
|
||||
SetSizeLimits(MIN_COLS * fontWidth, MAX_COLS * fontWidth,
|
||||
minimumHeight + MIN_ROWS * fontHeight,
|
||||
minimumHeight + MAX_ROWS * fontHeight);
|
||||
minimumHeight += fTabView->TabHeight() + 1;
|
||||
|
||||
SetSizeLimits(MIN_COLS * fontWidth - 1, MAX_COLS * fontWidth - 1,
|
||||
minimumHeight + MIN_ROWS * fontHeight - 1,
|
||||
minimumHeight + MAX_ROWS * fontHeight - 1);
|
||||
|
||||
float width, height;
|
||||
view->Parent()->GetPreferredSize(&width, &height);
|
||||
width += B_V_SCROLL_BAR_WIDTH;
|
||||
height += fMenubar->Bounds().Height() + 2;
|
||||
// NOTE: Width is one pixel too small, since the scroll view
|
||||
// is one pixel wider than its parent.
|
||||
height += fMenubar->Bounds().Height() + 1;
|
||||
|
||||
ResizeTo(width, height);
|
||||
|
||||
|
||||
view->Invalidate();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user