Exibindo o cursor em cadeias de caracteres bidirecionais
No texto unidirecional, a posição do cursor não tem ambiguidade porque a borda esquerda de um caractere está no mesmo lugar que a borda à direita do caractere anterior. No entanto, no texto bidirecional, a posição do cursor entre execuções de direção oposta é ambígua. Por exemplo, no parágrafo da esquerda para a direita "hellosalaam", a última letra de "hello" precede imediatamente a primeira letra de "salaam". A melhor posição na qual exibir o cursor depende se ele é considerado para seguir o "o" de "olá" ou preceder os "s" de "salaam".
Uniscribe usa as convenções de posicionamento de cursor mostradas na próxima tabela.
Situação | Posicionamento do cursor visual |
---|---|
Digitação | Borda à direita do último caractere digitado. |
Colar | Borda à direita do último caractere colado. |
Cursor avançando | Borda à direita do último caractere passado. |
Desativação do Cursor | Borda à esquerda do último caractere passado. |
Página Inicial | Borda à esquerda da linha. |
End | Borda à direita da linha. |
O cursor pode ser posicionado conforme mostrado no exemplo a seguir:
if (fAdvancing) {
ScriptCPtoX(
iCharPos - 1, TRUE,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
} else {
ScriptCPtoX(
iCharPos, FALSE,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
}
O posicionamento do cursor pode ser mais simples, conforme mostrado abaixo, considerando um valor fAdvancing restrito a TRUE ou FALSE:
ScriptCPtoX(
iCharPos - fAdvancing, fAdvancing,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
ScriptCPtoX manipula posições fora do intervalo logicamente. Ele retorna a borda superior da execução para iCharPos<0 e a borda à direita da execução para iCharPos>= length. Para obter mais informações, consulte Managing Caret Placement and Hit Testing
Tópicos relacionados