From ba87b8fc89bf745068ccd19264a2631ea0904846 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 21 Feb 2013 15:23:39 -0500 Subject: [PATCH] Move code around --- src/hb-ot-shape-fallback-private.hh | 5 ++++ src/hb-ot-shape-fallback.cc | 40 +++++++++++++++++++++++++++++ src/hb-ot-shape.cc | 38 +-------------------------- 3 files changed, 46 insertions(+), 37 deletions(-) diff --git a/src/hb-ot-shape-fallback-private.hh b/src/hb-ot-shape-fallback-private.hh index 5e9cb0617..ec653513f 100644 --- a/src/hb-ot-shape-fallback-private.hh +++ b/src/hb-ot-shape-fallback-private.hh @@ -41,4 +41,9 @@ HB_INTERNAL void _hb_ot_shape_fallback_position_recategorize_marks (const hb_ot_ 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 */ diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc index 6f3426e6b..cd9d9a405 100644 --- a/src/hb-ot-shape-fallback.cc +++ b/src/hb-ot-shape-fallback.cc @@ -407,3 +407,43 @@ _hb_ot_shape_fallback_position (const hb_ot_shape_plan_t *plan, } 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; + } +} diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc index 32d7afcf2..f65861f95 100644 --- a/src/hb-ot-shape.cc +++ b/src/hb-ot-shape.cc @@ -492,42 +492,6 @@ hb_ot_position_complex (hb_ot_shape_context_t *c) 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 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. */ if (fallback) - hb_ot_truetype_kern (c); + _hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer); }