feat(comp/timer): use paused state for control timer

This commit is contained in:
Dmitriy Pleshevskiy 2022-02-18 00:13:19 +03:00
parent 17302d71a5
commit 5581a671a1
2 changed files with 18 additions and 6 deletions

View File

@ -105,9 +105,14 @@ where
);
self.start_time = Instant::now() - shift_start_time;
self.render_timer_id = ctx.request_timer(TIMER_INTERVAL);
self.finish_timer_id = ctx.request_timer(duration - shift_start_time);
data.reset(duration);
if data.paused {
self.pause_time = Some(self.start_time);
} else {
self.render_timer_id = ctx.request_timer(TIMER_INTERVAL);
self.finish_timer_id = ctx.request_timer(duration - shift_start_time);
}
child.event(ctx, event, data, env);
}
Event::Timer(id) if *id == self.render_timer_id => {
@ -122,11 +127,14 @@ where
}
}
Event::Command(cmd) if cmd.is(cmd::PAUSE_ALL_TIMER_COMP) => {
data.paused = true;
self.pause_time = Some(Instant::now());
self.render_timer_id = TimerToken::INVALID;
self.finish_timer_id = TimerToken::INVALID;
}
Event::Command(cmd) if cmd.is(cmd::UNPAUSE_ALL_TIMER_COMP) => {
data.paused = false;
let skip_pause = cmd.get_unchecked(cmd::UNPAUSE_ALL_TIMER_COMP);
self.finish_timer_id =
if let (false, Some(pause_instant)) = (skip_pause, self.pause_time.take()) {
@ -148,10 +156,15 @@ where
self.render_timer_id = ctx.request_timer(TIMER_INTERVAL);
}
Event::Command(cmd) if cmd.is(cmd::RESTART_TIMER_COMP) => {
self.start_time = Instant::now();
self.postpone_times = 0;
self.render_timer_id = ctx.request_timer(TIMER_INTERVAL);
self.finish_timer_id = ctx.request_timer(duration);
self.start_time = Instant::now();
if data.paused {
self.pause_time = Some(self.start_time)
} else {
self.render_timer_id = ctx.request_timer(TIMER_INTERVAL);
self.finish_timer_id = ctx.request_timer(duration);
}
data.reset(duration);
ctx.request_paint();
}

View File

@ -56,7 +56,6 @@ fn build_idle_timer(
sound_sender.send(sound::Type::EndRest).ok();
ctx.submit_command(cmd::DEINIT_COMP.to(Target::Widget(ctx.widget_id())));
ctx.submit_command(cmd::UNPAUSE_ALL_TIMER_COMP.with(false).to(Target::Global));
ctx.submit_command(cmd::RESTART_TIMER_COMP.to(Target::Widget(parent_widget_id)));
ctx.submit_command(druid::commands::CLOSE_WINDOW);
})