aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-05 18:32:07 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-05 18:32:07 -0500
commit1a03228111fbbb9556551f64ca5bab9ce193d69a (patch)
tree8d8e766599cc8af534f3a45e95962ac463f3080e
parent9c8ca6c7420b1483b1df9dbf373ba3295745eceb (diff)
downloadttyrec-bin-1a03228111fbbb9556551f64ca5bab9ce193d69a.tar.gz
ttyrec-bin-1a03228111fbbb9556551f64ca5bab9ce193d69a.zip
also display the speed if it's non-default
-rw-r--r--src/bin/ttyplay/display.rs21
-rw-r--r--src/bin/ttyplay/event.rs11
-rw-r--r--src/bin/ttyplay/timer.rs16
3 files changed, 48 insertions, 0 deletions
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<String>,
@@ -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<usize>),
Paused(bool),
+ Speed(u32),
TimerAction(TimerAction),
ToggleUi,
ToggleHelp,
@@ -73,6 +74,7 @@ struct Pending {
frame_loaded: Option<usize>,
done_loading: bool,
paused: Option<bool>,
+ speed: Option<u32>,
timer_actions: std::collections::VecDeque<TimerAction>,
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) =