[varLib.models] Add optional rounding to VariationModel() relevant methods
Users to be updated to benefit. Part of https://github.com/fonttools/fonttools/issues/2213
This commit is contained in:
parent
3a9a2bd4b1
commit
fdd8267065
@ -5,6 +5,7 @@ __all__ = ['nonNone', 'allNone', 'allEqual', 'allEqualTo', 'subList',
|
|||||||
'supportScalar',
|
'supportScalar',
|
||||||
'VariationModel']
|
'VariationModel']
|
||||||
|
|
||||||
|
from fontTools.misc.roundTools import noRound
|
||||||
from .errors import VariationModelError
|
from .errors import VariationModelError
|
||||||
|
|
||||||
|
|
||||||
@ -358,7 +359,7 @@ class VariationModel(object):
|
|||||||
self.supports = supports
|
self.supports = supports
|
||||||
self.deltaWeights = deltaWeights
|
self.deltaWeights = deltaWeights
|
||||||
|
|
||||||
def getDeltas(self, masterValues):
|
def getDeltas(self, masterValues, round=noRound):
|
||||||
assert len(masterValues) == len(self.deltaWeights)
|
assert len(masterValues) == len(self.deltaWeights)
|
||||||
mapping = self.reverseMapping
|
mapping = self.reverseMapping
|
||||||
out = []
|
out = []
|
||||||
@ -366,12 +367,12 @@ class VariationModel(object):
|
|||||||
delta = masterValues[mapping[i]]
|
delta = masterValues[mapping[i]]
|
||||||
for j,weight in weights.items():
|
for j,weight in weights.items():
|
||||||
delta -= out[j] * weight
|
delta -= out[j] * weight
|
||||||
out.append(delta)
|
out.append(round(delta))
|
||||||
return out
|
return out
|
||||||
|
|
||||||
def getDeltasAndSupports(self, items):
|
def getDeltasAndSupports(self, items, round=noRound):
|
||||||
model, items = self.getSubModel(items)
|
model, items = self.getSubModel(items)
|
||||||
return model.getDeltas(items), model.supports
|
return model.getDeltas(items, round=round), model.supports
|
||||||
|
|
||||||
def getScalars(self, loc):
|
def getScalars(self, loc):
|
||||||
return [supportScalar(loc, support) for support in self.supports]
|
return [supportScalar(loc, support) for support in self.supports]
|
||||||
@ -393,12 +394,12 @@ class VariationModel(object):
|
|||||||
scalars = self.getScalars(loc)
|
scalars = self.getScalars(loc)
|
||||||
return self.interpolateFromDeltasAndScalars(deltas, scalars)
|
return self.interpolateFromDeltasAndScalars(deltas, scalars)
|
||||||
|
|
||||||
def interpolateFromMasters(self, loc, masterValues):
|
def interpolateFromMasters(self, loc, masterValues, round=noRound):
|
||||||
deltas = self.getDeltas(masterValues)
|
deltas = self.getDeltas(masterValues, round=round)
|
||||||
return self.interpolateFromDeltas(loc, deltas)
|
return self.interpolateFromDeltas(loc, deltas)
|
||||||
|
|
||||||
def interpolateFromMastersAndScalars(self, masterValues, scalars):
|
def interpolateFromMastersAndScalars(self, masterValues, scalars, round=noRound):
|
||||||
deltas = self.getDeltas(masterValues)
|
deltas = self.getDeltas(masterValues, round=round)
|
||||||
return self.interpolateFromDeltasAndScalars(deltas, scalars)
|
return self.interpolateFromDeltasAndScalars(deltas, scalars)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user