[GPOS] Rewrite cursive attachment slightly differently
In anticipation for upcoming fix for bug reported by Khaled in thread "Issue with cursive attachment".
This commit is contained in:
parent
fdd1770e00
commit
58f2a73fb9
|
@ -960,20 +960,32 @@ struct CursivePosFormat1
|
|||
}
|
||||
|
||||
/* Cross-direction adjustment */
|
||||
if (c->lookup_props & LookupFlag::RightToLeft) {
|
||||
pos[i].cursive_chain() = j - i;
|
||||
if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
|
||||
pos[i].y_offset = entry_y - exit_y;
|
||||
else
|
||||
pos[i].x_offset = entry_x - exit_x;
|
||||
} else {
|
||||
pos[j].cursive_chain() = i - j;
|
||||
if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
|
||||
pos[j].y_offset = exit_y - entry_y;
|
||||
else
|
||||
pos[j].x_offset = exit_x - entry_x;
|
||||
|
||||
/* We attach child to parent (think graph theory and rooted trees whereas
|
||||
* the root stays on baseline and each node aligns itself against its
|
||||
* parent.
|
||||
*
|
||||
* Optimize things for the case of RightToLeft, as that's most common in
|
||||
* Arabinc. */
|
||||
unsigned int child = i;
|
||||
unsigned int parent = j;
|
||||
hb_position_t x_offset = entry_x - exit_x;
|
||||
hb_position_t y_offset = entry_y - exit_y;
|
||||
if (!(c->lookup_props & LookupFlag::RightToLeft))
|
||||
{
|
||||
unsigned int k = child;
|
||||
child = parent;
|
||||
parent = k;
|
||||
x_offset = -x_offset;
|
||||
y_offset = -y_offset;
|
||||
}
|
||||
|
||||
pos[child].cursive_chain() = parent - child;
|
||||
if (likely (HB_DIRECTION_IS_HORIZONTAL (c->direction)))
|
||||
pos[child].y_offset = y_offset;
|
||||
else
|
||||
pos[child].x_offset = x_offset;
|
||||
|
||||
buffer->idx = j;
|
||||
return TRACE_RETURN (true);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue