[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)
|
minV, defaultV, maxV = _expand(value)
|
||||||
if defaultV is None:
|
if defaultV is None:
|
||||||
defaultV = default
|
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)
|
value = (minV, defaultV, maxV)
|
||||||
|
|
||||||
|
@ -3,6 +3,9 @@ from fontTools.varLib.models import supportScalar
|
|||||||
def _negate(*values):
|
def _negate(*values):
|
||||||
yield from (-1 * v for v in values)
|
yield from (-1 * v for v in values)
|
||||||
|
|
||||||
|
def _revnegate(v):
|
||||||
|
return (-v[2], -v[1], -v[0])
|
||||||
|
|
||||||
def _solvePinned(tent, axisLimit):
|
def _solvePinned(tent, axisLimit):
|
||||||
|
|
||||||
axisMin, axisDef, axisMax = axisLimit
|
axisMin, axisDef, axisMax = axisLimit
|
||||||
@ -101,7 +104,32 @@ def _solveDefaultUnmoved(tent, axisLimit):
|
|||||||
return [(scalar1, loc), (scalar2, newloc)]
|
return [(scalar1, loc), (scalar2, newloc)]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def _solveGeneral(tent, axisLimit):
|
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
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user