grid: don’t cut multi-column chars in half when resizing the alt screen

When we resize the alt screen, we don’t reflow the text, we simply
truncate all the lines.

When doing this, make sure we don’t truncate in the middle of a
multi-column character.
This commit is contained in:
Daniel Eklöf 2021-06-02 19:32:05 +02:00
parent 363aeea2df
commit b7709cc013
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 7 additions and 1 deletions

View file

@ -149,6 +149,8 @@
(https://codeberg.org/dnkl/foot/issues/565).
* Off-by-one error in markup of auto-detected URLs when the URL ends
in the right-most column.
* Multi-column characters being cut in half when resizing the
alternate screen.
### Security

6
grid.c
View file

@ -194,11 +194,15 @@ grid_resize_without_reflow(
new_row->dirty = old_row->dirty;
new_row->linebreak = false;
/* Clear "new" columns */
if (new_cols > old_cols) {
/* Clear "new" columns */
memset(&new_row->cells[old_cols], 0,
sizeof(struct cell) * (new_cols - old_cols));
new_row->dirty = true;
} else if (old_cols > new_cols) {
/* Make sure we don't cut a multi-column character in two */
for (int i = new_cols; i > 0 && old_row->cells[i].wc > CELL_SPACER; i--)
new_row->cells[i - 1].wc = 0;
}
/* Map sixels on current "old" row to current "new row" */