cloneArea method

Buffer? cloneArea(
  1. Rectangle area
)

Clones area into a new buffer, or returns null if out-of-bounds.

Upstream: third_party/ultraviolet/buffer.go (CloneArea).

Implementation

Buffer? cloneArea(Rectangle area) {
  final b = bounds();
  if (!b.containsRect(area)) return null;

  final n = 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 = cellAt(x, y);
      if (c == null || c.isZero) continue;
      n.setCell(x - area.minX, y - area.minY, c);
    }
  }
  return n;
}