resolveViewport method
Implementation
TextViewport resolveViewport(TextDocument document, EditorState state) {
final lines = buildLines(document, state);
final totalRows = lines.length;
final totalColumns = totalVisualColumns(document, state);
final viewportWidth = effectiveContentWidth();
final cursor = resolveCursorVisualPosition(document, state);
final cursorRow = cursor?.visualRow ?? 0;
final cursorColumn = cursor?.displayColumn ?? 0;
final verticalMargin = _resolvedScrollMargin(height);
final horizontalMargin = softWrap
? 0
: _resolvedScrollMargin(viewportWidth);
final resolvedStartColumn = switch ((softWrap, viewportWidth > 0)) {
(true, _) || (_, false) => 0,
_ => _resolveViewportStart(
currentStart: viewportStartColumn,
cursorOffset: cursorColumn,
viewportExtent: viewportWidth,
totalExtent: totalColumns,
margin: horizontalMargin,
),
};
final resolvedEndColumn = switch ((softWrap, viewportWidth > 0)) {
(true, _) || (_, false) => totalColumns,
_ => (resolvedStartColumn + viewportWidth).clamp(0, totalColumns),
};
if (height <= 0 || totalRows <= height) {
return TextViewport(
startRow: 0,
endRow: totalRows,
totalRows: totalRows,
startColumn: resolvedStartColumn,
endColumn: resolvedEndColumn,
totalColumns: totalColumns,
);
}
final resolvedStart = _resolveViewportStart(
currentStart: viewportStartRow,
cursorOffset: cursorRow,
viewportExtent: height,
totalExtent: totalRows,
margin: verticalMargin,
);
return TextViewport(
startRow: resolvedStart,
endRow: (resolvedStart + height).clamp(0, totalRows),
totalRows: totalRows,
startColumn: resolvedStartColumn,
endColumn: resolvedEndColumn,
totalColumns: totalColumns,
);
}