diff options
author | rabite <rabite@posteo.de> | 2019-03-16 22:49:27 +0100 |
---|---|---|
committer | rabite <rabite@posteo.de> | 2019-03-17 00:19:58 +0100 |
commit | 8b1c4db9cfa2ea0bf02e9e96c29b2510bbc391af (patch) | |
tree | f3c2b0e857691ae968d54269a0cd3b8067d36dbc /src/textview.rs | |
parent | 33a9562379b9d6fdd7be19ce20b3a5ac1fa7e1c7 (diff) |
big performance improvement
Diffstat (limited to 'src/textview.rs')
-rw-r--r-- | src/textview.rs | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/textview.rs b/src/textview.rs index 25dc63e..870bb4b 100644 --- a/src/textview.rs +++ b/src/textview.rs @@ -4,11 +4,11 @@ use crate::files::File; use crate::term::sized_string; use crate::widget::{Widget, WidgetCore}; use crate::fail::HResult; +use crate::dirty::Dirtyable; #[derive(PartialEq)] pub struct TextView { pub lines: Vec<String>, - pub buffer: String, pub core: WidgetCore, pub follow: bool, pub offset: usize, @@ -18,7 +18,6 @@ impl TextView { pub fn new_blank(core: &WidgetCore) -> TextView { TextView { lines: vec![], - buffer: String::new(), core: core.clone(), follow: false, offset: 0, @@ -35,7 +34,6 @@ impl TextView { Ok(TextView { lines: lines, - buffer: String::new(), core: core.clone(), follow: false, offset: 0, @@ -56,7 +54,6 @@ impl TextView { Ok(TextView { lines: lines, - buffer: String::new(), core: core.clone(), follow: false, offset: 0, @@ -66,6 +63,7 @@ impl TextView { pub fn set_text(&mut self, text: &str) -> HResult<()> { let lines = text.lines().map(|l| l.to_string()).collect(); self.lines = lines; + self.core.set_dirty(); self.refresh() } @@ -94,6 +92,10 @@ impl TextView { self.offset = 0; } } + + if offset != self.offset as isize { + self.core.set_dirty(); + } } pub fn scroll_up(&mut self) { @@ -140,8 +142,17 @@ impl Widget for TextView { self.scroll_bottom(); } + if self.core.is_dirty() { + self.core.set_clean(); + } + Ok(()) + } - self.buffer = self.get_clearlist()? + + fn get_drawlist(&self) -> HResult<String> { + let (xsize, ysize) = self.get_coordinates()?.size().size(); + let (xpos, ypos) = self.get_coordinates()?.position().position(); + + let output = self.get_clearlist()? + &self .lines .iter() @@ -156,10 +167,6 @@ impl Widget for TextView { sized_string(&line, xsize)) }) .collect::<String>(); - Ok(()) - } - - fn get_drawlist(&self) -> HResult<String> { - Ok(self.buffer.clone()) + Ok(output) } } |