Skip to main content

ferroui_base/animation/animators/
box_shadow_animator.rs

1use crate::animation::animators::{BoolAnimator, ColorAnimator, DoubleAnimator};
2use crate::media::BoxShadow;
3use crate::animation::animators::{Animator, AnimatorBase};
4
5/// Animator that interpolates [`BoxShadow`] properties.
6#[derive(Default)]
7pub struct BoxShadowAnimator {
8    base: AnimatorBase,
9}
10
11impl BoxShadowAnimator {
12    pub fn new() -> Self {
13        Self::default()
14    }
15
16    /// Interpolates between two values using the specified progress.
17    pub fn interpolate_core(progress: f64, old_value: &BoxShadow, new_value: &BoxShadow) -> BoxShadow {
18        BoxShadow {
19            offset_x: DoubleAnimator::interpolate_core(progress, &old_value.offset_x, &new_value.offset_x),
20            offset_y: DoubleAnimator::interpolate_core(progress, &old_value.offset_y, &new_value.offset_y),
21            blur: DoubleAnimator::interpolate_core(progress, &old_value.blur, &new_value.blur),
22            spread: DoubleAnimator::interpolate_core(progress, &old_value.spread, &new_value.spread),
23            color: ColorAnimator::interpolate_core(progress, &old_value.color, &new_value.color),
24            is_inset: BoolAnimator::interpolate_core(progress, &old_value.is_inset, &new_value.is_inset),
25        }
26    }
27}
28
29impl Animator for BoxShadowAnimator {
30    type Value = BoxShadow;
31
32    fn base(&self) -> &AnimatorBase {
33        &self.base
34    }
35
36    #[inline]
37    fn interpolate(&self, progress: f64, old_value: &BoxShadow, new_value: &BoxShadow) -> BoxShadow {
38        Self::interpolate_core(progress, old_value, new_value)
39    }
40}