notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit fcd7c261bb278314e4db3b674456448bc24cdcbc
parent c6a7a50f81c505074abe84566b3725e620a3a1fb
Author: William Casarin <jb55@jb55.com>
Date:   Thu, 27 Mar 2025 11:50:20 -0700

chrome: initial action handling

still need settings and account nav

Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mcrates/notedeck_chrome/src/chrome.rs | 46+++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 41 insertions(+), 5 deletions(-)

diff --git a/crates/notedeck_chrome/src/chrome.rs b/crates/notedeck_chrome/src/chrome.rs @@ -25,6 +25,34 @@ pub enum ChromePanelAction { SaveTheme(ThemePreference), } +impl ChromePanelAction { + fn process(&self, ui: &mut egui::Ui) { + match self { + Self::SaveTheme(theme) => { + tracing::info!("Switching theme to {:?}", theme); + ui.ctx().options_mut(|o| { + o.theme_preference = *theme; + }); + } + + Self::Support => { + tracing::info!("Support selected"); + // open support view + } + + Self::Account => { + tracing::info!("Accounts view selected"); + // open account + } + + Self::Settings => { + tracing::info!("Settings view selected"); + // open account + } + } + } +} + impl Chrome { pub fn new() -> Self { Chrome::default() @@ -53,10 +81,12 @@ impl Chrome { /// /// The side menu should hover over the screen, while the side bar /// is collapsible but persistent on the screen. - fn show(&mut self, ctx: &mut AppContext, ui: &mut egui::Ui) { + fn show(&mut self, ctx: &mut AppContext, ui: &mut egui::Ui) -> Option<ChromePanelAction> { ui.spacing_mut().item_spacing.x = 0.0; + let mut got_action: Option<ChromePanelAction> = None; let side_panel_width: f32 = 70.0; + StripBuilder::new(ui) .size(Size::exact(side_panel_width)) // collapsible sidebar .size(Size::remainder()) // the main app contents @@ -80,7 +110,9 @@ impl Chrome { }); ui.with_layout(Layout::bottom_up(egui::Align::Center), |ui| { - self.bottomup_sidebar(ctx, ui); + if let Some(action) = self.bottomup_sidebar(ctx, ui) { + got_action = Some(action); + } }); // vertical sidebar line @@ -106,6 +138,8 @@ impl Chrome { self.apps[self.active as usize].update(ctx, ui); }); }); + + got_action } /// The section of the chrome sidebar that starts at the @@ -136,7 +170,7 @@ impl Chrome { .add(Button::new("🌙").frame(false)) .on_hover_text("Switch to dark mode"); if resp.clicked() { - Some(ChromePanelAction::SaveTheme(ThemePreference::Light)) + Some(ChromePanelAction::SaveTheme(ThemePreference::Dark)) } else { None } @@ -153,7 +187,7 @@ impl Chrome { if pfp_resp.clicked() { Some(ChromePanelAction::Account) - } else if settings_resp.clicked() || settings_resp.hovered() { + } else if settings_resp.clicked() { Some(ChromePanelAction::Settings) } else { None @@ -206,7 +240,9 @@ impl Chrome { impl notedeck::App for Chrome { fn update(&mut self, ctx: &mut notedeck::AppContext, ui: &mut egui::Ui) { - self.show(ctx, ui); + if let Some(action) = self.show(ctx, ui) { + action.process(ui); + } // TODO: unify this constant with the columns side panel width. ui crate? } }