use crate::{layout::LayoutItem, unit::Size::Percent, widget::Widget}; pub struct SpacedRows(pub Vec<(LayoutItem, Box)>); impl Widget for SpacedRows { fn render(&self, scope: &mut crate::render::RenderScope) { let mut alloc = scope.rect.allocate(&crate::layout::LayoutItem::Rows { unit: Percent(100), items: self.0.iter().map(|v| v.0.clone()).collect(), }); for i in 0..alloc.widgets.len() { let item = &self.0[i]; if i > 0 { let rect = &mut alloc.widgets[i]; scope.draw_text((0, rect.y - 1), "─".repeat(rect.width as usize)); } alloc.draw(i, &*item.1); } } } pub struct SpacedColumns(pub Vec<(LayoutItem, Box)>); impl Widget for SpacedColumns { fn render(&self, scope: &mut crate::render::RenderScope) { let mut alloc = scope.rect.allocate(&crate::layout::LayoutItem::Columns { unit: Percent(100), items: self.0.iter().map(|v| v.0.clone()).collect(), }); for i in 0..alloc.widgets.len() { let item = &self.0[i]; if i > 0 { let rect = &mut alloc.widgets[i]; for i in 0..rect.height { scope.draw_text((rect.x - 1, i), "│"); } rect.x += 1; } alloc.draw(i, &*item.1); } } }