copyWith method

ViewportModel copyWith({
  1. int? width,
  2. int? height,
  3. int? yOffset,
  4. int? xOffset,
  5. bool? mouseWheelEnabled,
  6. int? mouseWheelDelta,
  7. int? horizontalStep,
  8. ViewportKeyMap? keyMap,
  9. List<String>? lines,
  10. int? gutter,
  11. bool? softWrap,
  12. bool? fillHeight,
  13. bool? showLineNumbers,
  14. GutterFunc? leftGutterFunc,
  15. Style? style,
  16. Style? highlightStyle,
  17. Style? selectedHighlightStyle,
  18. Style styleLineFunc(
    1. int lineIndex
    )?,
  19. List<HighlightInfo>? highlights,
  20. int? currentHighlightIndex,
  21. Object? selectionStart = undefined,
  22. Object? selectionEnd = undefined,
  23. DateTime? lastClickTime,
  24. (int, int)? lastClickPos,
})

Creates a copy with the given fields replaced.

Implementation

ViewportModel copyWith({
  int? width,
  int? height,
  int? yOffset,
  int? xOffset,
  bool? mouseWheelEnabled,
  int? mouseWheelDelta,
  int? horizontalStep,
  ViewportKeyMap? keyMap,
  List<String>? lines,
  int? gutter,
  bool? softWrap,
  bool? fillHeight,
  bool? showLineNumbers,
  GutterFunc? leftGutterFunc,
  Style? style,
  Style? highlightStyle,
  Style? selectedHighlightStyle,
  Style Function(int lineIndex)? styleLineFunc,
  List<HighlightInfo>? highlights,
  int? currentHighlightIndex,
  Object? selectionStart = undefined,
  Object? selectionEnd = undefined,
  DateTime? lastClickTime,
  (int, int)? lastClickPos,
}) {
  final newWidth = width ?? this.width;
  final newGutter = gutter ?? this.gutter;
  final newSoftWrap = softWrap ?? this.softWrap;
  final newFillHeight = fillHeight ?? this.fillHeight;
  final newShowLineNumbers = showLineNumbers ?? this.showLineNumbers;
  final newOriginalLines = lines ?? _originalLines;
  final newHighlights = highlights ?? _highlights;
  final newSelectionStart = selectionStart == undefined
      ? this.selectionStart
      : selectionStart as (int, int)?;
  final newSelectionEnd = selectionEnd == undefined
      ? this.selectionEnd
      : selectionEnd as (int, int)?;

  // Apply highlights to original lines
  var styledLines = newOriginalLines;
  // Note: In v2-exp, highlights are applied during rendering (visibleLines),
  // but we'll keep the current approach for now if it works, or migrate to
  // on-the-fly styling if needed for performance.
  // Actually, let's follow upstream and apply them in visibleLines.

  final newModel = ViewportModel(
    width: newWidth,
    height: height ?? this.height,
    gutter: newGutter,
    yOffset: yOffset ?? this.yOffset,
    xOffset: xOffset ?? this.xOffset,
    mouseWheelEnabled: mouseWheelEnabled ?? this.mouseWheelEnabled,
    mouseWheelDelta: mouseWheelDelta ?? this.mouseWheelDelta,
    horizontalStep: horizontalStep ?? this.horizontalStep,
    keyMap: keyMap ?? this.keyMap,
    lines: styledLines,
    originalLines: newOriginalLines,
    softWrap: newSoftWrap,
    fillHeight: newFillHeight,
    showLineNumbers: newShowLineNumbers,
    leftGutterFunc: leftGutterFunc ?? this.leftGutterFunc,
    style: style ?? this.style,
    highlightStyle: highlightStyle ?? this.highlightStyle,
    selectedHighlightStyle:
        selectedHighlightStyle ?? this.selectedHighlightStyle,
    styleLineFunc: styleLineFunc ?? this.styleLineFunc,
    highlights: newHighlights,
    currentHighlightIndex:
        currentHighlightIndex ?? this.currentHighlightIndex,
    selectionStart: newSelectionStart,
    selectionEnd: newSelectionEnd,
    lastClickTime: lastClickTime ?? this.lastClickTime,
    lastClickPos: lastClickPos ?? this.lastClickPos,
  );
  newModel._longestLineWidth = _findLongestLineWidth(styledLines);
  return newModel;
}