| Index: third_party/harfbuzz-ng/src/hb-ot-shape-fallback.cc
|
| ===================================================================
|
| --- third_party/harfbuzz-ng/src/hb-ot-shape-fallback.cc (리비전 191245)
|
| +++ third_party/harfbuzz-ng/src/hb-ot-shape-fallback.cc (작업 사본)
|
| @@ -25,6 +25,7 @@
|
| */
|
|
|
| #include "hb-ot-shape-fallback-private.hh"
|
| +#include "hb-ot-layout-gsubgpos-private.hh"
|
|
|
| static unsigned int
|
| recategorize_combining_class (hb_codepoint_t u,
|
| @@ -407,3 +408,48 @@
|
| }
|
| 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'));
|
| +
|
| + OT::hb_apply_context_t c (1, font, buffer, kern_mask, true/*auto_zwj*/);
|
| + c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
|
| +
|
| + for (buffer->idx = 0; buffer->idx < count;)
|
| + {
|
| + OT::hb_apply_context_t::skipping_forward_iterator_t skippy_iter (&c, buffer->idx, 1);
|
| + if (!skippy_iter.next ())
|
| + {
|
| + buffer->idx++;
|
| + continue;
|
| + }
|
| +
|
| + hb_position_t x_kern, y_kern, kern1, kern2;
|
| + font->get_glyph_kerning_for_direction (buffer->info[buffer->idx].codepoint,
|
| + buffer->info[skippy_iter.idx].codepoint,
|
| + buffer->props.direction,
|
| + &x_kern, &y_kern);
|
| +
|
| + kern1 = x_kern >> 1;
|
| + kern2 = x_kern - kern1;
|
| + buffer->pos[buffer->idx].x_advance += kern1;
|
| + buffer->pos[skippy_iter.idx].x_advance += kern2;
|
| + buffer->pos[skippy_iter.idx].x_offset += kern2;
|
| +
|
| + kern1 = y_kern >> 1;
|
| + kern2 = y_kern - kern1;
|
| + buffer->pos[buffer->idx].y_advance += kern1;
|
| + buffer->pos[skippy_iter.idx].y_advance += kern2;
|
| + buffer->pos[skippy_iter.idx].y_offset += kern2;
|
| +
|
| + buffer->idx = skippy_iter.idx;
|
| + }
|
| +}
|
|
|