diff options
author | June McEnroe <june@causal.agency> | 2020-09-02 16:06:34 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-09-02 16:06:34 -0400 |
commit | 9679c7474e96ac5299520bc2778d7839af6a8829 (patch) | |
tree | d04f387f182b0fb37e958145ec52608c47b9af90 | |
parent | Fix inserting blank lines BEFORE the new message (diff) | |
download | catgirl-9679c7474e96ac5299520bc2778d7839af6a8829.tar.gz catgirl-9679c7474e96ac5299520bc2778d7839af6a8829.zip |
Reimplement split scrolling
-rw-r--r-- | ui.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/ui.c b/ui.c index 18af635..df51a3d 100644 --- a/ui.c +++ b/ui.c @@ -447,19 +447,24 @@ void uiHide(void) { endwin(); } +static void mainAdd(int y, const char *str) { + int ny, nx; + wmove(main, y, 0); + styleAdd(main, str); + getyx(main, ny, nx); + if (ny == y) wclrtoeol(main); +} + static void windowUpdate(void) { struct Window *window = windows.ptrs[windows.show]; int y = MAIN_LINES - 1; - for (size_t i = BufferCap - 1 - window->scroll; i < BufferCap; --i) { + size_t bottom = BufferCap - 1 - window->scroll + !!window->scroll; + for (size_t i = bottom; i < BufferCap; --i) { const struct Line *line = bufferHard(window->buffer, i); if (!line) continue; if (line->heat < Cold && window->ignore) continue; - wmove(main, y, 0); - styleAdd(main, line->str); - int ny, nx; - getyx(main, ny, nx); - if (ny == y) wclrtoeol(main); + mainAdd(y, line->str); if (!y--) break; } @@ -467,6 +472,18 @@ static void windowUpdate(void) { wmove(main, y--, 0); wclrtoeol(main); } + if (!window->scroll) return; + + y = MAIN_LINES - 1; + for (size_t i = BufferCap - 1; i < BufferCap; --i) { + const struct Line *line = bufferHard(window->buffer, i); + if (!line) continue; + if (line->heat < Cold && window->ignore) continue; + mainAdd(y, line->str); + if (--y < MAIN_LINES - SplitLines) break; + } + wattr_set(main, A_NORMAL, 0, NULL); + mvwhline(main, y, 0, ACS_BULLET, COLS); } static void windowScroll(struct Window *window, int n) { |