Reimplement split scrolling
parent
a0c8a46c75
commit
9679c7474e
29
ui.c
29
ui.c
|
@ -447,19 +447,24 @@ void uiHide(void) {
|
||||||
endwin();
|
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) {
|
static void windowUpdate(void) {
|
||||||
struct Window *window = windows.ptrs[windows.show];
|
struct Window *window = windows.ptrs[windows.show];
|
||||||
|
|
||||||
int y = MAIN_LINES - 1;
|
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);
|
const struct Line *line = bufferHard(window->buffer, i);
|
||||||
if (!line) continue;
|
if (!line) continue;
|
||||||
if (line->heat < Cold && window->ignore) continue;
|
if (line->heat < Cold && window->ignore) continue;
|
||||||
wmove(main, y, 0);
|
mainAdd(y, line->str);
|
||||||
styleAdd(main, line->str);
|
|
||||||
int ny, nx;
|
|
||||||
getyx(main, ny, nx);
|
|
||||||
if (ny == y) wclrtoeol(main);
|
|
||||||
if (!y--) break;
|
if (!y--) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,6 +472,18 @@ static void windowUpdate(void) {
|
||||||
wmove(main, y--, 0);
|
wmove(main, y--, 0);
|
||||||
wclrtoeol(main);
|
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) {
|
static void windowScroll(struct Window *window, int n) {
|
||||||
|
|
Loading…
Reference in New Issue