argui-animation 0.2.0

Animation timing and interpolation for Argui interfaces
Documentation
use argui_animation::{Composition, Contribution, compose};

#[test]
fn contributions_use_stable_priority_then_insertion_order() {
    let mut contributions = [
        Contribution {
            value: 3.0_f32,
            composition: Composition::Add,
            priority: 2,
            order: 1,
            completed_iterations: 0,
        },
        Contribution::replace(10.0, 1, 8),
        Contribution {
            value: 2.0,
            composition: Composition::Accumulate,
            priority: 2,
            order: 0,
            completed_iterations: 2,
        },
    ];
    assert_eq!(compose(1.0, &mut contributions), 19.0);
    assert_eq!(contributions[0].composition, Composition::Replace);
}

#[test]
fn geometry_and_color_support_additive_composition() {
    use argui_animation::Compose;
    use argui_core::{Color, Point, Rect, Size};

    assert_eq!(
        Point::new(1.0, 2.0).add(Point::new(3.0, 4.0)),
        Point::new(4.0, 6.0)
    );
    assert_eq!(Size::new(2.0, 3.0).scale(2.0), Size::new(4.0, 6.0));
    assert_eq!(
        Rect::new(Point::new(1.0, 2.0), Size::new(3.0, 4.0))
            .add(Rect::new(Point::new(2.0, 3.0), Size::new(4.0, 5.0))),
        Rect::new(Point::new(3.0, 5.0), Size::new(7.0, 9.0))
    );
    assert_eq!(
        Color::linear_rgba(0.1, 0.2, 0.3, 0.4).scale(2.0),
        Color::linear_rgba(0.2, 0.4, 0.6, 0.8)
    );
    assert_eq!(2.0_f64.scale(2.5), 5.0);
}