use crate::animation::{Easing, Spring, Decay};
#[derive(Debug, Clone, Copy)]
pub struct FadeScaleDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub scale_from: f64,
pub scale_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for FadeScaleDefaults {
fn default() -> Self {
Self {
duration_ms: 225,
easing: Easing::CubicBezier(0.0, 0.0, 0.2, 1.0),
scale_from: 0.95,
scale_to: 1.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct SlideUpDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub translate_from: f64,
pub translate_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
pub delay_ms: u64,
}
impl Default for SlideUpDefaults {
fn default() -> Self {
Self {
duration_ms: 450,
easing: Easing::CubicBezier(0.32, 1.0, 0.23, 1.0),
translate_from: 100.0,
translate_to: 0.0,
opacity_from: 0.0,
opacity_to: 1.0,
delay_ms: 0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct SlideDownDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub translate_from: f64,
pub translate_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for SlideDownDefaults {
fn default() -> Self {
Self {
duration_ms: 400,
easing: Easing::CubicBezier(0.32, 0.72, 0.0, 1.0),
translate_from: -100.0,
translate_to: 0.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct SlideRightDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub translate_from: f64,
pub translate_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for SlideRightDefaults {
fn default() -> Self {
Self {
duration_ms: 300,
easing: Easing::EaseOutCubic,
translate_from: 100.0,
translate_to: 0.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[derive(Debug, Clone)]
pub struct SpringScaleDefaults {
pub spring: Spring,
pub scale_from: f64,
pub scale_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for SpringScaleDefaults {
fn default() -> Self {
Self {
spring: Spring::new().stiffness(350.0).damping(28.0).mass(1.0),
scale_from: 0.0,
scale_to: 1.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct BackdropDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub opacity_from: f64,
pub opacity_to: f64,
pub blur_from: f64,
pub blur_to: f64,
}
impl Default for BackdropDefaults {
fn default() -> Self {
Self {
duration_ms: 200,
easing: Easing::Linear,
opacity_from: 0.0,
opacity_to: 0.5,
blur_from: 0.0,
blur_to: 0.0,
}
}
}
#[derive(Debug, Clone)]
pub struct DrawerSnapDefaults {
pub spring: Spring,
pub decay: Option<Decay>,
pub snap_points: Vec<f64>,
pub translate_from: f64,
pub translate_to: f64,
pub background_scale_from: f64,
pub background_scale_to: f64,
}
impl Default for DrawerSnapDefaults {
fn default() -> Self {
Self {
spring: Spring::new().stiffness(300.0).damping(30.0).mass(1.0),
decay: Some(Decay::new(0.0).friction(0.998)),
snap_points: vec![0.0, 40.0, 100.0],
translate_from: 100.0,
translate_to: 0.0,
background_scale_from: 1.0,
background_scale_to: 0.95,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct DropInDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub translate_from: f64,
pub translate_to: f64,
pub scale_from: f64,
pub scale_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for DropInDefaults {
fn default() -> Self {
Self {
duration_ms: 500,
easing: Easing::EaseOutBounce,
translate_from: -100.0,
translate_to: 0.0,
scale_from: 0.1,
scale_to: 1.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct ZoomFromOriginDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub origin_x: f64,
pub origin_y: f64,
pub scale_from: f64,
pub scale_to: f64,
pub translate_x_from: f64,
pub translate_x_to: f64,
pub translate_y_from: f64,
pub translate_y_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for ZoomFromOriginDefaults {
fn default() -> Self {
Self {
duration_ms: 300,
easing: Easing::CubicBezier(0.4, 0.0, 0.2, 1.0),
origin_x: 0.0,
origin_y: 0.0,
scale_from: 0.2,
scale_to: 1.0,
translate_x_from: 0.0,
translate_x_to: 0.0,
translate_y_from: 0.0,
translate_y_to: 0.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[derive(Debug, Clone, Copy)]
pub struct CurtainDefaults {
pub duration_ms: u64,
pub easing: Easing,
pub clip_from: f64,
pub clip_to: f64,
pub opacity_from: f64,
pub opacity_to: f64,
}
impl Default for CurtainDefaults {
fn default() -> Self {
Self {
duration_ms: 400,
easing: Easing::EASE_IN_OUT,
clip_from: 0.0,
clip_to: 1.0,
opacity_from: 0.0,
opacity_to: 1.0,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fade_scale_defaults() {
let defaults = FadeScaleDefaults::default();
assert_eq!(defaults.duration_ms, 225);
assert!((defaults.scale_from - 0.95).abs() < 0.01);
assert!((defaults.scale_to - 1.0).abs() < 0.01);
}
#[test]
fn test_slide_up_defaults() {
let defaults = SlideUpDefaults::default();
assert_eq!(defaults.duration_ms, 450);
assert!((defaults.translate_from - 100.0).abs() < 0.01);
assert!((defaults.translate_to - 0.0).abs() < 0.01);
}
#[test]
fn test_spring_scale_defaults() {
let defaults = SpringScaleDefaults::default();
assert!((defaults.spring.stiffness - 350.0).abs() < 0.1);
assert!((defaults.spring.damping - 28.0).abs() < 0.1);
assert!((defaults.scale_from - 0.0).abs() < 0.01);
assert!((defaults.scale_to - 1.0).abs() < 0.01);
}
#[test]
fn test_drawer_snap_defaults() {
let defaults = DrawerSnapDefaults::default();
assert_eq!(defaults.snap_points.len(), 3);
assert!((defaults.snap_points[0] - 0.0).abs() < 0.01);
assert!((defaults.snap_points[1] - 40.0).abs() < 0.01);
assert!((defaults.snap_points[2] - 100.0).abs() < 0.01);
}
#[test]
fn test_backdrop_defaults() {
let defaults = BackdropDefaults::default();
assert_eq!(defaults.duration_ms, 200);
assert!((defaults.opacity_to - 0.5).abs() < 0.01);
assert!((defaults.blur_from - 0.0).abs() < 0.01);
}
}