cursorOffsetForVisualLineMove method

int cursorOffsetForVisualLineMove(
  1. TextDocument document,
  2. EditorState state, {
  3. required int lineDelta,
  4. int desiredDisplayColumn = -1,
  5. TextPosition? cursor,
})

Implementation

int cursorOffsetForVisualLineMove(
  TextDocument document,
  EditorState state, {
  required int lineDelta,
  int desiredDisplayColumn = -1,
  TextPosition? cursor,
}) {
  final current = resolveCursorVisualPosition(
    document,
    state,
    cursor: cursor,
  );
  if (current == null) {
    return 0;
  }

  final lines = buildLines(document, state);
  if (lines.isEmpty) {
    return 0;
  }

  final targetRow = (current.visualRow + lineDelta).clamp(
    0,
    lines.length - 1,
  );
  final targetDisplayColumn = desiredDisplayColumn >= 0
      ? desiredDisplayColumn
      : current.displayColumn;

  return offsetForDisplayColumn(
    document,
    state,
    visualRow: targetRow,
    displayColumn: targetDisplayColumn,
  );
}