use std::collections::HashMap;
use bevy::prelude::Color;
#[derive(Clone, Debug)]
pub struct Theme {
pub fill_color: ThemeColor,
pub stroke_color: ThemeColor,
}
#[derive(Clone, Debug)]
pub struct ThemeColor {
pub default: Color,
pub primitive: HashMap<Primitive, Color>,
}
#[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(&self, prim: &Primitive) -> Color {
self.fill_color
.primitive
.get(prim)
.map(|&c| c)
.unwrap_or(self.fill_color.default)
}
pub fn stroke(&self, prim: &Primitive) -> Color {
self.stroke_color
.primitive
.get(prim)
.map(|&c| c)
.unwrap_or(self.stroke_color.default)
}
}
impl Default for Theme {
fn default() -> Self {
let default_fill = Color::srgba(1.0, 1.0, 1.0, 1.0);
let default_stroke = Color::srgba(0.0, 0.0, 0.0, 1.0);
let fill_color = ThemeColor {
default: default_fill,
primitive: Default::default(),
};
let mut stroke_color = ThemeColor {
default: default_stroke,
primitive: Default::default(),
};
stroke_color
.primitive
.insert(Primitive::Arrow, default_fill);
Theme {
fill_color,
stroke_color,
}
}
}