diff --git a/crates/notedeck_columns/src/ui/widgets.rs b/crates/notedeck_columns/src/ui/widgets.rs index 54a1120d..b9688d5a 100644 --- a/crates/notedeck_columns/src/ui/widgets.rs +++ b/crates/notedeck_columns/src/ui/widgets.rs @@ -3,6 +3,14 @@ use notedeck::NotedeckTextStyle; /// Sized and styled to match the figma design pub fn styled_button(text: &str, fill_color: egui::Color32) -> impl Widget + '_ { + styled_button_toggleable(text, fill_color, true) +} + +pub fn styled_button_toggleable( + text: &str, + fill_color: egui::Color32, + enabled: bool, +) -> impl Widget + '_ { move |ui: &mut egui::Ui| -> egui::Response { let painter = ui.painter(); let text_color = if ui.visuals().dark_mode { @@ -18,9 +26,24 @@ pub fn styled_button(text: &str, fill_color: egui::Color32) -> impl Widget + '_ ui.available_width(), ); - ui.add_sized( - galley.rect.expand2(egui::vec2(16.0, 8.0)).size(), - Button::new(galley).corner_radius(8.0).fill(fill_color), - ) + let size = galley.rect.expand2(egui::vec2(16.0, 8.0)).size(); + let mut button = Button::new(galley).corner_radius(8.0); + + if !enabled { + button = button + .sense(egui::Sense::focusable_noninteractive()) + .fill(ui.visuals().noninteractive().bg_fill) + .stroke(ui.visuals().noninteractive().bg_stroke); + } else { + button = button.fill(fill_color); + } + + let mut resp = ui.add_sized(size, button); + + if !enabled { + resp = resp.on_hover_cursor(egui::CursorIcon::NotAllowed); + } + + resp } }