cloneArea method
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;
}