|
|
|
@ -665,9 +665,12 @@ hb_ot_position_default (hb_ot_shape_context_t *c) |
|
|
|
|
static inline bool |
|
|
|
|
hb_ot_position_complex (hb_ot_shape_context_t *c) |
|
|
|
|
{ |
|
|
|
|
hb_ot_layout_position_start (c->font, c->buffer); |
|
|
|
|
|
|
|
|
|
bool ret = false; |
|
|
|
|
unsigned int count = c->buffer->len; |
|
|
|
|
bool has_positioning = (bool) hb_ot_layout_has_positioning (c->face); |
|
|
|
|
|
|
|
|
|
/* If the font has no GPOS, AND, no fallback positioning will
|
|
|
|
|
* happen, AND, direction is forward, then when zeroing mark |
|
|
|
|
* widths, we shift the mark with it, such that the mark |
|
|
|
@ -730,22 +733,22 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
hb_ot_zero_width_default_ignorables (c); |
|
|
|
|
|
|
|
|
|
hb_ot_layout_position_finish (c->font, c->buffer); |
|
|
|
|
|
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void |
|
|
|
|
hb_ot_position (hb_ot_shape_context_t *c) |
|
|
|
|
{ |
|
|
|
|
hb_ot_layout_position_start (c->font, c->buffer); |
|
|
|
|
c->buffer->clear_positions (); |
|
|
|
|
|
|
|
|
|
hb_ot_position_default (c); |
|
|
|
|
|
|
|
|
|
hb_bool_t fallback = !hb_ot_position_complex (c); |
|
|
|
|
|
|
|
|
|
hb_ot_zero_width_default_ignorables (c); |
|
|
|
|
|
|
|
|
|
hb_ot_layout_position_finish (c->font, c->buffer); |
|
|
|
|
|
|
|
|
|
if (fallback && c->plan->shaper->fallback_position) |
|
|
|
|
_hb_ot_shape_fallback_position (c->plan, c->font, c->buffer); |
|
|
|
|
|
|
|
|
|