Implement console scrolling by pageup and pagedown

This commit is contained in:
wolfreak99 2017-08-26 12:19:03 -04:00 committed by Michael Steenbeek
parent 90ea8eee88
commit 8e93c69e47
4 changed files with 37 additions and 26 deletions

View File

@ -344,7 +344,7 @@ public:
case SDL_MOUSEWHEEL:
if (gConsoleOpen)
{
console_scroll(e.wheel.y);
console_scroll(e.wheel.y * 3); // Scroll 3 lines at a time
break;
}
_cursorState.wheel += e.wheel.y * 128;

View File

@ -43,6 +43,12 @@ static void input_handle_console(sint32 key)
case SDL_SCANCODE_DOWN:
input = CONSOLE_INPUT_HISTORY_NEXT;
break;
case SDL_SCANCODE_PAGEUP:
input = CONSOLE_INPUT_SCROLL_PREVIOUS;
break;
case SDL_SCANCODE_PAGEDOWN:
input = CONSOLE_INPUT_SCROLL_NEXT;
break;
}
if (input != CONSOLE_INPUT_NONE) {
console_input(input);

View File

@ -70,7 +70,6 @@ static sint32 _consoleHistoryCount = 0;
static void console_invalidate();
static void console_write_prompt();
static void console_update_scroll();
static void console_clear_input();
static void console_history_add(const utf8 *src);
static void console_write_all_commands();
@ -83,6 +82,8 @@ static sint32 cc_help(const utf8 **argv, sint32 argc);
static bool invalidArguments(bool *invalid, bool arguments);
static sint32 console_get_num_visible_lines();
#define SET_FLAG(variable, flag, value) {if (value) variable |= flag; else variable &= ~flag;}
void console_open()
@ -90,7 +91,6 @@ void console_open()
gConsoleOpen = true;
_consoleScrollPos = 0;
console_refresh_caret();
console_update_scroll();
_consoleTextInputSession = context_start_text_input(_consoleCurrentLine, sizeof(_consoleCurrentLine));
}
@ -162,7 +162,7 @@ void console_draw(rct_drawpixelinfo *dpi)
sint32 lineHeight = font_get_line_height(gCurrentFontSpriteBase);
sint32 lines = 0;
sint32 maxLines = ((_consoleBottom - 22 - _consoleTop) / lineHeight) - 1;
sint32 maxLines = console_get_num_visible_lines();
utf8 *ch = strchr(_consoleBuffer, 0);
while (ch > _consoleBuffer) {
ch--;
@ -264,6 +264,7 @@ void console_input(CONSOLE_INPUT input)
console_clear_input();
console_refresh_caret();
}
_consoleScrollPos = 0;
break;
case CONSOLE_INPUT_HISTORY_PREVIOUS:
if (_consoleHistoryIndex > 0) {
@ -286,6 +287,18 @@ void console_input(CONSOLE_INPUT input)
console_clear_input();
}
break;
case CONSOLE_INPUT_SCROLL_PREVIOUS:
{
sint32 scrollAmt = console_get_num_visible_lines() - 1;
console_scroll(scrollAmt);
break;
}
case CONSOLE_INPUT_SCROLL_NEXT:
{
sint32 scrollAmt = console_get_num_visible_lines() - 1;
console_scroll(-scrollAmt);
break;
}
default:
break;
}
@ -313,7 +326,6 @@ void console_write(const utf8 *src)
}
safe_strcpy(_consoleBufferPointer, src, charactersRemainingInBuffer);
_consoleBufferPointer += charactersToWrite;
console_update_scroll();
}
void console_writeline(const utf8 *src)
@ -359,41 +371,32 @@ double console_parse_double(const utf8 *src, bool *valid) {
return value;
}
static void console_update_scroll()
void console_scroll(sint32 linesToScroll)
{
/*sint32 lines = 0;
sint32 maxLines = ((_consoleBottom - 22 - _consoleTop) / 10) - 1;
char *ch = strchr(_consoleBuffer, 0);
while (ch > _consoleBuffer && lines < maxLines) {
ch--;
if (*ch == '\n')
lines++;
}
if (*ch == '\n')
ch++;
_consoleViewBufferStart = ch;*/
}
void console_scroll(sint32 delta)
{
sint32 speed = 3;
sint32 speed = abs(linesToScroll);
sint32 lines = 0;
sint32 maxLines = ((_consoleBottom - 22 - _consoleTop) / 10) - 1;
sint32 maxLines = console_get_num_visible_lines();
utf8 *ch = strchr(_consoleBuffer, 0);
while (ch > _consoleBuffer) {
ch--;
if (*ch == '\n')
lines++;
}
if (delta > 0 && _consoleScrollPos + 1 < (lines - maxLines + 4)) {
if (linesToScroll > 0 && _consoleScrollPos + 1 < (lines - maxLines + 4)) {
_consoleScrollPos = min(_consoleScrollPos + speed, (lines - maxLines + 4));
}
else if (delta < 0 && _consoleScrollPos > 0) {
else if (linesToScroll < 0 && _consoleScrollPos > 0) {
_consoleScrollPos = max(_consoleScrollPos - speed, 0);
}
}
// Calculates the amount of visible lines, based on the console size, excluding the input line.
static sint32 console_get_num_visible_lines()
{
const sint32 lineHeight = 10;
return ((_consoleBottom - 22 - _consoleTop) / lineHeight) - 1;
}
void console_clear()
{
_consoleScrollPos = 0;

View File

@ -27,6 +27,8 @@ typedef enum CONSOLE_INPUT
CONSOLE_INPUT_LINE_EXECUTE,
CONSOLE_INPUT_HISTORY_PREVIOUS,
CONSOLE_INPUT_HISTORY_NEXT,
CONSOLE_INPUT_SCROLL_PREVIOUS,
CONSOLE_INPUT_SCROLL_NEXT,
} CONSOLE_INPUT;
extern bool gConsoleOpen;