(svn r21981) -Codechange: Deduplicate the code and unify the bounds of console scrolling.

This commit is contained in:
frosch 2011-02-05 17:53:29 +00:00
parent 582d30c979
commit 82f260e15f
1 changed files with 15 additions and 24 deletions

View File

@ -189,6 +189,17 @@ struct IConsoleWindow : Window
_iconsole_mode = ICONSOLE_CLOSED; _iconsole_mode = ICONSOLE_CLOSED;
} }
/**
* Scroll the content of the console.
* @param amount Number of lines to scroll back.
*/
void Scroll(int amount)
{
int max_scroll = max<int>(0, IConsoleLine::size + 1 - this->height / this->line_height);
IConsoleWindow::scroll = Clamp<int>(IConsoleWindow::scroll + amount, 0, max_scroll);
this->SetDirty();
}
virtual void OnPaint() virtual void OnPaint()
{ {
const int right = this->width - 5; const int right = this->width - 5;
@ -245,39 +256,19 @@ struct IConsoleWindow : Window
break; break;
case WKC_SHIFT | WKC_PAGEDOWN: case WKC_SHIFT | WKC_PAGEDOWN:
if (IConsoleWindow::scroll - scroll_height < 0) { this->Scroll(-scroll_height);
IConsoleWindow::scroll = 0;
} else {
IConsoleWindow::scroll -= scroll_height;
}
this->SetDirty();
break; break;
case WKC_SHIFT | WKC_PAGEUP: case WKC_SHIFT | WKC_PAGEUP:
if (IConsoleWindow::scroll + scroll_height > IConsoleLine::size - scroll_height) { this->Scroll(scroll_height);
IConsoleWindow::scroll = IConsoleLine::size - scroll_height;
} else {
IConsoleWindow::scroll += scroll_height;
}
this->SetDirty();
break; break;
case WKC_SHIFT | WKC_DOWN: case WKC_SHIFT | WKC_DOWN:
if (IConsoleWindow::scroll <= 0) { this->Scroll(-1);
IConsoleWindow::scroll = 0;
} else {
--IConsoleWindow::scroll;
}
this->SetDirty();
break; break;
case WKC_SHIFT | WKC_UP: case WKC_SHIFT | WKC_UP:
if (IConsoleWindow::scroll >= IConsoleLine::size) { this->Scroll(1);
IConsoleWindow::scroll = IConsoleLine::size;
} else {
++IConsoleWindow::scroll;
}
this->SetDirty();
break; break;
case WKC_BACKQUOTE: case WKC_BACKQUOTE: