[varLib] Fix regression where GPOS values were stored as 0
Another fallover from merging of VariationMerger and InstancerMerger. New code is closer to the selfless merger we want to have. Fixes https://github.com/fonttools/fonttools/issues/834
This commit is contained in:
parent
d801056100
commit
d7e8af9510
@ -124,11 +124,12 @@ class OnlineVarStoreBuilder(object):
|
||||
return self._store
|
||||
|
||||
def storeMasters(self, master_values):
|
||||
deltas = [int(round(d)) for d in self._model.getDeltas(master_values)[1:]]
|
||||
deltas = [int(round(d)) for d in self._model.getDeltas(master_values)]
|
||||
base = deltas.pop(0)
|
||||
inner = len(self._data.Item)
|
||||
self._data.Item.append(deltas)
|
||||
# TODO Check for full data array?
|
||||
return (self._outer << 16) + inner
|
||||
return base, (self._outer << 16) + inner
|
||||
|
||||
|
||||
|
||||
|
@ -593,15 +593,15 @@ def _all_equal(lst):
|
||||
|
||||
def buildVarDevTable(store_builder, master_values):
|
||||
if _all_equal(master_values):
|
||||
return None
|
||||
varIdx = store_builder.storeMasters(master_values)
|
||||
return builder.buildVarDevTable(varIdx)
|
||||
return master_values[0], None
|
||||
base, varIdx = store_builder.storeMasters(master_values)
|
||||
return base, builder.buildVarDevTable(varIdx)
|
||||
|
||||
@VariationMerger.merger(ot.Anchor)
|
||||
def merge(merger, self, lst):
|
||||
assert self.Format == 1
|
||||
XDeviceTable = buildVarDevTable(merger.store_builder, [a.XCoordinate for a in lst])
|
||||
YDeviceTable = buildVarDevTable(merger.store_builder, [a.YCoordinate for a in lst])
|
||||
self.XCoordinate, XDeviceTable = buildVarDevTable(merger.store_builder, [a.XCoordinate for a in lst])
|
||||
self.YCoordinate, YDeviceTable = buildVarDevTable(merger.store_builder, [a.YCoordinate for a in lst])
|
||||
if XDeviceTable or YDeviceTable:
|
||||
self.Format = 3
|
||||
self.XDeviceTable = XDeviceTable
|
||||
@ -615,7 +615,8 @@ def merge(merger, self, lst):
|
||||
('YPlacement','YPlaDevice')]:
|
||||
|
||||
if hasattr(self, name):
|
||||
deviceTable = buildVarDevTable(merger.store_builder,
|
||||
[getattr(a, name, 0) for a in lst])
|
||||
value, deviceTable = buildVarDevTable(merger.store_builder,
|
||||
[getattr(a, name, 0) for a in lst])
|
||||
setattr(self, name, value)
|
||||
if deviceTable:
|
||||
setattr(self, tableName, deviceTable)
|
||||
|
Loading…
x
Reference in New Issue
Block a user