From: Behdad Esfahbod Date: Thu, 11 Oct 2018 05:17:57 +0000 (-0400) Subject: [kerx] Implement Format4 action_type=2 coordinate-based attachment X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b6bc0d4ff62e4509643db3b304306a72bbcb2c38;p=platform%2Fupstream%2FlibHarfBuzzSharp.git [kerx] Implement Format4 action_type=2 coordinate-based attachment Untested. --- diff --git a/src/hb-aat-layout-kerx-table.hh b/src/hb-aat-layout-kerx-table.hh index 019efd5..a54e297 100644 --- a/src/hb-aat-layout-kerx-table.hh +++ b/src/hb-aat-layout-kerx-table.hh @@ -343,6 +343,7 @@ struct KerxSubTableFormat4 if (mark_set && entry->data.ankrActionIndex != 0xFFFF) { + hb_glyph_position_t &o = buffer->cur_pos(); switch (action_type) { case 0: /* Control Point Actions.*/ @@ -373,12 +374,9 @@ struct KerxSubTableFormat4 currAnchorPoint, c->face->get_num_glyphs (), c->ankr_end); - hb_glyph_position_t &o = buffer->cur_pos(); + o.x_offset = c->font->em_scale_x (markAnchor.xCoordinate) - c->font->em_scale_x (currAnchor.xCoordinate); o.y_offset = c->font->em_scale_y (markAnchor.yCoordinate) - c->font->em_scale_y (currAnchor.yCoordinate); - o.attach_type() = ATTACH_TYPE_MARK; - o.attach_chain() = (int) mark - (int) buffer->idx; - buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT; } break; @@ -387,14 +385,19 @@ struct KerxSubTableFormat4 const FWORD *data = (const FWORD *) &ankrData[entry->data.ankrActionIndex]; if (!c->sanitizer.check_array (data, 4)) return false; - HB_UNUSED int markX = *data++; - HB_UNUSED int markY = *data++; - HB_UNUSED int currX = *data++; - HB_UNUSED int currY = *data++; - /* TODO */ + int markX = *data++; + int markY = *data++; + int currX = *data++; + int currY = *data++; + + o.x_offset = c->font->em_scale_x (markX) - c->font->em_scale_x (currX); + o.y_offset = c->font->em_scale_y (markY) - c->font->em_scale_y (currY); } break; } + o.attach_type() = ATTACH_TYPE_MARK; + o.attach_chain() = (int) mark - (int) buffer->idx; + buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT; } if (flags & Mark)