Add box-drawings-uses-font-glyphs=no|yes option #445

Manually merged
dnkl merged 2 commits from optionally-render-box-drawing-characters-using-font-glyphs into master 10 months ago
  1. 2
      CHANGELOG.md
  2. 4
      config.c
  3. 2
      config.h
  4. 18
      doc/foot.ini.5.scd
  5. 1
      foot.ini
  6. 4
      render.c

2
CHANGELOG.md

@ -32,6 +32,8 @@
(https://codeberg.org/dnkl/foot/issues/436).
* OSC 17/117/19/119 - change/reset selection background/foreground
color.
* `box-drawings-uses-font-glyphs=yes|no` option to `foot.ini`
(https://codeberg.org/dnkl/foot/issues/430).
### Changed

4
config.c

@ -770,6 +770,9 @@ parse_section_main(const char *key, const char *value, struct config *conf,
}
}
else if (strcmp(key, "box-drawings-uses-font-glyphs") == 0)
conf->box_drawings_uses_font_glyphs = str_to_bool(value);
else {
LOG_AND_NOTIFY_ERR("%s:%u: [default]: %s: invalid key", path, lineno, key);
return false;
@ -2198,6 +2201,7 @@ config_load(struct config *conf, const char *conf_path,
.letter_spacing = { .pt = 0, .px = 0, },
.horizontal_letter_offset = {.pt = 0, .px = 0, },
.vertical_letter_offset = {.pt = 0, .px = 0, },
.box_drawings_uses_font_glyphs = false,
.dpi_aware = DPI_AWARE_AUTO, /* DPI-aware when scaling-factor == 1 */
.scrollback = {
.lines = 1000,

2
config.h

@ -99,6 +99,8 @@ struct config {
struct pt_or_px horizontal_letter_offset;
struct pt_or_px vertical_letter_offset;
bool box_drawings_uses_font_glyphs;
struct {
int lines;

18
doc/foot.ini.5.scd

@ -96,6 +96,24 @@ in this order:
Default: _0_.
*box-drawings-uses-font-glyphs*
Boolean. When disabled, foot generates box/line drawing characters
itself. The are several advantages to doing this instead of using
font glyphs:
- No antialiasing effects where e.g. line endpoints appear dimmer.
- Line- and box characters are guaranteed to span the entire cell,
resulting in a gap-less appearance.
- No alignment issues, i.e. lines are centered when they should be.
- Many fonts lack some, or all, of the line- and box drawing
characters, causing fallback fonts to be used, which results
in out-of-place (for example, badly sized) looking glyphs.
When enabled, box/line drawing characters are rendered using font
glyphs. This may result in a more uniform look, in some use cases.
Default: _no_.
*dpi-aware*
*auto*, *yes*, or *no*. When set to *yes*, fonts are sized using
the monitor's DPI, making a font of a given size have the same

1
foot.ini

@ -12,6 +12,7 @@
# letter-spacing=0
# horizontal-letter-offset=0
# vertical-letter-offset=0
# box-drawings-uses-font-glyphs=no
# dpi-aware=yes
# initial-window-size-pixels=700x500 # Or,

4
render.c

@ -465,7 +465,9 @@ render_cell(struct terminal *term, pixman_image_t *pix,
}
if (unlikely((base >= 0x2500 && base <= 0x259f) ||
(base >= 0x1fb00 && base <= 0x1fb3b))) {
(base >= 0x1fb00 && base <= 0x1fb3b)) &&
likely(!term->conf->box_drawings_uses_font_glyphs))
{
/* Box drawing characters */
size_t idx = base >= 0x1fb00 ? base - 0x1fb00 + 160 : base - 0x2500;
xassert(idx < ALEN(term->box_drawing));

Loading…
Cancel
Save