Browse Source

utilities/widgets: only advance stage by timer in ProgressSpinner

jmap-eventsource
Manos Pitsidianakis 1 year ago
parent
commit
d8d66641e2
Signed by: epilys GPG Key ID: 73627C2F690DF710
  1. 2
      src/components/utilities.rs
  2. 20
      src/components/utilities/widgets.rs

2
src/components/utilities.rs

@ -654,7 +654,7 @@ impl fmt::Display for StatusBar {
impl StatusBar {
pub fn new(context: &Context, container: Box<dyn Component>) -> Self {
let mut progress_spinner = ProgressSpinner::new(0);
let mut progress_spinner = ProgressSpinner::new(19);
match context.settings.terminal.progress_spinner_sequence.as_ref() {
Some(conf::terminal::ProgressSpinnerSequence::Integer(k)) => {
progress_spinner.set_kind(*k);

20
src/components/utilities/widgets.rs

@ -1180,16 +1180,8 @@ impl Component for ProgressSpinner {
if self.active {
write_string_to_grid(
match self.kind.as_ref() {
Ok(kind) => {
let stage = self.stage;
self.stage = (self.stage + 1).wrapping_rem(Self::KINDS[*kind].len());
Self::KINDS[*kind][stage].as_ref()
}
Err(custom) => {
let stage = self.stage;
self.stage = (self.stage + 1).wrapping_rem(custom.len());
custom[stage].as_ref()
}
Ok(kind) => Self::KINDS[*kind][self.stage].as_ref(),
Err(custom) => custom[self.stage].as_ref(),
},
grid,
theme_attr.fg,
@ -1207,6 +1199,14 @@ impl Component for ProgressSpinner {
fn process_event(&mut self, event: &mut UIEvent, _context: &mut Context) -> bool {
match event {
UIEvent::Timer(id) if *id == self.timer.si_value => {
match self.kind.as_ref() {
Ok(kind) => {
self.stage = (self.stage + 1).wrapping_rem(Self::KINDS[*kind].len());
}
Err(custom) => {
self.stage = (self.stage + 1).wrapping_rem(custom.len());
}
}
self.dirty = true;
true
}

Loading…
Cancel
Save