71 lines
2.4 KiB
Rust
71 lines
2.4 KiB
Rust
//! Colours and widget style. A light theme in the spirit of desktop CAD tools; every colour
|
|
//! the UI uses comes from [`Tokens`].
|
|
|
|
use egui::{Color32, Stroke};
|
|
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct Tokens {
|
|
pub app_bar: Color32,
|
|
pub toolbar: Color32,
|
|
pub tab_active: Color32,
|
|
pub panel: Color32,
|
|
pub panel_header: Color32,
|
|
pub border: Color32,
|
|
pub text: Color32,
|
|
pub text_dim: Color32,
|
|
pub accent: Color32,
|
|
pub accent_soft: Color32,
|
|
pub sketch_accent: Color32,
|
|
pub error: Color32,
|
|
pub warning: Color32,
|
|
pub icon: Color32,
|
|
pub icon_fill: Color32,
|
|
pub timeline: Color32,
|
|
pub hover: Color32,
|
|
}
|
|
|
|
impl Tokens {
|
|
pub const fn get() -> Tokens {
|
|
Tokens {
|
|
app_bar: Color32::from_rgb(52, 56, 64),
|
|
toolbar: Color32::from_rgb(246, 247, 249),
|
|
tab_active: Color32::from_rgb(255, 255, 255),
|
|
panel: Color32::from_rgb(250, 251, 252),
|
|
panel_header: Color32::from_rgb(236, 238, 242),
|
|
border: Color32::from_rgb(208, 212, 220),
|
|
text: Color32::from_rgb(38, 42, 50),
|
|
text_dim: Color32::from_rgb(110, 116, 128),
|
|
accent: Color32::from_rgb(38, 120, 218),
|
|
accent_soft: Color32::from_rgb(214, 230, 250),
|
|
sketch_accent: Color32::from_rgb(46, 150, 90),
|
|
error: Color32::from_rgb(214, 54, 54),
|
|
warning: Color32::from_rgb(222, 150, 30),
|
|
icon: Color32::from_rgb(70, 78, 92),
|
|
icon_fill: Color32::from_rgb(178, 196, 222),
|
|
timeline: Color32::from_rgb(232, 235, 240),
|
|
hover: Color32::from_rgb(226, 234, 246),
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn apply(ctx: &egui::Context) {
|
|
let t = Tokens::get();
|
|
let mut v = egui::Visuals::light();
|
|
v.panel_fill = t.panel;
|
|
v.window_fill = t.panel;
|
|
v.extreme_bg_color = Color32::WHITE;
|
|
v.selection.bg_fill = t.accent_soft;
|
|
v.selection.stroke = Stroke::new(1.0, t.accent);
|
|
v.widgets.noninteractive.bg_stroke = Stroke::new(1.0, t.border);
|
|
v.widgets.noninteractive.fg_stroke = Stroke::new(1.0, t.text);
|
|
v.widgets.inactive.fg_stroke = Stroke::new(1.0, t.text);
|
|
v.widgets.hovered.weak_bg_fill = t.hover;
|
|
v.widgets.hovered.bg_fill = t.hover;
|
|
v.window_corner_radius = egui::CornerRadius::same(6);
|
|
ctx.set_visuals(v);
|
|
ctx.global_style_mut(|s| {
|
|
s.spacing.item_spacing = egui::vec2(6.0, 4.0);
|
|
s.spacing.button_padding = egui::vec2(6.0, 3.0);
|
|
});
|
|
}
|