summaryrefslogtreecommitdiff
path: root/src/entry_backend/harfbuzz.c
diff options
context:
space:
mode:
authorPhil Jones <philj56@gmail.com>2023-04-10 09:01:50 +0100
committerPhil Jones <philj56@gmail.com>2023-04-10 09:01:50 +0100
commitae8c8e36b93bfaf7120d99a6109998553eccfbcd (patch)
treecb74df01d199cdb8b65c75903bbc2580fe01a1b6 /src/entry_backend/harfbuzz.c
parent2f29475290c301af30e1067ea0aec23f5324bd3a (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/harfbuzz.c')
-rw-r--r--src/entry_backend/harfbuzz.c11
1 files changed, 6 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);