pub mod color;
use crate::size::border::Border;
use crate::style::color::Color;
use crate::Radius;
pub struct FrameStyle {
pub fill: Color,
pub radius: Radius,
pub shadow: Shadow,
}
#[derive(Clone)]
pub struct FillStyle {
pub inactive: Color,
pub hovered: Color,
pub clicked: Color,
}
impl FillStyle {
pub fn same(c: Color) -> Self {
FillStyle {
inactive: c.clone(),
hovered: c.clone(),
clicked: c,
}
}
}
#[derive(Clone)]
pub struct BorderStyle {
pub inactive: Border,
pub hovered: Border,
pub clicked: Border,
}
impl BorderStyle {
pub fn same(c: Border) -> Self {
BorderStyle {
inactive: c.clone(),
hovered: c.clone(),
clicked: c,
}
}
}
#[derive(Clone)]
pub struct ClickStyle {
pub fill: FillStyle,
pub border: BorderStyle,
}
impl ClickStyle {
pub fn new() -> ClickStyle {
ClickStyle {
fill: FillStyle {
inactive: Color::rgb(230, 230, 230),
hovered: Color::rgb(230, 230, 230),
clicked: Color::rgb(165, 165, 165),
},
border: BorderStyle {
inactive: Border::new(0.0),
hovered: Border::new(1.0).color(Color::rgb(0, 0, 0)),
clicked: Border::new(1.0).color(Color::rgb(0, 0, 0)),
},
}
}
pub fn dyn_fill(&self, clicked: bool, hovered: bool) -> &Color {
if clicked && hovered { return &self.fill.clicked; }
if hovered { return &self.fill.hovered; }
&self.fill.inactive
}
pub fn dyn_border(&self, clicked: bool, hovered: bool) -> &Border {
if clicked && hovered { return &self.border.clicked; }
if hovered { return &self.border.hovered; }
&self.border.inactive
}
}
pub struct WidgetStyle {
pub click: ClickStyle,
}
pub struct Shadow {
pub offset: [f32; 2],
pub spread: f32,
pub color: Color,
}
impl Shadow {
pub fn new() -> Shadow {
Shadow {
offset: [0.0; 2],
spread: 0.0,
color: Color::TRANSPARENT,
}
}
}
pub struct Style {
pub window: FrameStyle,
pub widget: WidgetStyle,
}
impl Style {
pub fn light_style() -> Style {
Style {
window: FrameStyle {
radius: Radius::same(0),
fill: Color::rgb(240, 240, 240),
shadow: Shadow::new(),
},
widget: WidgetStyle {
click: ClickStyle::new(),
},
}
}
}