Visualizzazione del cursore in stringhe bidirezionali
Nel testo unidirezionale, la posizione del cursore non ha ambiguità perché il bordo iniziale di un carattere si trova nella stessa posizione del bordo finale del carattere precedente. Tuttavia, nel testo bidirezionale, la posizione del cursore tra le esecuzioni di direzione opposta è ambigua. Ad esempio, nel paragrafo da sinistra a destra "hellosalaam", l'ultima lettera di "hello" precede immediatamente la prima lettera di "salaam". La posizione migliore in cui visualizzare il cursore dipende dal fatto che venga considerato seguire "o" di "hello" o di precedere "s" di "salaam".
Uniscribe usa le convenzioni di posizionamento del cursore illustrate nella tabella successiva.
Situazione | Posizionamento del cursore visivo |
---|---|
Digitazione | Bordo finale dell'ultimo carattere digitato. |
Incollare | Bordo finale dell'ultimo carattere incollato. |
Cursore che avanza | Bordo finale dell'ultimo carattere passato. |
Ritiro del cursore | Bordo iniziale dell'ultimo carattere passato. |
Home page | Bordo iniziale della linea. |
Fine | Bordo finale della linea. |
Il cursore può essere posizionato come illustrato nell'esempio seguente:
if (fAdvancing) {
ScriptCPtoX(
iCharPos - 1, TRUE,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
} else {
ScriptCPtoX(
iCharPos, FALSE,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
}
Il posizionamento del cursore può essere più semplice, come illustrato di seguito, dato un valore fAdvancing limitato a TRUE o FALSE:
ScriptCPtoX(
iCharPos - fAdvancing, fAdvancing,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
ScriptCPtoX gestisce le posizioni out-of-range logicamente. Restituisce il bordo iniziale dell'esecuzione per iCharPos<0 e il bordo finale dell'esecuzione per iCharPos>= length. Per altre informazioni, vedere Managing Caret Placement and Hit Testing (Gestione del posizionamento del cursore e hit testing)
Argomenti correlati