cloneArea function

Buffer? cloneArea(
  1. Screen screen,
  2. Rectangle area
)

Returns a copy of area from screen, or null when empty.

Implementation

Buffer? cloneArea(Screen screen, Rectangle area) {
  if (screen case CloneAreaScreen(:final cloneArea)) {
    final v = cloneArea(area);
    if (v == null) return null;
    if (v is Buffer) return v;
  }

  final b = Buffer.create(area.width, area.height);
  for (var y = area.minY; y < area.maxY; y++) {
    for (var x = area.minX; x < area.maxX; x++) {
      final c = screen.cellAt(x, y);
      if (c == null || c.isZero) continue;
      b.setCell(x - area.minX, y - area.minY, c.clone());
    }
  }
  return b;
}