[varLib.merger] In InstancerMerger, compute scalars once

Using new VariationModel API to separate scalar calculation from
interpolation.
This commit is contained in:
Behdad Esfahbod 2017-05-23 00:52:10 -07:00
parent bc546dec10
commit 7ee1d2e2d5

View File

@ -630,20 +630,21 @@ class InstancerMerger(AligningMerger):
Merger.__init__(self, font) Merger.__init__(self, font)
self.model = model self.model = model
self.location = location self.location = location
self.scalars = model.getScalars(location)
@InstancerMerger.merger(ot.Anchor) @InstancerMerger.merger(ot.Anchor)
def merge(merger, self, lst): def merge(merger, self, lst):
XCoords = [a.XCoordinate for a in lst] XCoords = [a.XCoordinate for a in lst]
YCoords = [a.YCoordinate for a in lst] YCoords = [a.YCoordinate for a in lst]
model = merger.model model = merger.model
location = merger.location scalars = merger.scalars
self.XCoordinate = round(model.interpolateFromMasters(location, XCoords)) self.XCoordinate = round(model.interpolateFromMastersAndScalars(XCoords, scalars))
self.YCoordinate = round(model.interpolateFromMasters(location, YCoords)) self.YCoordinate = round(model.interpolateFromMastersAndScalars(YCoords, scalars))
@InstancerMerger.merger(otBase.ValueRecord) @InstancerMerger.merger(otBase.ValueRecord)
def merge(merger, self, lst): def merge(merger, self, lst):
model = merger.model model = merger.model
location = merger.location scalars = merger.scalars
# TODO Handle differing valueformats # TODO Handle differing valueformats
for name, tableName in [('XAdvance','XAdvDevice'), for name, tableName in [('XAdvance','XAdvDevice'),
('YAdvance','YAdvDevice'), ('YAdvance','YAdvDevice'),
@ -654,7 +655,7 @@ def merge(merger, self, lst):
if hasattr(self, name): if hasattr(self, name):
values = [getattr(a, name, 0) for a in lst] values = [getattr(a, name, 0) for a in lst]
value = round(model.interpolateFromMasters(location, values)) value = round(model.interpolateFromMastersAndScalars(values, scalars))
setattr(self, name, value) setattr(self, name, value)