mirror of
https://codeberg.org/unspeaker/tengri.git
synced 2025-12-06 19:56:44 +01:00
45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
use crate::*;
|
|
use ratatui::prelude::Position;
|
|
|
|
pub struct Repeat<'a>(pub &'a str);
|
|
impl Content<TuiOut> 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<TuiOut> 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<TuiOut> 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);
|
|
}
|
|
}
|
|
}
|
|
}
|