aboutsummaryrefslogtreecommitdiffstats
path: root/default-plugins/strider/src
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2022-11-21 20:07:24 +0100
committerGitHub <noreply@github.com>2022-11-21 20:07:24 +0100
commit63e7531c48f1c8fbe916e3ac5475cf36201f52b8 (patch)
tree534e56cf9cf2924cec94a32bef1b6bcf92760209 /default-plugins/strider/src
parentdocs(changelog): client buffer overflow fix (diff)
downloadsl0ppij-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.rs32
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) {