use crate::color::{LinSrgba, Srgba};
use std::collections::HashMap;
#[derive(Clone, Debug)]
pub struct Theme {
pub fill_color: Color,
pub stroke_color: Color,
}
#[derive(Clone, Debug)]
pub struct Color {
pub default: Srgba,
pub primitive: HashMap<Primitive, Srgba>,
}
#[derive(Copy, Clone, Debug, Eq, Hash, PartialEq)]
pub enum Primitive {
Arrow,
Cuboid,
Ellipse,
Line,
Mesh,
Path,
Polygon,
Quad,
Rect,
Text,
Texture,
Tri,
}
impl Theme {
pub fn fill_srgba(&self, prim: &Primitive) -> Srgba {
self.fill_color
.primitive
.get(prim)
.map(|&c| c)
.unwrap_or(self.fill_color.default)
}
pub fn fill_lin_srgba(&self, prim: &Primitive) -> LinSrgba {
self.fill_srgba(prim).into_linear()
}
pub fn stroke_srgba(&self, prim: &Primitive) -> Srgba {
self.stroke_color
.primitive
.get(prim)
.map(|&c| c)
.unwrap_or(self.stroke_color.default)
}
pub fn stroke_lin_srgba(&self, prim: &Primitive) -> LinSrgba {
self.stroke_srgba(prim).into_linear()
}
}
impl Default for Theme {
fn default() -> Self {
let default_fill = Srgba::new(1.0, 1.0, 1.0, 1.0);
let default_stroke = Srgba::new(0.0, 0.0, 0.0, 1.0);
let fill_color = Color {
default: default_fill,
primitive: Default::default(),
};
let mut stroke_color = Color {
default: default_stroke,
primitive: Default::default(),
};
stroke_color
.primitive
.insert(Primitive::Arrow, default_fill);
Theme {
fill_color,
stroke_color,
}
}
}