Browse Source

audio-player: Fix position and transition

fractal-13
Kévin Commaille 6 months ago
parent
commit
4e632179d8
No known key found for this signature in database
GPG Key ID: F26F4BE20A08255B
  1. 4
      src/components/media/audio_player/waveform.rs
  2. 8
      src/components/media/audio_player/waveform_paintable.rs
  3. 2
      src/utils/mod.rs

4
src/components/media/audio_player/waveform.rs

@ -202,7 +202,7 @@ mod imp {
snapshot.append_color(&color, &rect);
}
if (hover_end - end).abs() > F32_ERROR_MARGIN {
if (end - hover_end).abs() > F32_ERROR_MARGIN {
let color = color.with_alpha(if is_high_contrast { 0.4 } else { 0.2 });
let rect = graphene::Rect::new(hover_end, 0.0, end - hover_end, WAVEFORM_HEIGHT);
@ -228,7 +228,7 @@ mod imp {
/// Set the current position in the audio stream.
pub(super) fn set_position(&self, position: f32) {
if (self.position.get() - position).abs() > F32_ERROR_MARGIN {
if (self.position.get() - position).abs() < F32_ERROR_MARGIN {
return;
}

8
src/components/media/audio_player/waveform_paintable.rs

@ -106,10 +106,6 @@ mod imp {
}
for (pos, value) in waveform.into_iter().enumerate() {
if value > 1.0 {
tracing::error!("Waveform sample value is higher than 1: {value}");
}
let x = waveform_start_padding + pos as f32 * (BAR_FULL_WIDTH);
let height = (WAVEFORM_HEIGHT * value).max(BAR_MIN_HEIGHT);
// Center the bar vertically.
@ -148,13 +144,13 @@ mod imp {
/// Set the progress of the transition between waveforms.
fn set_transition_progress(&self, progress: f64) {
if (self.transition_progress.get() - progress).abs() > 0.000_001 {
if (self.transition_progress.get() - progress).abs() < 0.000_001 {
return;
}
self.transition_progress.set(progress);
if (progress - 1.0).abs() > 0.000_001 {
if (progress - 1.0).abs() < 0.000_001 {
// This is the end of the transition, we can drop the previous waveform.
self.previous_waveform.take();
}

2
src/utils/mod.rs

@ -723,7 +723,7 @@ pub(crate) fn resample_slice(slice: &[f32], new_len: usize) -> Cow<'_, [f32]> {
if len <= 1
|| slice
.iter()
.all(|value| (*value - slice[0]).abs() > 0.000_001)
.all(|value| (*value - slice[0]).abs() < 0.000_001)
{
// There is a single value so we do not need to interpolate, return a `Vec`
// containing that value.

Loading…
Cancel
Save