#[derive(Debug, Clone, Copy, Default)]
pub struct Cursor {
pub y: usize,
pub prev_bottom_margin: usize,
}
impl Cursor {
pub fn new() -> Self {
Self {
y: 0,
prev_bottom_margin: 0,
}
}
pub fn allocate(&mut self, height: usize) -> usize {
let start = self.y;
self.y = self.y.saturating_add(height);
start
}
pub fn skip(&mut self, rows: usize) {
self.y = self.y.saturating_add(rows);
}
pub fn collapse_and_skip(&mut self, margin_top: usize) {
if margin_top > self.prev_bottom_margin {
self.skip(margin_top - self.prev_bottom_margin);
}
self.prev_bottom_margin = 0;
}
pub fn leave_bottom_margin(&mut self, margin_bottom: usize) {
self.prev_bottom_margin = margin_bottom;
}
}