Siphon/src/render/palette.rs

62 lines
2.4 KiB
Rust

use crate::layer::Rgba;
#[derive(Debug, Clone)]
pub struct Palette {
pub default: Rgba,
pub overrides: Vec<(String, Rgba)>,
pub via_body: Rgba,
pub via_drill: Rgba,
}
impl Palette {
pub fn colour(&self, layer: &str) -> Rgba {
self.overrides
.iter()
.find(|(n, _)| n == layer)
.map(|(_, c)| *c)
.unwrap_or(self.default)
}
pub fn with_override(mut self, layer: impl Into<String>, colour: Rgba) -> Self {
self.overrides.push((layer.into(), colour));
self
}
pub fn via_body(&self) -> Rgba { self.via_body }
pub fn via_drill(&self) -> Rgba { self.via_drill }
}
impl Default for Palette {
fn default() -> Self {
Self {
default: Rgba::opaque(180, 180, 180),
overrides: vec![
("F.Cu".into(), Rgba::opaque(200, 52, 52)),
("B.Cu".into(), Rgba::opaque(77, 127, 196)),
("In1.Cu".into(), Rgba::opaque(127, 200, 127)),
("In2.Cu".into(), Rgba::opaque(206, 125, 188)),
("F.Silkscreen".into(), Rgba::opaque(220, 200, 200)),
("B.Silkscreen".into(), Rgba::opaque(200, 220, 220)),
("F.SilkS".into(), Rgba::opaque(220, 200, 200)),
("B.SilkS".into(), Rgba::opaque(200, 220, 220)),
("F.Mask".into(), Rgba::opaque(102, 0, 102)),
("B.Mask".into(), Rgba::opaque(102, 0, 102)),
("F.Paste".into(), Rgba::opaque(180, 180, 180)),
("B.Paste".into(), Rgba::opaque(180, 180, 180)),
("F.Fab".into(), Rgba::opaque(150, 115, 60)),
("B.Fab".into(), Rgba::opaque(150, 115, 60)),
("F.Courtyard".into(), Rgba::opaque(255, 38, 226)),
("B.Courtyard".into(), Rgba::opaque(38, 233, 255)),
("F.CrtYd".into(), Rgba::opaque(255, 38, 226)),
("B.CrtYd".into(), Rgba::opaque(38, 233, 255)),
("Edge.Cuts".into(), Rgba::opaque(255, 240, 150)),
("Margin".into(), Rgba::opaque(255, 120, 120)),
("Dwgs.User".into(), Rgba::opaque(194, 194, 194)),
("Cmts.User".into(), Rgba::opaque(89, 148, 220)),
],
via_body: Rgba::opaque(200, 170, 80),
via_drill: Rgba::opaque(30, 30, 30),
}
}
}