A simple CPU rendered GUI IDE experience.
Diffstat (limited to 'src/rnd/cell_buffer.rs')
| -rw-r--r-- | src/rnd/cell_buffer.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/rnd/cell_buffer.rs b/src/rnd/cell_buffer.rs new file mode 100644 index 0000000..2ac7e62 --- /dev/null +++ b/src/rnd/cell_buffer.rs @@ -0,0 +1,35 @@ +use std::ops::Deref; + +use dsb::Cell; + +#[derive(serde::Serialize, serde::Deserialize)] +pub struct CellBuffer { + pub c: usize, + pub vo: usize, + pub cells: Box<[Cell]>, +} +impl std::fmt::Debug for CellBuffer { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_struct("CellBuffer") + .field("c", &self.c) + .field("vo", &self.vo) + .field("cells", &self.cells.len()) + .finish() + } +} +impl Deref for CellBuffer { + type Target = [Cell]; + + fn deref(&self) -> &Self::Target { + &self.cells + } +} + +impl CellBuffer { + pub fn displayable(&self, r: usize) -> &[Cell] { + &self[self.vo * self.c..((self.vo + r) * self.c).min(self.len())] + } + pub fn l(&self) -> usize { + self.len() / self.c + } +} |