[varLib] Fill in the forward-mapped location

This commit is contained in:
Nikolaus Waxweiler 2020-02-11 15:45:49 +00:00
parent 5f753c3641
commit eb77a3be22
3 changed files with 36 additions and 2 deletions

View File

@ -743,7 +743,8 @@ def load_designspace(designspace):
assert axis_name in axes, "Location axis '%s' unknown for '%s'." % (axis_name, obj_name)
for axis_name,axis in axes.items():
if axis_name not in loc:
loc[axis_name] = axis.default
# NOTE: `axis.default` is always user-space, but `obj.location` always design-space.
loc[axis_name] = axis.map_forward(axis.default)
else:
v = axis.map_backward(loc[axis_name])
assert axis.minimum <= v <= axis.maximum, "Location for axis '%s' (mapped to %s) out of range for '%s' [%s..%s]" % (axis_name, v, obj_name, axis.minimum, axis.maximum)

View File

@ -0,0 +1,26 @@
<?xml version='1.0' encoding='utf-8'?>
<designspace format="4.0">
<axes>
<axis default="100" maximum="900" minimum="100" name="weight" tag="wght">
<map input="500" output="105"/>
<map input="300" output="57"/>
<map input="900" output="158"/>
<map input="100" output="0"/>
</axis>
<axis default="50" maximum="100" minimum="0" name="width" tag="wdth" />
</axes>
<sources>
<source filename="A.ufo">
<location>
<dimension name="weight" xvalue="0" />
<dimension name="width" xvalue="50" />
</location>
</source>
</sources>
<instances>
<instance filename="C.ufo" familyname="C" stylename="CCC">
<location>
</location>
</instance>
</instances>
</designspace>

View File

@ -1,6 +1,6 @@
from fontTools.misc.py23 import *
from fontTools.ttLib import TTFont, newTable
from fontTools.varLib import build
from fontTools.varLib import build, load_designspace
from fontTools.varLib.mutator import instantiateVariableFont
from fontTools.varLib import main as varLib_main, load_masters
from fontTools.varLib import set_default_weight_width_slant
@ -728,6 +728,13 @@ class BuildTest(unittest.TestCase):
("B", "D"): 40,
}
def test_designspace_fill_in_location(self):
ds_path = self.get_test_input("VarLibLocationTest.designspace")
ds = DesignSpaceDocument.fromfile(ds_path)
ds_loaded = load_designspace(ds)
assert ds_loaded.instances[0].location == {"weight": 0, "width": 50}
def test_load_masters_layerName_without_required_font():
ds = DesignSpaceDocument()