feat: add create_style function with light/dark theme support
This commit is contained in:
27
src/theme.rs
27
src/theme.rs
@@ -1,3 +1,5 @@
|
||||
use eframe::egui;
|
||||
use eframe::egui::Style;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
|
||||
@@ -12,6 +14,19 @@ impl Default for Theme {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn create_style(theme: &Theme) -> Style {
|
||||
match theme {
|
||||
Theme::Light => Style {
|
||||
visuals: egui::Visuals::light(),
|
||||
..Default::default()
|
||||
},
|
||||
Theme::Dark => Style {
|
||||
visuals: egui::Visuals::dark(),
|
||||
..Default::default()
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct Settings {
|
||||
pub font_size: f32,
|
||||
@@ -69,6 +84,18 @@ mod tests {
|
||||
assert_eq!(restored.theme, s.theme);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_create_style_light_vs_dark() {
|
||||
let light = create_style(&Theme::Light);
|
||||
let dark = create_style(&Theme::Dark);
|
||||
// Light and dark should have different window fills
|
||||
assert_ne!(light.visuals.window_fill, dark.visuals.window_fill);
|
||||
// Dark mode should have darker window
|
||||
assert!(dark.visuals.window_fill.r() < light.visuals.window_fill.r());
|
||||
assert!(dark.visuals.window_fill.g() < light.visuals.window_fill.g());
|
||||
assert!(dark.visuals.window_fill.b() < light.visuals.window_fill.b());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_theme_serialize() {
|
||||
let json = serde_json::to_string(&Theme::Dark).unwrap();
|
||||
|
||||
Reference in New Issue
Block a user