scrin 0.1.83

A terminal UI toolkit with panes, widgets, overlays, animations, and Aisling-powered effects/loaders.
Documentation
use aisling::easing::Easing as AislingEasing;

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum EasingFn {
    Linear,
    InSine,
    OutSine,
    InOutSine,
    InQuad,
    OutQuad,
    InOutQuad,
    InCubic,
    OutCubic,
    InOutCubic,
    InQuart,
    OutQuart,
    InOutQuart,
    InQuint,
    OutQuint,
    InOutQuint,
    InExpo,
    OutExpo,
    InOutExpo,
    InCirc,
    OutCirc,
    InOutCirc,
    InBack,
    OutBack,
    InOutBack,
    InElastic,
    OutElastic,
    InOutElastic,
    InBounce,
    OutBounce,
    InOutBounce,
}

impl EasingFn {
    pub fn apply(self, t: f32) -> f32 {
        let mapped = match self {
            EasingFn::Linear => AislingEasing::Linear,
            EasingFn::InSine => AislingEasing::InSine,
            EasingFn::OutSine => AislingEasing::OutSine,
            EasingFn::InOutSine => AislingEasing::InOutSine,
            EasingFn::InQuad => AislingEasing::InQuad,
            EasingFn::OutQuad => AislingEasing::OutQuad,
            EasingFn::InOutQuad => AislingEasing::InOutQuad,
            EasingFn::InCubic => AislingEasing::InCubic,
            EasingFn::OutCubic => AislingEasing::OutCubic,
            EasingFn::InOutCubic => AislingEasing::InOutCubic,
            EasingFn::InQuart => AislingEasing::InQuart,
            EasingFn::OutQuart => AislingEasing::OutQuart,
            EasingFn::InOutQuart => AislingEasing::InOutQuart,
            EasingFn::InQuint => AislingEasing::InQuint,
            EasingFn::OutQuint => AislingEasing::OutQuint,
            EasingFn::InOutQuint => AislingEasing::InOutQuint,
            EasingFn::InExpo => AislingEasing::InExpo,
            EasingFn::OutExpo => AislingEasing::OutExpo,
            EasingFn::InOutExpo => AislingEasing::InOutExpo,
            EasingFn::InCirc => AislingEasing::InCirc,
            EasingFn::OutCirc => AislingEasing::OutCirc,
            EasingFn::InOutCirc => AislingEasing::InOutCirc,
            EasingFn::InBack => AislingEasing::InBack,
            EasingFn::OutBack => AislingEasing::OutBack,
            EasingFn::InOutBack => AislingEasing::InOutBack,
            EasingFn::InElastic => AislingEasing::InElastic,
            EasingFn::OutElastic => AislingEasing::OutElastic,
            EasingFn::InOutElastic => AislingEasing::InOutElastic,
            EasingFn::InBounce => AislingEasing::InBounce,
            EasingFn::OutBounce => AislingEasing::OutBounce,
            EasingFn::InOutBounce => AislingEasing::InOutBounce,
        };
        mapped.apply(t)
    }

    pub fn all() -> &'static [EasingFn] {
        &[
            EasingFn::Linear,
            EasingFn::InSine,
            EasingFn::OutSine,
            EasingFn::InOutSine,
            EasingFn::InQuad,
            EasingFn::OutQuad,
            EasingFn::InOutQuad,
            EasingFn::InCubic,
            EasingFn::OutCubic,
            EasingFn::InOutCubic,
            EasingFn::InQuart,
            EasingFn::OutQuart,
            EasingFn::InOutQuart,
            EasingFn::InQuint,
            EasingFn::OutQuint,
            EasingFn::InOutQuint,
            EasingFn::InExpo,
            EasingFn::OutExpo,
            EasingFn::InOutExpo,
            EasingFn::InCirc,
            EasingFn::OutCirc,
            EasingFn::InOutCirc,
            EasingFn::InBack,
            EasingFn::OutBack,
            EasingFn::InOutBack,
            EasingFn::InElastic,
            EasingFn::OutElastic,
            EasingFn::InOutElastic,
            EasingFn::InBounce,
            EasingFn::OutBounce,
            EasingFn::InOutBounce,
        ]
    }
}

impl Default for EasingFn {
    fn default() -> Self {
        EasingFn::Linear
    }
}