bool ret = false;
ret |= out->entryAnchor.serialize_subset (c, entryAnchor, src_base);
ret |= out->exitAnchor.serialize_subset (c, exitAnchor, src_base);
return_trace (ret);
}
protected:
Offset16To<Anchor, struct CursivePosFormat1>
entryAnchor; /* Offset to EntryAnchor table--from *beginningofCursivePos
* subtable--may be NULL */
Offset16To<Anchor, struct CursivePosFormat1>
exitAnchor; /* Offset to ExitAnchor table--from *beginningofCursivePos
* subtable--may be NULL */ public:
DEFINE_SIZE_STATIC (4);
};
staticinlinevoid
reverse_cursive_minor_offset (hb_glyph_position_t *pos, unsignedint len, unsignedint i,
hb_direction_t direction, unsignedint new_parent)
{ int chain = pos[i].attach_chain(), type = pos[i].attach_type(); if (likely (!chain || 0 == (type & ATTACH_TYPE_CURSIVE))) return;
pos[i].attach_chain() = 0;
unsignedint j = (int) i + chain;
if (unlikely (j >= len)) return;
/* Stop if we see new parent in the chain. */ if (j == new_parent) return;
int16_t reversed_chain = -chain; /* The old edge was cleared above; if the reversed distance truncates, *keepitdetachedinsteadofstoringapoisonedchain.
*/ if (unlikely (reversed_chain != -chain)) return;
d = roundf (entry_y) + pos[j].y_offset;
pos[j].y_advance -= d;
pos[j].y_offset -= d; break; case HB_DIRECTION_BTT:
d = roundf (exit_y) + pos[i].y_offset;
pos[i].y_advance -= d;
pos[i].y_offset -= d;
pos[j].y_advance = roundf (entry_y); break; case HB_DIRECTION_INVALID: default: break;
}
/* Cross-direction adjustment */
/* We attach child to parent (think graph theory and rooted trees whereas *therootstaysonbaselineandeachnodealignsitselfagainstits *parent. * *OptimizethingsforthecaseofRightToLeft,asthat'smostcommonin
* Arabic. */ unsignedint child = i; unsignedint parent = j;
hb_position_t x_offset = roundf (entry_x - exit_x);
hb_position_t y_offset = roundf (entry_y - exit_y); if (!(c->lookup_props & LookupFlag::RightToLeft))
{ unsignedint k = child;
child = parent;
parent = k;
x_offset = -x_offset;
y_offset = -y_offset;
}
/* If child was already connected to someone else, walk through its old *chainandreversethelinkdirection,suchthatthewholetreeofits *previousconnectionnowattachestonewparent.Watchoutforcase *wherenewparentisonthepathfromoldchain...
*/
reverse_cursive_minor_offset (pos, buffer->len, child, c->direction, parent);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.