small software-rendered rust tty
| -rw-r--r-- | src/render.rs | 7 | ||||
| -rw-r--r-- | src/term.rs | 8 | ||||
| -rw-r--r-- | src/term/cells.rs | 4 |
3 files changed, 9 insertions, 10 deletions
diff --git a/src/render.rs b/src/render.rs index 72e315c..bfe5c52 100644 --- a/src/render.rs +++ b/src/render.rs @@ -17,11 +17,10 @@ pub fn render( let m = FONT.metrics(&[]); let sz = ppem * (m.max_width / m.units_per_em as f32); let mut i = Image::build(w as _, h as _).fill(colors::BACKGROUND); - let c = x.cells.c(); - let r = x.cells.r(); + let c = x.cells.c() as usize; + let r = x.cells.r() as usize; let vo = x.view_o.unwrap_or(x.cells.row); - for (col, k) in x.cells.cells - [(vo * c) as usize..(vo * c + r * c) as usize] + for (col, k) in x.cells.cells[vo * c..vo * c + r * c] .chunks_exact(c as _) .zip(1..) { diff --git a/src/term.rs b/src/term.rs index 9dd0ee4..ec0439c 100644 --- a/src/term.rs +++ b/src/term.rs @@ -11,7 +11,7 @@ pub struct Terminal { pub cursor: (u16, u16), pub saved_cursor: (u16, u16), - pub view_o: Option<u16>, + pub view_o: Option<usize>, pub cells: Cells, pub p: TerminalInputParser, pub mode: Mode, @@ -49,10 +49,10 @@ impl Terminal { return; }; if rows < 0.0 { - let rows = rows.ceil().abs() as u16; + let rows = rows.ceil().abs() as usize; *vo = (*vo + rows).min(self.cells.row); } else { - let rows = rows.floor() as u16; + let rows = rows.floor() as usize; *vo = vo.saturating_sub(rows); } } @@ -81,7 +81,7 @@ impl Terminal { self.cursor.1 -= 1; self.cells.grow(1); if let Some(vo) = self.view_o.as_mut() - && *vo + 1 == self.cells.row + && *vo + 1 == self.cells.row as usize { *vo += 1; } diff --git a/src/term/cells.rs b/src/term/cells.rs index cffd532..c3ad862 100644 --- a/src/term/cells.rs +++ b/src/term/cells.rs @@ -3,7 +3,7 @@ pub struct Cells { pub size: (u16, u16), pub cells: Vec<Cell>, pub margin: (u16, u16), - pub row: u16, + pub row: usize, } #[derive(Clone, Copy, Debug)] pub struct Style { @@ -113,7 +113,7 @@ impl Cells { &mut self.rows().nth(row as usize - 1).unwrap()[x as usize - 1..] } pub fn grow(&mut self, by: u16) { - self.row += by; + self.row += by as usize; let at = self.offset() + (self.margin.1 as usize - 1) * self.size.0 as usize; self.cells.splice( |