[instancer.solver] Start fleshing out L4
This commit is contained in:
parent
eef320e974
commit
e94f564149
@ -1041,11 +1041,6 @@ def normalizeAxisLimits(varfont, axisLimits, usingAvar=True):
|
||||
minV, defaultV, maxV = _expand(value)
|
||||
if defaultV is None:
|
||||
defaultV = default
|
||||
if (minV != maxV or minV != defaultV) and defaultV != default:
|
||||
raise NotImplementedError(
|
||||
f"Unsupported range {axis_tag}={minV:g}:{defaultV:g}:{maxV:g}; "
|
||||
f"can't change default position ({axis_tag}={default:g})"
|
||||
)
|
||||
|
||||
value = (minV, defaultV, maxV)
|
||||
|
||||
|
@ -3,6 +3,9 @@ from fontTools.varLib.models import supportScalar
|
||||
def _negate(*values):
|
||||
yield from (-1 * v for v in values)
|
||||
|
||||
def _revnegate(v):
|
||||
return (-v[2], -v[1], -v[0])
|
||||
|
||||
def _solvePinned(tent, axisLimit):
|
||||
|
||||
axisMin, axisDef, axisMax = axisLimit
|
||||
@ -101,7 +104,32 @@ def _solveDefaultUnmoved(tent, axisLimit):
|
||||
return [(scalar1, loc), (scalar2, newloc)]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def _solveGeneral(tent, axisLimit):
|
||||
axisMin, axisDef, axisMax = axisLimit
|
||||
lower, peak, upper = tent
|
||||
|
||||
if axisDef > peak:
|
||||
return [(scalar, _revnegate(t))
|
||||
for scalar,t
|
||||
in _solveGeneral(_revnegate(tent),
|
||||
_revnegate(axisLimit))]
|
||||
# axisDef <= peak
|
||||
|
||||
if axisMax <= lower and axisMax < peak:
|
||||
return [] # No overlap
|
||||
|
||||
if axisMax < peak:
|
||||
mult = supportScalar({'tag': peak}, {'tag': axisLimit})
|
||||
tent = (lower, axisMax, axisMax)
|
||||
return [(scalar*mult, t) for scalar,t in _solveGeneral(tent, axisLimit)]
|
||||
|
||||
# axisDef <= peak <= axisMax
|
||||
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user