deleteLineArea method
Deletes n lines at y within area (ansi DL semantics).
Upstream: third_party/ultraviolet/buffer.go (DeleteLineArea).
Implementation
void deleteLineArea(int y, int n, Cell? cell, Rectangle area) {
if (n <= 0 || y < area.minY || y >= area.maxY || y >= height()) return;
if (n > area.maxY - y) n = area.maxY - y;
for (var dst = y; dst < area.maxY - n; dst++) {
final src = dst + n;
for (var x = area.minX; x < area.maxX; x++) {
lines[dst].cells[x] = lines[src].cells[x].clone();
}
touchLine(area.minX, dst, area.maxX - area.minX);
touchLine(area.minX, src, area.maxX - area.minX);
}
for (var i = area.maxY - n; i < area.maxY; i++) {
for (var x = area.minX; x < area.maxX; x++) {
setCell(x, i, cell);
}
}
}