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;
|
||||
|
||||
use std::sync::{Arc, Weak};
|
||||
use std::time::Duration;
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use crossterm::event::{Event, KeyCode, KeyEvent, KeyModifiers, MouseEvent};
|
||||
use log::debug;
|
||||
|
|
@ -23,6 +23,9 @@ use self::chat::ChatState;
|
|||
use self::rooms::Rooms;
|
||||
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)]
|
||||
pub enum UiEvent {
|
||||
Redraw,
|
||||
|
|
@ -139,6 +142,7 @@ impl Ui {
|
|||
Some(event) => event,
|
||||
None => return Ok(()),
|
||||
};
|
||||
let end_time = Instant::now() + EVENT_PROCESSING_TIME;
|
||||
loop {
|
||||
// Render in-between events so the next event is handled in an
|
||||
// up-to-date state. The results of these intermediate renders
|
||||
|
|
@ -159,6 +163,9 @@ impl Ui {
|
|||
EventHandleResult::Continue => {}
|
||||
EventHandleResult::Stop => return Ok(()),
|
||||
}
|
||||
if Instant::now() >= end_time {
|
||||
break;
|
||||
}
|
||||
event = match event_rx.try_recv() {
|
||||
Ok(event) => event,
|
||||
Err(TryRecvError::Empty) => break,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue