mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-05 04:06:08 -05:00
render: resize: copy styled underlines to temporary grid
When doing an interactive resize, we create a small grid copy of the current viewport, and then do a non-reflow resize. When the interactive resize is done, we do a proper reflow. This is for performance reasons. When creating the viewport copy, we also need to copy the styled underlines. Otherwise, styled underlines will be rendered as plain underlines *while resizing*.
This commit is contained in:
parent
b20302c2a7
commit
963ce45f3f
1 changed files with 23 additions and 0 deletions
23
render.c
23
render.c
|
|
@ -4395,6 +4395,29 @@ render_resize(struct terminal *term, int width, int height, uint8_t opts)
|
|||
memcpy(g.rows[i]->cells,
|
||||
orig->rows[j]->cells,
|
||||
g.num_cols * sizeof(g.rows[i]->cells[0]));
|
||||
|
||||
if (orig->rows[j]->extra == NULL ||
|
||||
orig->rows[j]->extra->curly_ranges.count == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy undercurly ranges
|
||||
*/
|
||||
|
||||
const struct row_ranges *curly_src = &orig->rows[j]->extra->curly_ranges;
|
||||
|
||||
const int count = curly_src->count;
|
||||
g.rows[i]->extra = xcalloc(1, sizeof(*g.rows[i]->extra));
|
||||
g.rows[i]->extra->curly_ranges.v = xmalloc(
|
||||
count * sizeof(g.rows[i]->extra->curly_ranges.v[0]));
|
||||
|
||||
struct row_ranges *curly_dst = &g.rows[i]->extra->curly_ranges;
|
||||
curly_dst->count = curly_dst->size = count;
|
||||
|
||||
for (int k = 0; k < count; k++)
|
||||
curly_dst->v[k] = curly_src->v[k];
|
||||
}
|
||||
|
||||
term->normal = g;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue