diff --git a/Lib/fontTools/varLib/__init__.py b/Lib/fontTools/varLib/__init__.py
index ba798ceea..d5a8daccc 100644
--- a/Lib/fontTools/varLib/__init__.py
+++ b/Lib/fontTools/varLib/__init__.py
@@ -563,9 +563,17 @@ def _get_advance_metrics(
):
vhAdvanceDeltasAndSupports = {}
vOrigDeltasAndSupports = {}
+ # HACK: we treat width 65535 and lsb -32768 as sentinel values to signal that a
+ # glyph from a non-default master should not participate in computing {H,V}VAR,
+ # as if it were missing. Allows to variate other glyph-related data independently
+ # from glyph metrics
+ sparse_metrics = (0xFFFF, -0x8000)
for glyph in glyphOrder:
vhAdvances = [
- metrics[glyph][0] if glyph in metrics else None for metrics in advMetricses
+ metrics[glyph][0]
+ if glyph in metrics and metrics[glyph] != sparse_metrics
+ else None
+ for i, metrics in enumerate(advMetricses)
]
vhAdvanceDeltasAndSupports[glyph] = masterModel.getDeltasAndSupports(
vhAdvances, round=round
diff --git a/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Bold.ttx b/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Bold.ttx
index f744a8ad6..410489dc9 100644
--- a/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Bold.ttx
+++ b/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Bold.ttx
@@ -294,7 +294,7 @@
-
+
diff --git a/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Medium.ttx b/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Medium.ttx
index 880183ea1..41cf6ce07 100644
--- a/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Medium.ttx
+++ b/Tests/varLib/data/master_sparse_cff2_empty/SparseCFF-Medium.ttx
@@ -93,7 +93,7 @@
-
+
diff --git a/Tests/varLib/data/test_results/SparseCFF2-VF.ttx b/Tests/varLib/data/test_results/SparseCFF2-VF.ttx
index eea7a4eb3..574506cc2 100644
--- a/Tests/varLib/data/test_results/SparseCFF2-VF.ttx
+++ b/Tests/varLib/data/test_results/SparseCFF2-VF.ttx
@@ -116,4 +116,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tests/varLib/varLib_test.py b/Tests/varLib/varLib_test.py
index bcb2bae8b..87616ae2e 100644
--- a/Tests/varLib/varLib_test.py
+++ b/Tests/varLib/varLib_test.py
@@ -1004,7 +1004,7 @@ Expected to see .ScriptCount==1, instead saw 0""",
self._run_varlib_build_test(
designspace_name="SparseCFF2",
font_name="SparseCFF2",
- tables=["GlyphOrder", "CFF2", "fvar"],
+ tables=["GlyphOrder", "CFF2", "fvar", "hmtx", "HVAR"],
expected_ttx_name="SparseCFF2-VF",
save_before_dump=True,
)