Merge pull request #2886 from fonttools/l4-default-wght-wdth-slnt

[instancer] update OS/2 class and post.italicAngle when default moved (L4)
This commit is contained in:
Cosimo Lupo 2022-11-10 10:29:07 +00:00 committed by GitHub
commit ded595f03c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 2 deletions

View File

@ -257,6 +257,10 @@ class _BaseAxisLimits(Mapping[str, AxisTriple]):
def __str__(self) -> str: def __str__(self) -> str:
return str(self._data) return str(self._data)
def defaultLocation(self) -> Dict[str, float]:
"""Return a dict of default axis values."""
return {k: v.default for k, v in self.items()}
def pinnedLocation(self) -> Dict[str, float]: def pinnedLocation(self) -> Dict[str, float]:
"""Return a location dict with only the pinned axes.""" """Return a location dict with only the pinned axes."""
return {k: v.default for k, v in self.items() if v.minimum == v.maximum} return {k: v.default for k, v in self.items() if v.minimum == v.maximum}
@ -1167,7 +1171,9 @@ def instantiateVariableFont(
ignoreErrors=(overlap == OverlapMode.REMOVE_AND_IGNORE_ERRORS), ignoreErrors=(overlap == OverlapMode.REMOVE_AND_IGNORE_ERRORS),
) )
varLib.set_default_weight_width_slant(varfont, location=axisLimits.pinnedLocation()) varLib.set_default_weight_width_slant(
varfont, location=axisLimits.defaultLocation()
)
if updateFontNames: if updateFontNames:
# Set Regular/Italic/Bold/Bold Italic bits as appropriate, after the # Set Regular/Italic/Bold/Bold Italic bits as appropriate, after the

View File

@ -115,7 +115,7 @@ def updateNameTable(varfont, axisLimits):
# If we're instantiating a partial font, we will populate the unpinned # If we're instantiating a partial font, we will populate the unpinned
# axes with their default axis values from fvar. # axes with their default axis values from fvar.
axisLimits = AxisLimits(axisLimits).populateDefaults(varfont) axisLimits = AxisLimits(axisLimits).populateDefaults(varfont)
partialDefaults = {k: v.default for k, v in axisLimits.items()} partialDefaults = axisLimits.defaultLocation()
fvarDefaults = {a.axisTag: a.defaultValue for a in fvar.axes} fvarDefaults = {a.axisTag: a.defaultValue for a in fvar.axes}
defaultAxisCoords = AxisLimits({**fvarDefaults, **partialDefaults}) defaultAxisCoords = AxisLimits({**fvarDefaults, **partialDefaults})
assert all(v.minimum == v.maximum for v in defaultAxisCoords.values()) assert all(v.minimum == v.maximum for v in defaultAxisCoords.values())

View File

@ -1502,6 +1502,18 @@ class InstantiateVariableFontTest(object):
assert _dump_ttx(instance) == expected assert _dump_ttx(instance) == expected
def test_move_weight_width_axis_default(self, varfont2):
# https://github.com/fonttools/fonttools/issues/2885
assert varfont2["OS/2"].usWeightClass == 400
assert varfont2["OS/2"].usWidthClass == 5
varfont = instancer.instantiateVariableFont(
varfont2, {"wght": (100, 500, 900), "wdth": 87.5}
)
assert varfont["OS/2"].usWeightClass == 500
assert varfont["OS/2"].usWidthClass == 4
@pytest.mark.parametrize( @pytest.mark.parametrize(
"overlap, wght", "overlap, wght",
[ [