scroll: destroy scrolled out sixels before scroll is applied

The logic that breaks out of sixel loops does not work for rows that
has already wrapped around.

Thus, we need to destroy sixels that are about to be scrolled
out *before* we actually scroll.

Since this is the *only* time we destroy sixels (instead of
overwriting it), rename the sixel functions. And, since they now do a
very specific thing, they can be greatly simplified (and thus faster).
This commit is contained in:
Daniel Eklöf 2020-06-29 22:01:02 +02:00
parent a136987678
commit 62be729c45
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
4 changed files with 64 additions and 142 deletions

11
sixel.h
View file

@ -12,15 +12,8 @@ void sixel_unhook(struct terminal *term);
void sixel_destroy(struct sixel *sixel);
/*
* Deletes all sixels that are touched by the specified row(s). Used
* when scrolling, to competely remove sixels that has either
* completely, or partly scrolled out of history.
*
* Row numbers are relative to the current grid offset.
*/
void sixel_delete_in_range(struct terminal *term, int row_start, int row_end);
void sixel_delete_at_row(struct terminal *term, int row);
void sixel_scroll_up(struct terminal *term, int rows);
void sixel_scroll_down(struct terminal *term, int rows);
/*
* Remove sixel data from the specified location. Used when printing