use crate::*; impl Audio for TransportToolbar { fn process (&mut self, _: &Client, scope: &ProcessScope) -> Control { self.update(&scope); Control::Continue } } impl TransportToolbar { pub fn update (&mut self, scope: &ProcessScope) -> (bool, usize, usize, usize, usize, f64) { let times = scope.cycle_times().unwrap(); let CycleTimes { current_frames, current_usecs, next_usecs, period_usecs } = times; let chunk_size = scope.n_frames() as usize; let transport = self.transport.as_ref().unwrap().query().unwrap(); self.frame = transport.pos.frame() as usize; let mut reset = false; if self.playing != Some(transport.state) { match transport.state { TransportState::Rolling => { self.started = Some((current_frames as usize, current_usecs as usize)); }, TransportState::Stopped => { self.started = None; reset = true; }, _ => {} } } self.playing = Some(transport.state); if self.playing == Some(TransportState::Stopped) { self.started = None; } match self.started { Some((_, usecs)) => { self.usecs = current_usecs as usize - usecs; }, None => { self.usecs = 0; } } ( reset, current_frames as usize, chunk_size as usize, current_usecs as usize, next_usecs as usize, period_usecs as f64 ) } }