[varLib.merger] Use new API for faster interpolation in Instancer

This commit is contained in:
Behdad Esfahbod 2023-12-10 18:38:13 -07:00
parent 5a5898c824
commit 455fc87081

View File

@ -1059,7 +1059,7 @@ 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) self.masterScalars = model.getMasterScalars(location)
@InstancerMerger.merger(ot.CaretValue) @InstancerMerger.merger(ot.CaretValue)
@ -1067,8 +1067,10 @@ def merge(merger, self, lst):
assert self.Format == 1 assert self.Format == 1
Coords = [a.Coordinate for a in lst] Coords = [a.Coordinate for a in lst]
model = merger.model model = merger.model
scalars = merger.scalars masterScalars = merger.masterScalars
self.Coordinate = otRound(model.interpolateFromMastersAndScalars(Coords, scalars)) self.Coordinate = otRound(
model.interpolateFromMastersAndMasterScalars(Coords, masterScalars)
)
@InstancerMerger.merger(ot.Anchor) @InstancerMerger.merger(ot.Anchor)
@ -1077,15 +1079,19 @@ 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
scalars = merger.scalars masterScalars = merger.masterScalars
self.XCoordinate = otRound(model.interpolateFromMastersAndScalars(XCoords, scalars)) self.XCoordinate = otRound(
self.YCoordinate = otRound(model.interpolateFromMastersAndScalars(YCoords, scalars)) model.interpolateFromMastersAndMasterScalars(XCoords, masterScalars)
)
self.YCoordinate = otRound(
model.interpolateFromMastersAndMasterScalars(YCoords, masterScalars)
)
@InstancerMerger.merger(otBase.ValueRecord) @InstancerMerger.merger(otBase.ValueRecord)
def merge(merger, self, lst): def merge(merger, self, lst):
model = merger.model model = merger.model
scalars = merger.scalars masterScalars = merger.masterScalars
# TODO Handle differing valueformats # TODO Handle differing valueformats
for name, tableName in [ for name, tableName in [
("XAdvance", "XAdvDevice"), ("XAdvance", "XAdvDevice"),
@ -1097,7 +1103,9 @@ 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 = otRound(model.interpolateFromMastersAndScalars(values, scalars)) value = otRound(
model.interpolateFromMastersAndMasterScalars(values, masterScalars)
)
setattr(self, name, value) setattr(self, name, value)