Redraw occasionally when batching events
This commit is contained in:
parent
f1b7ef0b98
commit
38dd7ccede
1 changed files with 8 additions and 1 deletions
|
|
@ -6,7 +6,7 @@ mod util;
|
||||||
mod widgets;
|
mod widgets;
|
||||||
|
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
use std::time::Duration;
|
use std::time::{Duration, Instant};
|
||||||
|
|
||||||
use crossterm::event::{Event, KeyCode, KeyEvent, KeyModifiers, MouseEvent};
|
use crossterm::event::{Event, KeyCode, KeyEvent, KeyModifiers, MouseEvent};
|
||||||
use log::debug;
|
use log::debug;
|
||||||
|
|
@ -23,6 +23,9 @@ use self::chat::ChatState;
|
||||||
use self::rooms::Rooms;
|
use self::rooms::Rooms;
|
||||||
use self::widgets::BoxedWidget;
|
use self::widgets::BoxedWidget;
|
||||||
|
|
||||||
|
/// Time to spend batch processing events before redrawing the screen.
|
||||||
|
const EVENT_PROCESSING_TIME: Duration = Duration::from_millis(1000 / 15); // 15 fps
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum UiEvent {
|
pub enum UiEvent {
|
||||||
Redraw,
|
Redraw,
|
||||||
|
|
@ -139,6 +142,7 @@ impl Ui {
|
||||||
Some(event) => event,
|
Some(event) => event,
|
||||||
None => return Ok(()),
|
None => return Ok(()),
|
||||||
};
|
};
|
||||||
|
let end_time = Instant::now() + EVENT_PROCESSING_TIME;
|
||||||
loop {
|
loop {
|
||||||
// Render in-between events so the next event is handled in an
|
// Render in-between events so the next event is handled in an
|
||||||
// up-to-date state. The results of these intermediate renders
|
// up-to-date state. The results of these intermediate renders
|
||||||
|
|
@ -159,6 +163,9 @@ impl Ui {
|
||||||
EventHandleResult::Continue => {}
|
EventHandleResult::Continue => {}
|
||||||
EventHandleResult::Stop => return Ok(()),
|
EventHandleResult::Stop => return Ok(()),
|
||||||
}
|
}
|
||||||
|
if Instant::now() >= end_time {
|
||||||
|
break;
|
||||||
|
}
|
||||||
event = match event_rx.try_recv() {
|
event = match event_rx.try_recv() {
|
||||||
Ok(event) => event,
|
Ok(event) => event,
|
||||||
Err(TryRecvError::Empty) => break,
|
Err(TryRecvError::Empty) => break,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue