diff --git a/commands.c b/commands.c index 01e73981..5d20b94b 100644 --- a/commands.c +++ b/commands.c @@ -72,7 +72,7 @@ cmd_scrollback_up(struct terminal *term, int rows) term->grid->view = new_view; if (diff >= 0 && diff < term->rows) { - term_damage_scroll(term, DAMAGE_SCROLL_REVERSE, (struct scroll_region){0, term->rows}, diff); + term_damage_scroll(term, DAMAGE_SCROLL_REVERSE_IN_VIEW, (struct scroll_region){0, term->rows}, diff); term_damage_rows_in_view(term, 0, diff - 1); } else term_damage_view(term); @@ -142,7 +142,7 @@ cmd_scrollback_down(struct terminal *term, int rows) term->grid->view = new_view; if (diff >= 0 && diff < term->rows) { - term_damage_scroll(term, DAMAGE_SCROLL, (struct scroll_region){0, term->rows}, diff); + term_damage_scroll(term, DAMAGE_SCROLL_IN_VIEW, (struct scroll_region){0, term->rows}, diff); term_damage_rows_in_view(term, term->rows - diff, term->rows - 1); } else term_damage_view(term); diff --git a/render.c b/render.c index de5c2246..ca127389 100644 --- a/render.c +++ b/render.c @@ -530,22 +530,29 @@ grid_render(struct terminal *term) } } - if (term->grid->view == term->grid->offset) { - tll_foreach(term->grid->scroll_damage, it) { - switch (it->item.type) { - case DAMAGE_SCROLL: + tll_foreach(term->grid->scroll_damage, it) { + switch (it->item.type) { + case DAMAGE_SCROLL: + if (term->grid->view == term->grid->offset) grid_render_scroll(term, buf, &it->item); - break; + break; - case DAMAGE_SCROLL_REVERSE: + case DAMAGE_SCROLL_REVERSE: + if (term->grid->view == term->grid->offset) grid_render_scroll_reverse(term, buf, &it->item); - break; - } + break; - tll_remove(term->grid->scroll_damage, it); + case DAMAGE_SCROLL_IN_VIEW: + grid_render_scroll(term, buf, &it->item); + break; + + case DAMAGE_SCROLL_REVERSE_IN_VIEW: + grid_render_scroll_reverse(term, buf, &it->item); + break; } - } else - tll_free(term->grid->scroll_damage); + + tll_remove(term->grid->scroll_damage, it); + } if (term->render.workers.count > 0) { diff --git a/terminal.h b/terminal.h index 6f6e1d53..2a014d90 100644 --- a/terminal.h +++ b/terminal.h @@ -129,7 +129,9 @@ struct coord { int row; }; -enum damage_type {DAMAGE_SCROLL, DAMAGE_SCROLL_REVERSE}; +enum damage_type {DAMAGE_SCROLL, DAMAGE_SCROLL_REVERSE, + DAMAGE_SCROLL_IN_VIEW, DAMAGE_SCROLL_REVERSE_IN_VIEW}; + struct damage { enum damage_type type; /* DAMAGE_SCROLL, DAMAGE_SCROLL_REVERSE */