ferroui_base/animation/animators/
box_shadow_animator.rs1use crate::animation::animators::{BoolAnimator, ColorAnimator, DoubleAnimator};
2use crate::media::BoxShadow;
3use crate::animation::animators::{Animator, AnimatorBase};
4
5#[derive(Default)]
7pub struct BoxShadowAnimator {
8 base: AnimatorBase,
9}
10
11impl BoxShadowAnimator {
12 pub fn new() -> Self {
13 Self::default()
14 }
15
16 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}