use crate::*; use ratatui::prelude::Position; pub struct Repeat<'a>(pub &'a str); impl Content for Repeat<'_> { fn layout (&self, to: [u16;4]) -> [u16;4] { to } fn render (&self, to: &mut TuiOut) { let [x, y, w, h] = to.area().xywh(); let a = self.0.len(); for (_v, y) in (y..y+h).enumerate() { for (u, x) in (x..x+w).enumerate() { if let Some(cell) = to.buffer.cell_mut(Position::from((x, y))) { let u = u % a; cell.set_symbol(&self.0[u..u+1]); } } } } } pub struct RepeatV<'a>(pub &'a str); impl Content for RepeatV<'_> { fn layout (&self, to: [u16;4]) -> [u16;4] { to } fn render (&self, to: &mut TuiOut) { let [x, y, _w, h] = to.area().xywh(); for y in y..y+h { if let Some(cell) = to.buffer.cell_mut(Position::from((x, y))) { cell.set_symbol(&self.0); } } } } pub struct RepeatH<'a>(pub &'a str); impl Content for RepeatH<'_> { fn layout (&self, to: [u16;4]) -> [u16;4] { to } fn render (&self, to: &mut TuiOut) { let [x, y, w, _h] = to.area().xywh(); for x in x..x+w { if let Some(cell) = to.buffer.cell_mut(Position::from((x, y))) { cell.set_symbol(&self.0); } } } }