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, )