From b93ee8c4ff43c5ea49ea9b339041ce866a6c0cd7 Mon Sep 17 00:00:00 2001 From: Caleb Hearon Date: Fri, 24 Jun 2022 15:07:37 +0000 Subject: [PATCH] improve multi-family output in font desc resolver the problem was exposed by #1987, but was always there fixes #2041 --- CHANGELOG.md | 1 + src/Canvas.cc | 13 ++++++++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b32b16f52..a7f63b9c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ project adheres to [Semantic Versioning](http://semver.org/). ### Changed ### Added ### Fixed +* Wrong fonts used when calling `registerFont` multiple times with the same family name (#2041) 2.9.1 ================== diff --git a/src/Canvas.cc b/src/Canvas.cc index 9270031f2..3e339f033 100644 --- a/src/Canvas.cc +++ b/src/Canvas.cc @@ -879,18 +879,21 @@ Canvas::ResolveFontDescription(const PangoFontDescription *desc) { if (streq_casein(family, pangofamily)) { const char* sys_desc_family_name = pango_font_description_get_family(ff.sys_desc); bool unseen = seen_families.find(sys_desc_family_name) == seen_families.end(); + bool better = best.user_desc == nullptr || pango_font_description_better_match(desc, best.user_desc, ff.user_desc); // Avoid sending duplicate SFNT font names due to a bug in Pango for macOS: // https://bugzilla.gnome.org/show_bug.cgi?id=762873 if (unseen) { seen_families.insert(sys_desc_family_name); - if (renamed_families.size()) renamed_families += ','; - renamed_families += sys_desc_family_name; - } - if (first && (best.user_desc == nullptr || pango_font_description_better_match(desc, best.user_desc, ff.user_desc))) { - best = ff; + if (better) { + renamed_families = string(sys_desc_family_name) + (renamed_families.size() ? "," : "") + renamed_families; + } else { + renamed_families = renamed_families + (renamed_families.size() ? "," : "") + sys_desc_family_name; + } } + + if (first && better) best = ff; } }