mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-04 04:06:06 -05:00
scrollback: use scroll damage to speed up scrolling
When scrolling through the scrollback lines, use scroll damage instead of re-rendering the entire screen whenever it makes sense. I.e. when the number of lines isn't a whole page or more.
This commit is contained in:
parent
c411dedc3b
commit
42fdb3653d
1 changed files with 24 additions and 2 deletions
26
commands.c
26
commands.c
|
|
@ -59,9 +59,20 @@ cmd_scrollback_up(struct terminal *term, int rows)
|
|||
if (new_view == term->grid->view)
|
||||
return;
|
||||
|
||||
int diff = -1;
|
||||
if (new_view < term->grid->view)
|
||||
diff = term->grid->view - new_view;
|
||||
else
|
||||
diff = (term->grid->num_rows - new_view) + term->grid->view;
|
||||
|
||||
term->grid->view = new_view;
|
||||
|
||||
term_damage_view(term);
|
||||
if (diff >= 0 && diff < term->rows) {
|
||||
term_damage_scroll(term, DAMAGE_SCROLL_REVERSE, (struct scroll_region){0, term->rows}, diff);
|
||||
term_damage_rows_in_view(term, 0, diff - 1);
|
||||
} else
|
||||
term_damage_view(term);
|
||||
|
||||
render_refresh(term);
|
||||
}
|
||||
|
||||
|
|
@ -118,8 +129,19 @@ cmd_scrollback_down(struct terminal *term, int rows)
|
|||
if (new_view == term->grid->view)
|
||||
return;
|
||||
|
||||
int diff = -1;
|
||||
if (new_view > term->grid->view)
|
||||
diff = new_view - term->grid->view;
|
||||
else
|
||||
diff = (term->grid->num_rows - term->grid->view) + new_view;
|
||||
|
||||
term->grid->view = new_view;
|
||||
|
||||
term_damage_view(term);
|
||||
if (diff >= 0 && diff < term->rows) {
|
||||
term_damage_scroll(term, DAMAGE_SCROLL, (struct scroll_region){0, term->rows}, diff);
|
||||
term_damage_rows_in_view(term, term->rows - diff, term->rows - 1);
|
||||
} else
|
||||
term_damage_view(term);
|
||||
|
||||
render_refresh(term);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue