freya-node-state 0.2.1

Internal Node states for Dioxus RealDOM elements used in Freya.
Documentation
use freya_engine::prelude::*;
use freya_node_state::{Fill, GradientStop, LinearGradient, Parse, Shadow, ShadowPosition};

#[test]
fn parse_big_shadow() {
    let shadow = Shadow::parse("1 2 50 25.0 red");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 25.0,
            fill: Fill::Color(Color::RED),
            position: ShadowPosition::Normal
        })
    );
}

#[test]
fn parse_inset_shadow() {
    let shadow = Shadow::parse("inset 1 2 50 25.0 red");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 25.0,
            fill: Fill::Color(Color::RED),
            position: ShadowPosition::Inset
        })
    );
}

#[test]
fn parse_shadow_with_assumed_spread() {
    let shadow = Shadow::parse("inset 1 2 50 red");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 0.0,
            fill: Fill::Color(Color::RED),
            position: ShadowPosition::Inset
        })
    );
}

#[test]
fn parse_gradient_shadow() {
    let shadow = Shadow::parse("inset 1 2 50 linear-gradient(red 0%, blue 100%)");
    assert_eq!(
        shadow,
        Ok(Shadow {
            x: 1.0,
            y: 2.0,
            blur: 50.0,
            spread: 0.0,
            fill: Fill::LinearGradient(LinearGradient {
                angle: 0.0,
                stops: vec![
                    GradientStop {
                        color: Color::RED,
                        offset: 0.0,
                    },
                    GradientStop {
                        color: Color::BLUE,
                        offset: 1.0,
                    }
                ]
            }),
            position: ShadowPosition::Inset
        })
    );
}