feat: add create_style function with light/dark theme support

This commit is contained in:
Developer
2026-05-13 23:43:02 +08:00
parent 5bf11256b7
commit 17fbe7efbb
3 changed files with 1714 additions and 0 deletions

View File

@@ -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();