src/hb-ot-shape.cc | 24 +++++++++++++----------- src/hb-ot-shape.hh | 5 +++-- 2 files changed, 16 insertions(+), 13 deletions(-)
New commits: commit 0b9d60e1a1c4b7867ac907bbd7c004191a14e697 Author: Behdad Esfahbod <[email protected]> Date: Thu Oct 11 13:26:58 2018 -0400 [aat] Apply kerx if GPOS kern was not applied Ned tells me this is what Apple does. diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 2b147e34..a5538871 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -100,17 +100,15 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan, else if (hb_aat_layout_has_positioning (face)) plan.apply_kerx = true; - if (plan.requested_kerning) + if (plan.requested_kerning && !plan.apply_kerx && !has_gpos_kern) { - if (plan.apply_kerx) - ;/* kerx supercedes kern. */ - else if (!has_gpos_kern) - { - if (hb_ot_layout_has_kerning (face)) - plan.apply_kern = true; - else - plan.fallback_kerning = true; - } + /* Apparently Apple applies kerx if GPOS kern was not applied. */ + if (hb_aat_layout_has_positioning (face)) + plan.apply_kerx = true; + if (hb_ot_layout_has_kerning (face)) + plan.apply_kern = true; + else + plan.fallback_kerning = true; } plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k')); commit b59a428af08d6451a47f40ed01e594815ebf6303 Author: Behdad Esfahbod <[email protected]> Date: Thu Oct 11 13:24:17 2018 -0400 Minor diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 3ca54ac8..2b147e34 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -116,6 +116,9 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan, plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k')); if (!plan.apply_gpos && !plan.apply_kerx) plan.fallback_mark_positioning = true; + + /* Currently we always apply trak. */ + plan.apply_trak = hb_aat_layout_has_tracking (face); } @@ -838,7 +841,8 @@ hb_ot_position_complex (const hb_ot_shape_context_t *c) else if (c->plan->apply_kerx) hb_aat_layout_position (c->plan, c->font, c->buffer); - hb_aat_layout_track (c->plan, c->font, c->buffer); + if (c->plan->apply_trak) + hb_aat_layout_track (c->plan, c->font, c->buffer); if (!c->plan->apply_kerx) switch (c->plan->shaper->zero_width_marks) diff --git a/src/hb-ot-shape.hh b/src/hb-ot-shape.hh index 4943c515..c9c0d3e0 100644 --- a/src/hb-ot-shape.hh +++ b/src/hb-ot-shape.hh @@ -50,10 +50,11 @@ struct hb_ot_shape_plan_t bool fallback_kerning : 1; bool fallback_mark_positioning : 1; - bool apply_morx : 1; + bool apply_gpos : 1; bool apply_kerx : 1; bool apply_kern : 1; - bool apply_gpos : 1; + bool apply_morx : 1; + bool apply_trak : 1; inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const _______________________________________________ HarfBuzz mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/harfbuzz
