small software-rendered rust tty
Diffstat (limited to 'src/term.rs')
-rw-r--r--src/term.rs17
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();