[kerx] Implement Format4 action_type=2 coordinate-based attachment
Untested.
This commit is contained in:
parent
1622ba5943
commit
b6bc0d4ff6
@ -343,6 +343,7 @@ struct KerxSubTableFormat4
|
|||||||
|
|
||||||
if (mark_set && entry->data.ankrActionIndex != 0xFFFF)
|
if (mark_set && entry->data.ankrActionIndex != 0xFFFF)
|
||||||
{
|
{
|
||||||
|
hb_glyph_position_t &o = buffer->cur_pos();
|
||||||
switch (action_type)
|
switch (action_type)
|
||||||
{
|
{
|
||||||
case 0: /* Control Point Actions.*/
|
case 0: /* Control Point Actions.*/
|
||||||
@ -373,12 +374,9 @@ struct KerxSubTableFormat4
|
|||||||
currAnchorPoint,
|
currAnchorPoint,
|
||||||
c->face->get_num_glyphs (),
|
c->face->get_num_glyphs (),
|
||||||
c->ankr_end);
|
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.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.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;
|
break;
|
||||||
|
|
||||||
@ -387,14 +385,19 @@ struct KerxSubTableFormat4
|
|||||||
const FWORD *data = (const FWORD *) &ankrData[entry->data.ankrActionIndex];
|
const FWORD *data = (const FWORD *) &ankrData[entry->data.ankrActionIndex];
|
||||||
if (!c->sanitizer.check_array (data, 4))
|
if (!c->sanitizer.check_array (data, 4))
|
||||||
return false;
|
return false;
|
||||||
HB_UNUSED int markX = *data++;
|
int markX = *data++;
|
||||||
HB_UNUSED int markY = *data++;
|
int markY = *data++;
|
||||||
HB_UNUSED int currX = *data++;
|
int currX = *data++;
|
||||||
HB_UNUSED int currY = *data++;
|
int currY = *data++;
|
||||||
/* TODO */
|
|
||||||
|
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;
|
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)
|
if (flags & Mark)
|
||||||
|
Loading…
Reference in New Issue
Block a user