Skip to content

Commit

Permalink
Persist theme preference
Browse files Browse the repository at this point in the history
  • Loading branch information
bash committed Jul 19, 2024
1 parent 71269dc commit 03fb5aa
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 11 deletions.
7 changes: 4 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ thiserror = "1.0.38"
surf = "2.3.2"
serde = { version = "1.0.164", features = ["derive"] }
log = { version = "0.4.19", features = ["kv"] }
egui-theme-switch = "0.1.0"
egui-theme-switch = { version = "0.1.1", features = ["serde"] }

[lints]
workspace = true
Expand Down
6 changes: 5 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ impl PortalApp {
cc.egui_ctx.set_fonts(font_definitions());

PortalApp {
visuals: CustomVisuals::new(default_theme),
visuals: CustomVisuals::new(default_theme, cc),
state: PortalAppState::from(action),
version: cc
.egui_ctx
Expand Down Expand Up @@ -89,6 +89,10 @@ impl eframe::App for PortalApp {
});
});
}

fn save(&mut self, storage: &mut dyn eframe::Storage) {
self.visuals.save(storage)
}
}

impl PortalApp {
Expand Down
22 changes: 17 additions & 5 deletions src/visuals.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use eframe::Theme;
use eframe::{get_value, set_value, CreationContext, Theme};
use egui::epaint::hex_color;
use egui::{Context, Visuals};
use egui::{Context, ViewportCommand, Visuals};
use egui_theme_switch::ThemePreference;
use log::trace;

Expand All @@ -17,24 +17,36 @@ pub(crate) enum Accent {
Blue,
}

const THEME_PREFERENCE_KEY: &str = "theme-preference";

impl CustomVisuals {
pub(crate) fn new(default_theme: Theme) -> Self {
pub(crate) fn new(default_theme: Theme, cc: &CreationContext) -> Self {
let preference = cc
.storage
.and_then(|s| get_value(s, THEME_PREFERENCE_KEY))
.unwrap_or(ThemePreference::System);

Self {
current: None,
default_theme,
preference: ThemePreference::System,
preference,
}
}

pub(crate) fn update(&mut self, accent: Accent, ctx: &Context, frame: &eframe::Frame) {
let theme = self.resolve_theme(frame);
if self.current != Some((theme, accent)) {
ctx.set_visuals(visuals(theme, accent));
trace!("Updating visuals for theme {theme:?} and accent {accent:?}");
ctx.set_visuals(visuals(theme, accent));
ctx.send_viewport_cmd(ViewportCommand::SetTheme(self.preference.into()));
self.current = Some((theme, accent));
}
}

pub(crate) fn save(&mut self, storage: &mut dyn eframe::Storage) {
set_value(storage, THEME_PREFERENCE_KEY, &self.preference)
}

pub(crate) fn preference_mut(&mut self) -> &mut ThemePreference {
&mut self.preference
}
Expand Down
1 change: 0 additions & 1 deletion src/widgets/menu.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ pub(crate) fn app_menu(
menu::bar(ui, |ui| {
let version = AppVersion::current();

#[cfg(debug_assertions)]
ui.menu_button("View", |ui| {
ui.add(ThemeSwitch::new(visuals.preference_mut()));
});
Expand Down

0 comments on commit 03fb5aa

Please sign in to comment.