CoreText: When finding medium face for a family prefer variable font if available

This commit is contained in:
Kovid Goyal
2024-05-16 11:37:37 +05:30
parent 5d725c4883
commit 8ba6d5a296
3 changed files with 22 additions and 7 deletions

View File

@@ -92,7 +92,7 @@ def pprint(*a: Any) -> None:
pprint(*a)
def find_medium_variant(font: Descriptor) -> Descriptor:
def find_medium_variant(font: DescriptorVar) -> DescriptorVar:
font = font.copy()
vd = get_variable_data_for_descriptor(font)
for i, ns in enumerate(vd['named_styles']):

View File

@@ -183,6 +183,15 @@ def find_best_match(
if possible != ignore_face:
return possible
# See if we have a variable font
if not bold and not italic and font_map['variable_map'].get(q):
candidates = font_map['variable_map'][q]
candidates = scorer.sorted_candidates(candidates)
possible = candidates[0]
if possible != ignore_face:
from .common import find_medium_variant
return find_medium_variant(possible)
# Let CoreText choose the font if the family exists, otherwise
# fallback to Menlo
if q not in font_map['family_map']: