Name
playout:MoveCursorVisually -- move cursor visually
Synopsis
nidx, ntrail = playout:MoveCursorVisually(strong, oidx, otrail, dir)
Function
Computes a new cursor position from an old position and a direction.

If dir is positive, then the new position will cause the strong or weak cursor to be displayed one position to right of where it was with the old cursor position. If dir is negative, it will be moved to the left.

In the presence of bidirectional text, the correspondence between logical and visual order will depend on the direction of the current run, and there may be jumps when the cursor is moved off of the end of a run.

Motion here is in cursor positions, not in characters, so a single call to this function may move the cursor over multiple characters when multiple characters combine to form a single grapheme.

Inputs
strong
whether the moving cursor is the strong cursor or the weak cursor; the strong cursor is the cursor corresponding to text insertion in the base direction for the layout
oidx
the byte index of the current cursor position
otrail
if 0, the cursor was at the leading edge of the grapheme indicated by oidx; if > 0, the cursor was at the trailing edge
dir
direction to move cursor; a negative value indicates motion to the left
Results
nidx
new cursor byte index; a value of -1 indicates that the cursor has been moved off the beginning of the layout; a value of #G_MAXINT indicates that the cursor has been moved off the end of the layout
ntrail
number of characters to move forward from the location returned for nidx to get the position where the cursor should be displayed; this allows distinguishing the position at the beginning of one line from the position at the end of the preceding line; nind is always on the line where the cursor should be displayed

Show TOC