mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-23 01:40:12 -05:00
render: optionally enable heuristics that deal with private usage area chars
Try to detect double-width *glyphs* for single-width *characters*, and allow them to overflow into the next cell. This is only done for single-width chars with a glyph width that is at least 1.5 cells wide, but at most 3 cells. The feature is gated by the new ‘tweak.allow-overflowing-double-width-glyphs’, and is disabled by default. Closes #116
This commit is contained in:
parent
bb8d9378c9
commit
b71016c25d
5 changed files with 52 additions and 1 deletions
25
render.c
25
render.c
|
|
@ -433,6 +433,31 @@ render_cell(struct terminal *term, pixman_image_t *pix,
|
|||
const int cols_left = term->cols - col;
|
||||
int cell_cols = glyph != NULL ? max(1, min(glyph->cols, cols_left)) : 1;
|
||||
|
||||
/*
|
||||
* Hack!
|
||||
*
|
||||
* Deal with double-width glyphs for which wcwidth() returns
|
||||
* 1. Typically Unicode private usage area characters,
|
||||
* e.g. powerline, or nerd hack fonts.
|
||||
*
|
||||
* Users can enable a tweak option that lets this glyphs
|
||||
* overflow/bleed into the neighbouring cell.
|
||||
*
|
||||
* We only apply this workaround if:
|
||||
* - the user has explicitly enabled this feature
|
||||
* - the *character* width is 1
|
||||
* - the *glyph* width is at least 1.5 cells
|
||||
* - the *glyph* width is less than 3 cells
|
||||
*/
|
||||
if (term->conf->tweak.allow_overflowing_double_width_glyphs &&
|
||||
glyph != NULL &&
|
||||
glyph->cols == 1 &&
|
||||
glyph->width >= term->cell_width * 15 / 10 &&
|
||||
glyph->width < 3 * term->cell_width)
|
||||
{
|
||||
cell_cols = min(2, cols_left);
|
||||
}
|
||||
|
||||
pixman_region32_t clip;
|
||||
pixman_region32_init_rect(
|
||||
&clip, x, y,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue