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:
Daniel Eklöf 2024-06-24 00:57:24 +02:00
parent b20302c2a7
commit 963ce45f3f
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

View file

@ -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;