diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh index 89640b43f..f225d6b6f 100644 --- a/src/hb-ot-hmtx-table.hh +++ b/src/hb-ot-hmtx-table.hh @@ -145,6 +145,29 @@ struct hmtxvmtx table->minTrailingBearing = min_rsb; table->maxExtent = max_extent; } + + if (T::is_horizontal) + { + const auto &OS2 = *c->plan->source->table.OS2; + if (OS2.has_data () && + table->ascender == OS2.sTypoAscender && + table->descender == OS2.sTypoDescender && + table->lineGap == OS2.sTypoLineGap) + { + table->ascender = static_cast (roundf (OS2.sTypoAscender + + MVAR.get_var (HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER, + c->plan->normalized_coords.arrayZ, + c->plan->normalized_coords.length))); + table->descender = static_cast (roundf (OS2.sTypoDescender + + MVAR.get_var (HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER, + c->plan->normalized_coords.arrayZ, + c->plan->normalized_coords.length))); + table->lineGap = static_cast (roundf (OS2.sTypoLineGap + + MVAR.get_var (HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP, + c->plan->normalized_coords.arrayZ, + c->plan->normalized_coords.length))); + } + } } #endif diff --git a/test/subset/data/expected/sync_vmetrics/playwrite_mm.subset.default.retain-all-codepoint.SPED=25,YEXT=520,wght=100-400,slnt=18.ttf b/test/subset/data/expected/sync_vmetrics/playwrite_mm.subset.default.retain-all-codepoint.SPED=25,YEXT=520,wght=100-400,slnt=18.ttf new file mode 100644 index 000000000..5311eb0eb Binary files /dev/null and b/test/subset/data/expected/sync_vmetrics/playwrite_mm.subset.default.retain-all-codepoint.SPED=25,YEXT=520,wght=100-400,slnt=18.ttf differ diff --git a/test/subset/data/fonts/playwrite_mm.subset.ttf b/test/subset/data/fonts/playwrite_mm.subset.ttf new file mode 100644 index 000000000..e939c8594 Binary files /dev/null and b/test/subset/data/fonts/playwrite_mm.subset.ttf differ diff --git a/test/subset/data/tests/sync_vmetrics.tests b/test/subset/data/tests/sync_vmetrics.tests new file mode 100644 index 000000000..8ad194306 --- /dev/null +++ b/test/subset/data/tests/sync_vmetrics.tests @@ -0,0 +1,11 @@ +FONTS: +playwrite_mm.subset.ttf + +PROFILES: +default.txt + +SUBSETS: +* + +INSTANCES: +SPED=25,YEXT=520,wght=100:400,slnt=18 diff --git a/test/subset/meson.build b/test/subset/meson.build index 38a137360..4a850ba41 100644 --- a/test/subset/meson.build +++ b/test/subset/meson.build @@ -79,7 +79,8 @@ if get_option('experimental_api') 'gdef_partial_instance', 'value_format_partial_instance', 'feature_variation_instance_collect_lookups', - 'iftb_requirements' + 'iftb_requirements', + 'sync_vmetrics', ] endif