mirror of https://github.com/OpenRCT2/OpenRCT2.git
Implement console scrolling by pageup and pagedown
This commit is contained in:
parent
90ea8eee88
commit
8e93c69e47
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue