movePageDown function
NavigationResult
movePageDown(
- Root root,
- CaretStop current,
- double preferredX,
- CaretXResolver resolveX,
- CaretYResolver resolveY, {
- List<
LogicalLine> ? lines,
Moves the cursor down by approximately 10-15 logical lines.
Implementation
NavigationResult movePageDown(
Root root,
CaretStop current,
double preferredX,
CaretXResolver resolveX,
CaretYResolver resolveY, {
List<LogicalLine>? lines,
}) {
final lines_ = lines ?? buildAllLogicalLines(root);
final lineInfo = findLineForStop(lines_, current);
if (lineInfo == null) return NavigationResult.none;
final currentLineIndex = lineInfo.lineIndex;
final targetLineIndex = (currentLineIndex + 10).clamp(0, lines_.length - 1);
if (targetLineIndex == currentLineIndex) {
// Already at or near the bottom, go to document end
final stops = buildAllStops(root);
if (stops.isEmpty) return NavigationResult.none;
final lastStop = stops.last;
if (lastStop == current) return NavigationResult.none;
return NavigationResult(position: lastStop, preferredX: preferredX);
}
final targetLine = lines_[targetLineIndex];
if (targetLine.stops.isEmpty) return NavigationResult.none;
final x = preferredX >= 0.0 ? preferredX : resolveX(current);
final best = _stopNearestX(targetLine.stops, x, resolveX);
return NavigationResult(position: best, preferredX: x);
}