render: render combining characters

This is basically just a loop that renders additional glyphs on top
off the base glyph.

Since we now need access to the row struct, for the combining
characters, the function prototype for 'render_cell()' has changed.

When rendering the combining characters we also need to deal with
broken fonts; some fonts use positive offsets (as if the combining
character was a regular character), while others use a negative
offset (to be used as if you had already advanced the pen position).

We handle both - a positive offset is rendered just like a regular
glyph. When we see a negative offset we simply add the width of a cell
first.
This commit is contained in:
Daniel Eklöf 2020-05-01 11:56:13 +02:00
parent 40bf01a8e6
commit 76567e9ef0
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 35 additions and 12 deletions

View file

@ -1319,7 +1319,7 @@ term_reset(struct terminal *term, bool hard)
tll_free(term->normal.scroll_damage);
tll_free(term->alt.damage);
tll_free(term->alt.scroll_damage);
term->render.last_cursor.cell = NULL;
term->render.last_cursor.row = NULL;
term->render.was_flashing = false;
term_damage_all(term);
}