From 4acf6a82bf47a602a9378c84d80a9ccb885145d0 Mon Sep 17 00:00:00 2001 From: Qunxin Liu Date: Tue, 30 May 2023 09:26:58 -0700 Subject: [PATCH] [instancer-solver] port solver fix from fonttools See https://github.com/fonttools/fonttools/issues/3139 --- src/hb-subset-instancer-solver.cc | 2 +- src/test-subset-instancer-solver.cc | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/hb-subset-instancer-solver.cc b/src/hb-subset-instancer-solver.cc index 3484e203f..549eef30e 100644 --- a/src/hb-subset-instancer-solver.cc +++ b/src/hb-subset-instancer-solver.cc @@ -173,7 +173,7 @@ _solve (Triple tent, Triple axisLimit, bool negative = false) // Crossing point on the axis. float crossing = peak + ((1 - gain) * (upper - peak) / (1 - outGain)); - Triple loc{peak, peak, crossing}; + Triple loc{axisDef, peak, crossing}; float scalar = 1.f; // The part before the crossing point. diff --git a/src/test-subset-instancer-solver.cc b/src/test-subset-instancer-solver.cc index 11de3aaf2..58a5d7f96 100644 --- a/src/test-subset-instancer-solver.cc +++ b/src/test-subset-instancer-solver.cc @@ -331,6 +331,24 @@ main (int argc, char **argv) assert (out[0].second == Triple (0.f, 0.4f, 32767/(float) (1 << 14))); } + + { + Triple tent (0.f, 0.5f, 1.f); + Triple axis_range (-1.f, 0.25f, 1.f); + result_t out = rebase_tent (tent, axis_range); + assert (out.length == 5); + assert (out[0].first == 0.5f); + assert (out[0].second == Triple ()); + assert (out[1].first == 0.5f); + assert (out[1].second == Triple (0.f, 1.f/3, 2.f/3)); + assert (out[2].first == -0.5f); + assert (out[2].second == Triple (2.f/3, 1.f, 1.f)); + assert (out[3].first == -0.5f); + assert (out[3].second == Triple (-1.f, -0.2f, 0.f)); + assert (out[4].first == -0.5f); + assert (out[4].second == Triple (-1.f, -1.f, -0.2f)); + } + { Triple tent (0.5f, 0.5f, 0.5f); Triple axis_range (0.f, 0.5f, 1.f);