diff options
| author | Aram Drevekenin <aram@poor.dev> | 2022-11-21 20:07:24 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-11-21 20:07:24 +0100 |
| commit | 63e7531c48f1c8fbe916e3ac5475cf36201f52b8 (patch) | |
| tree | 534e56cf9cf2924cec94a32bef1b6bcf92760209 /default-plugins/strider/src | |
| parent | docs(changelog): client buffer overflow fix (diff) | |
| download | sl0ppij-63e7531c48f1c8fbe916e3ac5475cf36201f52b8.tar.gz sl0ppij-63e7531c48f1c8fbe916e3ac5475cf36201f52b8.tar.xz sl0ppij-63e7531c48f1c8fbe916e3ac5475cf36201f52b8.zip | |
performance(rendering): improve rendering performance (#1960)
* refactor(plugins): plugins now need to explicitly ask to be rendered
* performance(render): remove various needless renders
* performance(render): cache boundaries
* performance(render): adjust tests and cache cursor location/shape
* style(comment): remove outdated
* style(fmt): rustfmt
Diffstat (limited to 'default-plugins/strider/src')
| -rw-r--r-- | default-plugins/strider/src/main.rs | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/default-plugins/strider/src/main.rs b/default-plugins/strider/src/main.rs index fcac6ec6..6868c670 100644 --- a/default-plugins/strider/src/main.rs +++ b/default-plugins/strider/src/main.rs @@ -13,7 +13,8 @@ impl ZellijPlugin for State { subscribe(&[EventType::Key, EventType::Mouse]); } - fn update(&mut self, event: Event) { + fn update(&mut self, event: Event) -> bool { + let mut should_render = false; let prev_event = if self.ev_history.len() == 2 { self.ev_history.pop_front() } else { @@ -23,13 +24,22 @@ impl ZellijPlugin for State { match event { Event::Key(key) => match key { Key::Up | Key::Char('k') => { + let currently_selected = self.selected(); *self.selected_mut() = self.selected().saturating_sub(1); + if currently_selected != self.selected() { + should_render = true; + } }, Key::Down | Key::Char('j') => { + let currently_selected = self.selected(); let next = self.selected().saturating_add(1); *self.selected_mut() = min(self.files.len().saturating_sub(1), next); + if currently_selected != self.selected() { + should_render = true; + } }, Key::Right | Key::Char('\n') | Key::Char('l') if !self.files.is_empty() => { + should_render = true; self.traverse_dir_or_open_file(); self.ev_history.clear(); }, @@ -39,11 +49,13 @@ impl ZellijPlugin for State { // the reason this is a hard-coded number (2) and not "== ROOT" // or some such is that there are certain cases in which self.path // is empty and this will work then too + should_render = true; self.path.pop(); refresh_directory(self); } }, Key::Char('.') => { + should_render = true; self.toggle_hidden_files(); refresh_directory(self); }, @@ -52,15 +64,23 @@ impl ZellijPlugin for State { }, Event::Mouse(mouse_event) => match mouse_event { Mouse::ScrollDown(_) => { + let currently_selected = self.selected(); let next = self.selected().saturating_add(1); *self.selected_mut() = min(self.files.len().saturating_sub(1), next); + if currently_selected != self.selected() { + should_render = true; + } }, Mouse::ScrollUp(_) => { + let currently_selected = self.selected(); *self.selected_mut() = self.selected().saturating_sub(1); + if currently_selected != self.selected() { + should_render = true; + } }, Mouse::Release(line, _) => { if line < 0 { - return; + return should_render; } let mut should_select = true; if let Some((Event::Mouse(Mouse::Release(prev_line, _)), t)) = prev_event { @@ -70,10 +90,15 @@ impl ZellijPlugin for State { self.traverse_dir_or_open_file(); self.ev_history.clear(); should_select = false; + should_render = true; } } if should_select && self.scroll() + (line as usize) < self.files.len() { + let currently_selected = self.selected(); *self.selected_mut() = self.scroll() + (line as usize); + if currently_selected != self.selected() { + should_render = true; + } } }, _ => {}, @@ -81,7 +106,8 @@ impl ZellijPlugin for State { _ => { dbg!("Unknown event {:?}", event); }, - } + }; + should_render } fn render(&mut self, rows: usize, cols: usize) { |
