use crate::color::Color;
#[derive(Debug, Clone, Copy)]
pub struct ShadowLayer {
pub offset_x: f32,
pub offset_y: f32,
pub blur: f32,
pub spread: f32,
pub color: Color,
}
impl ShadowLayer {
pub const NONE: Self = Self {
offset_x: 0.0,
offset_y: 0.0,
blur: 0.0,
spread: 0.0,
color: Color::TRANSPARENT,
};
}
#[derive(Debug, Clone, Copy)]
pub struct Shadows {
pub none: ShadowLayer,
pub sm: ShadowLayer,
pub md: ShadowLayer,
pub lg: ShadowLayer,
}
impl Default for Shadows {
fn default() -> Self {
let shadow_color = Color::BLACK.with_alpha(0.15);
Self {
none: ShadowLayer::NONE,
sm: ShadowLayer {
offset_x: 0.0,
offset_y: 1.0,
blur: 3.0,
spread: 0.0,
color: shadow_color,
},
md: ShadowLayer {
offset_x: 0.0,
offset_y: 2.0,
blur: 6.0,
spread: 0.0,
color: shadow_color,
},
lg: ShadowLayer {
offset_x: 0.0,
offset_y: 4.0,
blur: 12.0,
spread: 0.0,
color: shadow_color,
},
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn shadow_none_is_transparent() {
let s = Shadows::default();
assert_eq!(s.none.color.a, 0.0);
assert_eq!(s.none.blur, 0.0);
}
#[test]
fn shadow_blur_is_ascending() {
let s = Shadows::default();
assert!(s.none.blur < s.sm.blur);
assert!(s.sm.blur < s.md.blur);
assert!(s.md.blur < s.lg.blur);
}
}