[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:
Behdad Esfahbod 2017-02-09 19:35:24 -08:00
parent d801056100
commit d7e8af9510
2 changed files with 11 additions and 9 deletions

View File

@ -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

View File

@ -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,
value, deviceTable = buildVarDevTable(merger.store_builder,
[getattr(a, name, 0) for a in lst])
setattr(self, name, value)
if deviceTable:
setattr(self, tableName, deviceTable)