Improved window resizing responsiveness.
The reformat code was being run on every resize event, which chokes on most resizes which end up emitting a lot of resize events. Now it waits and processes a bunch of resize events until there aren't any left, and only does the actual reformat on the last one.
This commit is contained in:
parent
c9d09f6f98
commit
4d114162ee
|
@ -81,6 +81,7 @@ impl TermUI {
|
||||||
pub fn main_ui_loop(&mut self) {
|
pub fn main_ui_loop(&mut self) {
|
||||||
// Quitting flag
|
// Quitting flag
|
||||||
let mut quit = false;
|
let mut quit = false;
|
||||||
|
let mut resize: Option<(usize, usize)> = None;
|
||||||
|
|
||||||
self.editor.update_dim(self.height-1, self.width);
|
self.editor.update_dim(self.height-1, self.width);
|
||||||
self.editor.buffer.formatter.wrap_width = self.width as usize;
|
self.editor.buffer.formatter.wrap_width = self.width as usize;
|
||||||
|
@ -181,11 +182,7 @@ impl TermUI {
|
||||||
},
|
},
|
||||||
|
|
||||||
Ok(rustbox::Event::ResizeEvent(w, h)) => {
|
Ok(rustbox::Event::ResizeEvent(w, h)) => {
|
||||||
self.width = w as usize;
|
resize = Some((h as usize, w as usize));
|
||||||
self.height = h as usize;
|
|
||||||
self.editor.update_dim(self.height-1, self.width);
|
|
||||||
self.editor.buffer.formatter.wrap_width = self.width;
|
|
||||||
self.editor.buffer.reformat();
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_ => {
|
_ => {
|
||||||
|
@ -196,6 +193,15 @@ impl TermUI {
|
||||||
e = self.rb.peek_event(Duration::milliseconds(0)); // Get next event (if any)
|
e = self.rb.peek_event(Duration::milliseconds(0)); // Get next event (if any)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some((h, w)) = resize {
|
||||||
|
self.width = w as usize;
|
||||||
|
self.height = h as usize;
|
||||||
|
self.editor.update_dim(self.height-1, self.width);
|
||||||
|
self.editor.buffer.formatter.wrap_width = self.width;
|
||||||
|
self.editor.buffer.reformat();
|
||||||
|
println!("Resized window!");
|
||||||
|
}
|
||||||
|
resize = None;
|
||||||
|
|
||||||
// Quit if quit flag is set
|
// Quit if quit flag is set
|
||||||
if quit {
|
if quit {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user