Lazier rendering, less background work
This commit is contained in:
parent
f5e9701d01
commit
a311f49e4b
2 changed files with 26 additions and 14 deletions
15
src/main.rs
15
src/main.rs
|
|
@ -36,14 +36,14 @@ fn main() -> Result<(), Error> {
|
|||
let mut ui = ui::Root::new(&mut state, &open_buffers);
|
||||
|
||||
Terminal::with(move |term| {
|
||||
let mut needs_render = true;
|
||||
loop {
|
||||
// Render the state to the screen
|
||||
term.update(|fb| ui.render(&state, fb));
|
||||
|
||||
// Wait for a while
|
||||
// Wait for a while, or until an event occurs
|
||||
term.wait_at_least(Duration::from_millis(250));
|
||||
|
||||
while let Some(ev) = term.get_event() {
|
||||
needs_render = true; // TODO: Don't always rerender?
|
||||
|
||||
// Resize events are special and need handling by the terminal
|
||||
if let TerminalEvent::Resize(cols, rows) = ev {
|
||||
term.set_size([cols, rows]);
|
||||
|
|
@ -59,7 +59,12 @@ fn main() -> Result<(), Error> {
|
|||
}
|
||||
}
|
||||
|
||||
state.tick();
|
||||
state.tick(&mut needs_render);
|
||||
|
||||
// Render the state to the screen
|
||||
if needs_render {
|
||||
term.update(|fb| ui.render(&state, fb));
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
25
src/state.rs
25
src/state.rs
|
|
@ -867,16 +867,23 @@ impl Buffer {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn tick(&mut self) {
|
||||
pub fn tick(&mut self, needs_render: &mut bool) {
|
||||
if let Some(path) = &self.path {
|
||||
let stale = std::fs::metadata(path)
|
||||
.and_then(|m| m.modified())
|
||||
.map(|lm| lm > self.opened_at.expect("state buffer must have open time"));
|
||||
match (stale, self.unsaved) {
|
||||
(Ok(false), _) => {}
|
||||
(Ok(true), true) => self.diverged = true,
|
||||
(Ok(true), false) => self.reload(),
|
||||
(Err(_), _) => {}
|
||||
.map_or(true, |lm| {
|
||||
lm > self.opened_at.expect("state buffer must have open time")
|
||||
});
|
||||
if stale {
|
||||
if self.unsaved {
|
||||
if !self.diverged {
|
||||
self.diverged = true;
|
||||
*needs_render = true;
|
||||
}
|
||||
} else {
|
||||
self.reload();
|
||||
*needs_render = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -985,10 +992,10 @@ impl State {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn tick(&mut self) {
|
||||
pub fn tick(&mut self, needs_render: &mut bool) {
|
||||
self.tick += 1;
|
||||
for b in self.buffers.values_mut() {
|
||||
b.tick();
|
||||
b.tick(needs_render);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue