[varLib] Fill in the forward-mapped location
This commit is contained in:
parent
5f753c3641
commit
eb77a3be22
@ -743,7 +743,8 @@ def load_designspace(designspace):
|
|||||||
assert axis_name in axes, "Location axis '%s' unknown for '%s'." % (axis_name, obj_name)
|
assert axis_name in axes, "Location axis '%s' unknown for '%s'." % (axis_name, obj_name)
|
||||||
for axis_name,axis in axes.items():
|
for axis_name,axis in axes.items():
|
||||||
if axis_name not in loc:
|
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:
|
else:
|
||||||
v = axis.map_backward(loc[axis_name])
|
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)
|
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)
|
||||||
|
26
Tests/varLib/data/VarLibLocationTest.designspace
Normal file
26
Tests/varLib/data/VarLibLocationTest.designspace
Normal 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>
|
@ -1,6 +1,6 @@
|
|||||||
from fontTools.misc.py23 import *
|
from fontTools.misc.py23 import *
|
||||||
from fontTools.ttLib import TTFont, newTable
|
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.mutator import instantiateVariableFont
|
||||||
from fontTools.varLib import main as varLib_main, load_masters
|
from fontTools.varLib import main as varLib_main, load_masters
|
||||||
from fontTools.varLib import set_default_weight_width_slant
|
from fontTools.varLib import set_default_weight_width_slant
|
||||||
@ -728,6 +728,13 @@ class BuildTest(unittest.TestCase):
|
|||||||
("B", "D"): 40,
|
("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():
|
def test_load_masters_layerName_without_required_font():
|
||||||
ds = DesignSpaceDocument()
|
ds = DesignSpaceDocument()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user