Added shortcuts to increase and decrease the font size. Since

these key combinations (ALT + +/-) can't be used on many keymaps, we 
might want to change. Moved view resizing to a private window method. 
Seems to work, more or less (ticket #1334) 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23791 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stefano Ceccherini 2008-01-30 12:39:28 +00:00
parent 5cc2ed98e2
commit 58cf7360ca
4 changed files with 92 additions and 39 deletions

View File

@ -406,6 +406,14 @@ TermView::SetEncoding(int encoding)
}
void
TermView::GetTermFont(BFont *font) const
{
if (font != NULL)
*font = fHalfFont;
}
//! Sets font for terminal
void
TermView::SetTermFont(const BFont *font)

View File

@ -40,7 +40,9 @@ public:
const char *TerminalName() const;
void GetTermFont(BFont *font) const;
void SetTermFont(const BFont *font);
void GetFontSize(int *width, int *height);
BRect SetTermSize(int rows, int cols, bool resize);

View File

@ -41,9 +41,13 @@
const static float kViewOffset = 3;
const static int32 kMaxTabs = 6;
// messages constants
const static uint32 kNewTab = 'NTab';
const static uint32 kCloseView = 'ClVw';
const static int32 kMaxTabs = 6;
const static uint32 kIncreaseFontSize = 'InFs';
const static uint32 kDecreaseFontSize = 'DcFs';
class CustomTermView : public TermView {
@ -100,6 +104,9 @@ TermWindow::_InitWindow()
// make menu bar
_SetupMenu();
AddShortcut('+', B_COMMAND_KEY, new BMessage(kIncreaseFontSize));
AddShortcut('-', B_COMMAND_KEY, new BMessage(kDecreaseFontSize));
BRect textFrame = Bounds();
textFrame.top = fMenubar->Bounds().bottom + 1.0;
@ -220,6 +227,10 @@ TermWindow::MessageReceived(BMessage *message)
_ActiveTermView()->SelectAll();
break;
case B_ABOUT_REQUESTED:
be_app->PostMessage(B_ABOUT_REQUESTED);
break;
case MENU_CLEAR_ALL:
_ActiveTermView()->Clear();
break;
@ -228,22 +239,6 @@ TermWindow::MessageReceived(BMessage *message)
be_app->PostMessage(MENU_SWITCH_TERM);
break;
case kNewTab:
if (fTabView->CountTabs() < kMaxTabs)
_AddTab(NULL);
break;
case kCloseView:
{
TermView* termView;
if (message->FindPointer("termView", (void**)&termView) == B_OK) {
int32 index = _IndexOfTermView(termView);
if (index >= 0)
_RemoveTab(index);
}
break;
}
case MENU_NEW_TERM:
{
app_info info;
@ -364,27 +359,9 @@ TermWindow::MessageReceived(BMessage *message)
BFont font;
_GetPreferredFont(font);
_ActiveTermView()->SetTermFont(&font);
int fontWidth, fontHeight;
_ActiveTermView()->GetFontSize(&fontWidth, &fontHeight);
float minimumHeight = 0;
if (fMenubar)
minimumHeight += fMenubar->Bounds().Height();
if (fTabView && fTabView->CountTabs() > 1)
minimumHeight += fTabView->TabHeight();
_ResizeView(_ActiveTermView());
SetSizeLimits(MIN_COLS * fontWidth, MAX_COLS * fontWidth,
minimumHeight + MIN_ROWS * fontHeight,
minimumHeight + MAX_ROWS * fontHeight);
float width, height;
_ActiveTermView()->GetPreferredSize(&width, &height);
width += B_V_SCROLL_BAR_WIDTH + kViewOffset * 2;
height += fMenubar->Bounds().Height() + kViewOffset * 2;
ResizeTo(width, height);
_ActiveTermView()->Invalidate();
break;
}
case EIGHTYTWENTYFOUR:
@ -472,10 +449,49 @@ TermWindow::MessageReceived(BMessage *message)
_CheckChildren();
break;
case B_ABOUT_REQUESTED:
be_app->PostMessage(B_ABOUT_REQUESTED);
case kNewTab:
if (fTabView->CountTabs() < kMaxTabs)
_AddTab(NULL);
break;
case kCloseView:
{
TermView* termView;
if (message->FindPointer("termView", (void**)&termView) == B_OK) {
int32 index = _IndexOfTermView(termView);
if (index >= 0)
_RemoveTab(index);
}
break;
}
case kIncreaseFontSize:
case kDecreaseFontSize:
{
message->PrintToStream();
TermView *view = _ActiveTermView();
BFont font;
view->GetTermFont(&font);
float size = font.Size();
if (message->what == kIncreaseFontSize)
size += 1;
else
size -= 1;
// limit the font size
if (size < 8)
size = 8;
else if (size > 20)
size = 20;
font.SetSize(size);
view->SetTermFont(&font);
_ResizeView(view);
break;
}
default:
BWindow::MessageReceived(message);
break;
@ -686,6 +702,32 @@ TermWindow::_IndexOfTermView(TermView* termView) const
}
void
TermWindow::_ResizeView(TermView *view)
{
int fontWidth, fontHeight;
view->GetFontSize(&fontWidth, &fontHeight);
float minimumHeight = 0;
if (fMenubar)
minimumHeight += fMenubar->Bounds().Height();
if (fTabView && fTabView->CountTabs() > 1)
minimumHeight += fTabView->TabHeight();
SetSizeLimits(MIN_COLS * fontWidth, MAX_COLS * fontWidth,
minimumHeight + MIN_ROWS * fontHeight,
minimumHeight + MAX_ROWS * fontHeight);
float width, height;
view->GetPreferredSize(&width, &height);
width += B_V_SCROLL_BAR_WIDTH + kViewOffset * 2;
height += fMenubar->Bounds().Height() + kViewOffset * 2;
ResizeTo(width, height);
view->Invalidate();
}
void
TermWindow::_CheckChildren()
{

View File

@ -69,6 +69,7 @@ private:
TermView* _ActiveTermView();
int32 _IndexOfTermView(TermView* termView) const;
void _CheckChildren();
void _ResizeView(TermView *view);
SmartTabView *fTabView;
TermView *fTermView;