From 1a03228111fbbb9556551f64ca5bab9ce193d69a Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 5 Dec 2021 18:32:07 -0500 Subject: also display the speed if it's non-default --- src/bin/ttyplay/display.rs | 21 +++++++++++++++++++++ src/bin/ttyplay/event.rs | 11 +++++++++++ src/bin/ttyplay/timer.rs | 16 ++++++++++++++++ 3 files changed, 48 insertions(+) (limited to 'src') diff --git a/src/bin/ttyplay/display.rs b/src/bin/ttyplay/display.rs index f8b7e71..082148a 100644 --- a/src/bin/ttyplay/display.rs +++ b/src/bin/ttyplay/display.rs @@ -6,6 +6,7 @@ pub struct Display { total_frames: usize, done_loading: bool, paused: bool, + speed: u32, show_ui: bool, show_help: bool, active_search: Option, @@ -19,6 +20,7 @@ impl Display { total_frames: 0, done_loading: false, paused: false, + speed: 16, show_ui: true, show_help: false, active_search: None, @@ -45,6 +47,10 @@ impl Display { self.paused = paused; } + pub fn speed(&mut self, speed: u32) { + self.speed = speed; + } + pub fn toggle_ui(&mut self) { self.show_ui = !self.show_ui; } @@ -71,6 +77,7 @@ impl Display { if self.paused && self.show_ui { self.render_frame_count(output); + self.render_speed(output); self.render_pause_symbol(output); if self.show_help { @@ -109,6 +116,20 @@ impl Display { )); } + fn render_speed(&self, output: &mut textmode::Output) { + if self.speed != 16 { + output.move_to(1, 0); + output.reset_attributes(); + output.set_fgcolor(textmode::color::BLACK); + output.set_bgcolor(textmode::color::CYAN); + + output.write_str(&format!( + "speed: {}x", + 16.0 / f64::from(self.speed) + )); + } + } + #[allow(clippy::unused_self)] fn render_pause_symbol(&self, output: &mut textmode::Output) { let size = output.screen().size(); diff --git a/src/bin/ttyplay/event.rs b/src/bin/ttyplay/event.rs index 667d43f..e87699b 100644 --- a/src/bin/ttyplay/event.rs +++ b/src/bin/ttyplay/event.rs @@ -2,6 +2,7 @@ pub enum Event { FrameTransition((usize, vt100::Screen)), FrameLoaded(Option), Paused(bool), + Speed(u32), TimerAction(TimerAction), ToggleUi, ToggleHelp, @@ -73,6 +74,7 @@ struct Pending { frame_loaded: Option, done_loading: bool, paused: Option, + speed: Option, timer_actions: std::collections::VecDeque, toggle_ui: bool, toggle_help: bool, @@ -102,6 +104,9 @@ impl Pending { Event::Paused(paused) => { self.paused = Some(paused); } + Event::Speed(speed) => { + self.speed = Some(speed); + } Event::TimerAction(action) => { self.timer_actions.push_back(action); } @@ -137,6 +142,7 @@ impl Pending { || self.frame_loaded.is_some() || self.done_loading || self.paused.is_some() + || self.speed.is_some() || !self.timer_actions.is_empty() || self.toggle_ui || self.toggle_help @@ -167,6 +173,8 @@ impl Pending { Some(Event::ToggleHelp) } else if let Some(paused) = self.paused.take() { Some(Event::Paused(paused)) + } else if let Some(speed) = self.speed.take() { + Some(Event::Speed(speed)) } else if let Some(frame) = self.frame_loaded.take() { Some(Event::FrameLoaded(Some(frame))) } else if self.done_loading { @@ -207,6 +215,9 @@ pub async fn handle_events( Event::Paused(paused) => { display.paused(paused); } + Event::Speed(speed) => { + display.speed(speed); + } Event::ToggleUi => { display.toggle_ui(); } diff --git a/src/bin/ttyplay/timer.rs b/src/bin/ttyplay/timer.rs index 62bbff9..0cd66a6 100644 --- a/src/bin/ttyplay/timer.rs +++ b/src/bin/ttyplay/timer.rs @@ -123,6 +123,12 @@ pub fn spawn_task( playback_ratio /= 2; let now = std::time::Instant::now(); start_time = now - (now - start_time) / 2; + event_w + .send(crate::event::Event::Speed( + playback_ratio, + )) + .await + .unwrap(); } } crate::event::TimerAction::SlowDown => { @@ -130,6 +136,12 @@ pub fn spawn_task( playback_ratio *= 2; let now = std::time::Instant::now(); start_time = now - (now - start_time) * 2; + event_w + .send(crate::event::Event::Speed( + playback_ratio, + )) + .await + .unwrap(); } } crate::event::TimerAction::DefaultSpeed => { @@ -137,6 +149,10 @@ pub fn spawn_task( start_time = now - (((now - start_time) * 16) / playback_ratio); playback_ratio = 16; + event_w + .send(crate::event::Event::Speed(playback_ratio)) + .await + .unwrap(); } crate::event::TimerAction::Search(s, backwards) => { if let Some(new_idx) = -- cgit v1.2.3-54-g00ecf