Move code around
This commit is contained in:
parent
2b2a6e8944
commit
ba87b8fc89
|
@ -41,4 +41,9 @@ HB_INTERNAL void _hb_ot_shape_fallback_position_recategorize_marks (const hb_ot_
|
||||||
hb_buffer_t *buffer);
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
|
||||||
|
HB_INTERNAL void _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
|
||||||
|
hb_font_t *font,
|
||||||
|
hb_buffer_t *buffer);
|
||||||
|
|
||||||
|
|
||||||
#endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
|
#endif /* HB_OT_SHAPE_FALLBACK_PRIVATE_HH */
|
||||||
|
|
|
@ -407,3 +407,43 @@ _hb_ot_shape_fallback_position (const hb_ot_shape_plan_t *plan,
|
||||||
}
|
}
|
||||||
position_cluster (plan, font, buffer, start, count);
|
position_cluster (plan, font, buffer, start, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Performs old-style TrueType kerning. */
|
||||||
|
void
|
||||||
|
_hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
|
||||||
|
hb_font_t *font,
|
||||||
|
hb_buffer_t *buffer)
|
||||||
|
{
|
||||||
|
unsigned int count = buffer->len;
|
||||||
|
hb_mask_t kern_mask = plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction) ?
|
||||||
|
HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
|
||||||
|
|
||||||
|
if (unlikely (!count)) return;
|
||||||
|
|
||||||
|
bool enabled = buffer->info[0].mask & kern_mask;
|
||||||
|
for (unsigned int i = 1; i < count; i++)
|
||||||
|
{
|
||||||
|
bool next = buffer->info[i].mask & kern_mask;
|
||||||
|
if (enabled && next)
|
||||||
|
{
|
||||||
|
hb_position_t x_kern, y_kern, kern1, kern2;
|
||||||
|
font->get_glyph_kerning_for_direction (buffer->info[i - 1].codepoint, buffer->info[i].codepoint,
|
||||||
|
buffer->props.direction,
|
||||||
|
&x_kern, &y_kern);
|
||||||
|
|
||||||
|
kern1 = x_kern >> 1;
|
||||||
|
kern2 = x_kern - kern1;
|
||||||
|
buffer->pos[i - 1].x_advance += kern1;
|
||||||
|
buffer->pos[i].x_advance += kern2;
|
||||||
|
buffer->pos[i].x_offset += kern2;
|
||||||
|
|
||||||
|
kern1 = y_kern >> 1;
|
||||||
|
kern2 = y_kern - kern1;
|
||||||
|
buffer->pos[i - 1].y_advance += kern1;
|
||||||
|
buffer->pos[i].y_advance += kern2;
|
||||||
|
buffer->pos[i].y_offset += kern2;
|
||||||
|
}
|
||||||
|
enabled = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -492,42 +492,6 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
|
||||||
hb_ot_truetype_kern (hb_ot_shape_context_t *c)
|
|
||||||
{
|
|
||||||
unsigned int count = c->buffer->len;
|
|
||||||
hb_mask_t kern_mask = c->plan->map.get_1_mask (HB_DIRECTION_IS_HORIZONTAL (c->buffer->props.direction) ?
|
|
||||||
HB_TAG ('k','e','r','n') : HB_TAG ('v','k','r','n'));
|
|
||||||
|
|
||||||
if (unlikely (!count)) return;
|
|
||||||
|
|
||||||
bool enabled = c->buffer->info[0].mask & kern_mask;
|
|
||||||
for (unsigned int i = 1; i < count; i++)
|
|
||||||
{
|
|
||||||
bool next = c->buffer->info[i].mask & kern_mask;
|
|
||||||
if (enabled && next)
|
|
||||||
{
|
|
||||||
hb_position_t x_kern, y_kern, kern1, kern2;
|
|
||||||
c->font->get_glyph_kerning_for_direction (c->buffer->info[i - 1].codepoint, c->buffer->info[i].codepoint,
|
|
||||||
c->buffer->props.direction,
|
|
||||||
&x_kern, &y_kern);
|
|
||||||
|
|
||||||
kern1 = x_kern >> 1;
|
|
||||||
kern2 = x_kern - kern1;
|
|
||||||
c->buffer->pos[i - 1].x_advance += kern1;
|
|
||||||
c->buffer->pos[i].x_advance += kern2;
|
|
||||||
c->buffer->pos[i].x_offset += kern2;
|
|
||||||
|
|
||||||
kern1 = y_kern >> 1;
|
|
||||||
kern2 = y_kern - kern1;
|
|
||||||
c->buffer->pos[i - 1].y_advance += kern1;
|
|
||||||
c->buffer->pos[i].y_advance += kern2;
|
|
||||||
c->buffer->pos[i].y_offset += kern2;
|
|
||||||
}
|
|
||||||
enabled = next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
hb_ot_position (hb_ot_shape_context_t *c)
|
hb_ot_position (hb_ot_shape_context_t *c)
|
||||||
{
|
{
|
||||||
|
@ -544,7 +508,7 @@ hb_ot_position (hb_ot_shape_context_t *c)
|
||||||
/* Visual fallback goes here. */
|
/* Visual fallback goes here. */
|
||||||
|
|
||||||
if (fallback)
|
if (fallback)
|
||||||
hb_ot_truetype_kern (c);
|
_hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue