diff options
author | Phil Jones <philj56@gmail.com> | 2023-04-10 09:01:50 +0100 |
---|---|---|
committer | Phil Jones <philj56@gmail.com> | 2023-04-10 09:01:50 +0100 |
commit | ae8c8e36b93bfaf7120d99a6109998553eccfbcd (patch) | |
tree | cb74df01d199cdb8b65c75903bbc2580fe01a1b6 /src/entry_backend | |
parent | 2f29475290c301af30e1067ea0aec23f5324bd3a (diff) |
Fix broken line spacing with some fonts.
I had misunderstood the purpose of the OpenType line gap field 'hlgp'. I
thought this was a suggested total line spacing, but it's actually extra
spacing to be added to (ascender - descender).
Diffstat (limited to 'src/entry_backend')
-rw-r--r-- | src/entry_backend/harfbuzz.c | 11 | ||||
-rw-r--r-- | src/entry_backend/harfbuzz.h | 1 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/entry_backend/harfbuzz.c b/src/entry_backend/harfbuzz.c index f2e331c..134204c 100644 --- a/src/entry_backend/harfbuzz.c +++ b/src/entry_backend/harfbuzz.c @@ -601,9 +601,10 @@ void entry_backend_harfbuzz_init( } - if (hb->hb_font_extents.line_gap == 0) { - hb->hb_font_extents.line_gap = (hb->hb_font_extents.ascender - hb->hb_font_extents.descender); - } + hb->line_spacing = + hb->hb_font_extents.ascender + - hb->hb_font_extents.descender + + hb->hb_font_extents.line_gap; log_debug("Creating Harfbuzz buffer.\n"); hb->hb_buffer = hb_buffer_create(); @@ -734,7 +735,7 @@ void entry_backend_harfbuzz_update(struct entry *entry) if (entry->horizontal) { cairo_translate(cr, extents.x_advance + entry->result_spacing, 0); } else { - cairo_translate(cr, 0, entry->harfbuzz.hb_font_extents.line_gap / 64.0 + entry->result_spacing); + cairo_translate(cr, 0, entry->harfbuzz.line_spacing / 64.0 + entry->result_spacing); } if (entry->num_results == 0) { if (size_overflows(entry, 0, 0)) { @@ -780,7 +781,7 @@ void entry_backend_harfbuzz_update(struct entry *entry) * The height of the text doesn't change, so * we don't need to re-measure it each time. */ - if (size_overflows(entry, 0, entry->harfbuzz.hb_font_extents.line_gap / 64.0)) { + if (size_overflows(entry, 0, entry->harfbuzz.line_spacing / 64.0)) { break; } else { extents = render_text_themed(cr, entry, result, theme); diff --git a/src/entry_backend/harfbuzz.h b/src/entry_backend/harfbuzz.h index faf0c68..e15e785 100644 --- a/src/entry_backend/harfbuzz.h +++ b/src/entry_backend/harfbuzz.h @@ -27,6 +27,7 @@ struct entry_backend_harfbuzz { uint8_t num_variations; uint8_t num_features; + double line_spacing; double scale; bool disable_hinting; |