[instancer.solver] Fix case where axisDef < lower and upper < axisMax
Fixes https://github.com/fonttools/fonttools/issues/3291
This commit is contained in:
parent
27932c525b
commit
f1e56cd757
@ -99,11 +99,13 @@ def _solve(tent, axisLimit, negative=False):
|
|||||||
# axisDef | axisMax
|
# axisDef | axisMax
|
||||||
# |
|
# |
|
||||||
# crossing
|
# crossing
|
||||||
if gain > outGain:
|
if gain >= outGain:
|
||||||
|
# Note that this is the branch taken if both gain and outGain are 0.
|
||||||
|
|
||||||
# Crossing point on the axis.
|
# Crossing point on the axis.
|
||||||
crossing = peak + (1 - gain) * (upper - peak)
|
crossing = peak + (1 - gain) * (upper - peak)
|
||||||
|
|
||||||
loc = (axisDef, peak, crossing)
|
loc = (max(lower, axisDef), peak, crossing)
|
||||||
scalar = 1
|
scalar = 1
|
||||||
|
|
||||||
# The part before the crossing point.
|
# The part before the crossing point.
|
||||||
@ -175,7 +177,7 @@ def _solve(tent, axisLimit, negative=False):
|
|||||||
# axisDef axisMax
|
# axisDef axisMax
|
||||||
#
|
#
|
||||||
newUpper = peak + (1 - gain) * (upper - peak)
|
newUpper = peak + (1 - gain) * (upper - peak)
|
||||||
assert axisMax <= newUpper # Because outGain >= gain
|
assert axisMax <= newUpper # Because outGain > gain
|
||||||
if newUpper <= axisDef + (axisMax - axisDef) * 2:
|
if newUpper <= axisDef + (axisMax - axisDef) * 2:
|
||||||
upper = newUpper
|
upper = newUpper
|
||||||
if not negative and axisDef + (axisMax - axisDef) * MAX_F2DOT14 < upper:
|
if not negative and axisDef + (axisMax - axisDef) * MAX_F2DOT14 < upper:
|
||||||
|
@ -276,6 +276,14 @@ class RebaseTentTest(object):
|
|||||||
(1.0, (0.5, 1.0, 1.0)),
|
(1.0, (0.5, 1.0, 1.0)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
# https://github.com/fonttools/fonttools/issues/3291
|
||||||
|
pytest.param(
|
||||||
|
(0.6, 0.7, 0.8),
|
||||||
|
(-1, 0.2, +1, 1, 1),
|
||||||
|
[
|
||||||
|
(1.0, (0.5, 0.625, 0.75)),
|
||||||
|
],
|
||||||
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_rebaseTent(self, tent, axisRange, expected):
|
def test_rebaseTent(self, tent, axisRange, expected):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user