From 9679c7474e96ac5299520bc2778d7839af6a8829 Mon Sep 17 00:00:00 2001 From: C. McEnroe Date: Wed, 2 Sep 2020 16:06:34 -0400 Subject: Reimplement split scrolling --- ui.c | 29 +++++++++++++++++++++++------ 1 file 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) { -- cgit 1.4.1-2-gfad0