[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
|
return self._store
|
||||||
|
|
||||||
def storeMasters(self, master_values):
|
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)
|
inner = len(self._data.Item)
|
||||||
self._data.Item.append(deltas)
|
self._data.Item.append(deltas)
|
||||||
# TODO Check for full data array?
|
# 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):
|
def buildVarDevTable(store_builder, master_values):
|
||||||
if _all_equal(master_values):
|
if _all_equal(master_values):
|
||||||
return None
|
return master_values[0], None
|
||||||
varIdx = store_builder.storeMasters(master_values)
|
base, varIdx = store_builder.storeMasters(master_values)
|
||||||
return builder.buildVarDevTable(varIdx)
|
return base, builder.buildVarDevTable(varIdx)
|
||||||
|
|
||||||
@VariationMerger.merger(ot.Anchor)
|
@VariationMerger.merger(ot.Anchor)
|
||||||
def merge(merger, self, lst):
|
def merge(merger, self, lst):
|
||||||
assert self.Format == 1
|
assert self.Format == 1
|
||||||
XDeviceTable = buildVarDevTable(merger.store_builder, [a.XCoordinate for a in lst])
|
self.XCoordinate, XDeviceTable = buildVarDevTable(merger.store_builder, [a.XCoordinate for a in lst])
|
||||||
YDeviceTable = buildVarDevTable(merger.store_builder, [a.YCoordinate for a in lst])
|
self.YCoordinate, YDeviceTable = buildVarDevTable(merger.store_builder, [a.YCoordinate for a in lst])
|
||||||
if XDeviceTable or YDeviceTable:
|
if XDeviceTable or YDeviceTable:
|
||||||
self.Format = 3
|
self.Format = 3
|
||||||
self.XDeviceTable = XDeviceTable
|
self.XDeviceTable = XDeviceTable
|
||||||
@ -615,7 +615,8 @@ def merge(merger, self, lst):
|
|||||||
('YPlacement','YPlaDevice')]:
|
('YPlacement','YPlaDevice')]:
|
||||||
|
|
||||||
if hasattr(self, name):
|
if hasattr(self, name):
|
||||||
deviceTable = buildVarDevTable(merger.store_builder,
|
value, deviceTable = buildVarDevTable(merger.store_builder,
|
||||||
[getattr(a, name, 0) for a in lst])
|
[getattr(a, name, 0) for a in lst])
|
||||||
|
setattr(self, name, value)
|
||||||
if deviceTable:
|
if deviceTable:
|
||||||
setattr(self, tableName, deviceTable)
|
setattr(self, tableName, deviceTable)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user