[kerx] Hook up to shaper
This commit is contained in:
parent
8d00c39bfc
commit
2091b509e3
@ -54,6 +54,21 @@ _get_morx (hb_face_t *face, hb_blob_t **blob = nullptr)
|
|||||||
*blob = hb_ot_face_data (face)->morx.get_blob ();
|
*blob = hb_ot_face_data (face)->morx.get_blob ();
|
||||||
return morx;
|
return morx;
|
||||||
}
|
}
|
||||||
|
static inline const AAT::kerx&
|
||||||
|
_get_kerx (hb_face_t *face, hb_blob_t **blob = nullptr)
|
||||||
|
{
|
||||||
|
if (unlikely (!hb_ot_shaper_face_data_ensure (face)))
|
||||||
|
{
|
||||||
|
if (blob)
|
||||||
|
*blob = hb_blob_get_empty ();
|
||||||
|
return Null(AAT::kerx);
|
||||||
|
}
|
||||||
|
const AAT::kerx& kerx = *(hb_ot_face_data (face)->kerx.get ());
|
||||||
|
if (blob)
|
||||||
|
*blob = hb_ot_face_data (face)->kerx.get_blob ();
|
||||||
|
return kerx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
hb_bool_t
|
hb_bool_t
|
||||||
hb_aat_layout_has_substitution (hb_face_t *face)
|
hb_aat_layout_has_substitution (hb_face_t *face)
|
||||||
@ -73,19 +88,21 @@ hb_aat_layout_substitute (hb_ot_shape_plan_t *plan,
|
|||||||
morx.apply (&c);
|
morx.apply (&c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
hb_bool_t
|
||||||
|
hb_aat_layout_has_positioning (hb_face_t *face)
|
||||||
|
{
|
||||||
|
return _get_kerx (face).has_data ();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
hb_aat_layout_position (hb_ot_shape_plan_t *plan,
|
hb_aat_layout_position (hb_ot_shape_plan_t *plan,
|
||||||
hb_font_t *font,
|
hb_font_t *font,
|
||||||
hb_buffer_t *buffer)
|
hb_buffer_t *buffer)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
hb_blob_t *blob;
|
hb_blob_t *blob;
|
||||||
const AAT::ankr& ankr = _get_ankr (font->face, &blob);
|
|
||||||
const AAT::kerx& kerx = _get_kerx (font->face, &blob);
|
const AAT::kerx& kerx = _get_kerx (font->face, &blob);
|
||||||
const AAT::trak& trak = _get_trak (font->face, &blob);
|
|
||||||
|
|
||||||
AAT::hb_aat_apply_context_t c (font, buffer, blob);
|
AAT::hb_aat_apply_context_t c (plan, font, buffer, blob);
|
||||||
kerx.apply (&c, &ankr);
|
kerx.apply (&c);
|
||||||
trak.apply (&c);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,9 @@ hb_aat_layout_substitute (hb_ot_shape_plan_t *plan,
|
|||||||
hb_font_t *font,
|
hb_font_t *font,
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
HB_INTERNAL hb_bool_t
|
||||||
|
hb_aat_layout_has_positioning (hb_face_t *face);
|
||||||
|
|
||||||
HB_INTERNAL void
|
HB_INTERNAL void
|
||||||
hb_aat_layout_position (hb_ot_shape_plan_t *plan,
|
hb_aat_layout_position (hb_ot_shape_plan_t *plan,
|
||||||
hb_font_t *font,
|
hb_font_t *font,
|
||||||
|
@ -69,14 +69,16 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
|
|||||||
bool disable_gpos = plan.shaper->gpos_tag &&
|
bool disable_gpos = plan.shaper->gpos_tag &&
|
||||||
plan.shaper->gpos_tag != plan.map.chosen_script[1];
|
plan.shaper->gpos_tag != plan.map.chosen_script[1];
|
||||||
plan.apply_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
|
plan.apply_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
|
||||||
|
plan.apply_kerx = !plan.apply_gpos &&
|
||||||
|
hb_aat_layout_has_positioning (face);
|
||||||
|
|
||||||
hb_tag_t kern_tag = HB_DIRECTION_IS_HORIZONTAL (plan.props.direction) ?
|
hb_tag_t kern_tag = HB_DIRECTION_IS_HORIZONTAL (plan.props.direction) ?
|
||||||
HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n');
|
HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n');
|
||||||
plan.kern_mask = plan.map.get_mask (kern_tag);
|
plan.kern_mask = plan.map.get_mask (kern_tag);
|
||||||
plan.kerning_requested = !!plan.kern_mask;
|
plan.kerning_requested = !!plan.kern_mask;
|
||||||
bool has_gpos_kern = plan.map.get_feature_index (0, kern_tag) != HB_OT_LAYOUT_NO_FEATURE_INDEX;
|
bool has_gpos_kern = plan.map.get_feature_index (0, kern_tag) != HB_OT_LAYOUT_NO_FEATURE_INDEX;
|
||||||
plan.apply_kern = !has_gpos_kern && hb_ot_layout_has_kerning (face);
|
plan.apply_kern = !has_gpos_kern && !plan.apply_kerx && hb_ot_layout_has_kerning (face);
|
||||||
plan.fallback_kerning = !has_gpos_kern && !plan.apply_kern;
|
plan.fallback_kerning = !has_gpos_kern && !plan.apply_kerx && !plan.apply_kern;
|
||||||
|
|
||||||
plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k'));
|
plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k'));
|
||||||
plan.fallback_mark_positioning = !plan.apply_gpos;
|
plan.fallback_mark_positioning = !plan.apply_gpos;
|
||||||
|
@ -51,6 +51,7 @@ struct hb_ot_shape_plan_t
|
|||||||
bool fallback_mark_positioning : 1;
|
bool fallback_mark_positioning : 1;
|
||||||
|
|
||||||
bool apply_morx : 1;
|
bool apply_morx : 1;
|
||||||
|
bool apply_kerx : 1;
|
||||||
bool apply_kern : 1;
|
bool apply_kern : 1;
|
||||||
bool apply_gpos : 1;
|
bool apply_gpos : 1;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user