small software-rendered rust tty
Diffstat (limited to 'src/term.rs')
| -rw-r--r-- | src/term.rs | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/term.rs b/src/term.rs index ebf20a7..65d9ee5 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: u16, + pub view_o: Option<u16>, pub cells: Cells, pub p: TerminalInputParser, pub mode: Mode, @@ -23,7 +23,7 @@ use std::default::Default::default; impl Terminal { pub fn new(sz: (u16, u16), alt: bool) -> Self { Self { - view_o: 0, + view_o: Some(0), style: default(), saved_cursor: (1, 1), cursor: (1, 1), @@ -45,12 +45,15 @@ pub enum Mode { impl Terminal { pub fn scroll(&mut self, rows: f32) { + let Some(vo) = self.view_o.as_mut() else { + return; + }; if rows < 0.0 { let rows = rows.ceil().abs() as u16; - self.view_o = (self.view_o + rows).min(self.cells.row); + *vo = (*vo + rows).min(self.cells.row); } else { let rows = rows.floor() as u16; - self.view_o = self.view_o.saturating_sub(rows); + *vo = vo.saturating_sub(rows); } } @@ -77,8 +80,10 @@ impl Terminal { println!("newline"); self.cursor.1 -= 1; self.cells.grow(1); - if self.view_o + 1 == self.cells.row { - self.view_o += 1; + if let Some(vo) = self.view_o.as_mut() + && *vo + 1 == self.cells.row + { + *vo += 1; } } let w = self.cells.c(); |