diff --git a/src/timer.rs b/src/timer.rs index f10ac81..882c0bb 100644 --- a/src/timer.rs +++ b/src/timer.rs @@ -1,11 +1,13 @@ -use egui::{Color32, Direction, FontId, Layout, RichText, Ui}; -use egui_extras::{Size, StripBuilder}; use std::time::{Duration, Instant}; -use crate::{cli::Cli, util::*}; use clap::Parser; - use eframe::{App, CreationContext}; +use egui::{Color32, Direction, FontId, Layout, RichText, Ui}; +use egui_extras::{Size, StripBuilder}; + +use crate::{cli::Cli, util::*}; + +const MIN_REPAINT: Duration = Duration::from_millis(100); #[derive(Debug, Clone, Copy)] pub enum CountDirection { @@ -63,8 +65,14 @@ impl App for Timer { match self.state { TimerState::Unstarted => self.unstarted(ui, vsize), - TimerState::Running(_) => self.running(ui, vsize), + TimerState::Running(cs) => { + if (Instant::now() - cs.updated) > MIN_REPAINT { + ctx.request_repaint(); + } + self.running(ui, vsize); + } TimerState::Paused(_) => self.paused(ui, vsize), + TimerState::Finished => self.finished(ui, vsize), } }); @@ -251,6 +259,11 @@ impl Timer { Color32::DARK_GRAY } }; + // if we're counting up, do the right thing + let remaining = match self.direction { + CountDirection::Down => remaining, + CountDirection::Up => self.duration - remaining, + }; display_digits(&mut strip, remaining, color, vsize * 0.7); });