From 69ae35010f9827e51ca5b499d5f7c5003e313dd6 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Tue, 18 Feb 2025 11:34:27 -0500 Subject: [PATCH] fix: button styling --- examples/application/src/main.rs | 68 ++++++++++++++++++-------------- src/app/core.rs | 9 ++++- src/surface_message.rs | 1 - src/widget/button/widget.rs | 12 +++++- 4 files changed, 57 insertions(+), 33 deletions(-) diff --git a/examples/application/src/main.rs b/examples/application/src/main.rs index 6b1cbf7f..de94b980 100644 --- a/examples/application/src/main.rs +++ b/examples/application/src/main.rs @@ -12,11 +12,12 @@ use cosmic::iced::widget::column; use cosmic::iced::Length; use cosmic::iced_core::Size; use cosmic::surface_message::{MessageWrapper, SurfaceMessage, SurfaceMessageHandler}; -use cosmic::widget::button; use cosmic::widget::icon::{from_name, Handle}; use cosmic::widget::menu::KeyBind; +use cosmic::widget::{button, text}; use cosmic::widget::{ container, + menu::menu_button, menu::{self, action::MenuAction}, nav_bar, responsive, }; @@ -329,35 +330,42 @@ impl cosmic::Application for App { ), (menu::root("hi 4"), { let mut root_items = vec![menu::Tree::with_children( - menu::root("hi 41 extra root"), - vec![menu::Tree::with_children(menu::root("hi 41 extra 2"), { - let mut root_items = vec![menu::Tree::with_children( - menu::root("hi 41 extra root"), - vec![menu::Tree::with_children( - menu::root("hi 41 extra 2"), - menu::items( - &self.keybinds, - vec![menu::Item::Button( - "hi 41 extra root item", - None, - Action::Hi, - )], - ), - )], - )]; - let mut items = menu::items( - &self.keybinds, - vec![ - menu::Item::Button("hi 42", None, Action::Hi), - menu::Item::Button("hi 43", None, Action::Hi), - menu::Item::Button("hi 44", None, Action::Hi), - menu::Item::Button("hi 45", None, Action::Hi), - menu::Item::Button("hi 46", None, Action::Hi), - ], - ); - root_items.append(&mut items); - root_items - })], + menu_button(vec![text("hi 41 extra root").into()]) + .on_press(Message::Hi), + vec![menu::Tree::with_children( + menu_button(vec![text("hi 41 extra 2").into()]) + .on_press(Message::Hi), + { + let mut root_items = vec![menu::Tree::with_children( + menu_button(vec![text("hi 41 extra root").into()]) + .on_press(Message::Hi), + vec![menu::Tree::with_children( + menu_button(vec![text("hi 41 extra 2").into()]) + .on_press(Message::Hi), + menu::items( + &self.keybinds, + vec![menu::Item::Button( + "hi 41 extra root item", + None, + Action::Hi, + )], + ), + )], + )]; + let mut items = menu::items( + &self.keybinds, + vec![ + menu::Item::Button("hi 42", None, Action::Hi), + menu::Item::Button("hi 43", None, Action::Hi), + menu::Item::Button("hi 44", None, Action::Hi), + menu::Item::Button("hi 45", None, Action::Hi), + menu::Item::Button("hi 46", None, Action::Hi), + ], + ); + root_items.append(&mut items); + root_items + }, + )], )]; let mut items = menu::items( &self.keybinds, diff --git a/src/app/core.rs b/src/app/core.rs index 50c6fb05..2d6bcf21 100644 --- a/src/app/core.rs +++ b/src/app/core.rs @@ -441,7 +441,14 @@ impl Core { trees .into_iter() .map(|mt| { - menu::Tree::<_>::with_children(mt.0.width(Length::Fill), mt.1) + menu::Tree::<_>::with_children( + mt.0.width(Length::Fill) + .height(Length::Fixed(36.0)) + .padding([4, 16]) + .class(crate::theme::Button::MenuItem) + .force_enabled(true), + mt.1, + ) }) .collect(), )]), diff --git a/src/surface_message.rs b/src/surface_message.rs index 7a623ae2..68e57004 100644 --- a/src/surface_message.rs +++ b/src/surface_message.rs @@ -51,7 +51,6 @@ pub enum SurfaceMessage { }, } -#[cfg(feature = "wayland")] impl std::fmt::Debug for SurfaceMessage { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { diff --git a/src/widget/button/widget.rs b/src/widget/button/widget.rs index a51adbb5..3f5efbc8 100644 --- a/src/widget/button/widget.rs +++ b/src/widget/button/widget.rs @@ -55,6 +55,7 @@ pub struct Button<'a, Message> { selected: bool, style: crate::theme::Button, variant: Variant, + force_enabled: bool, } impl<'a, Message> Button<'a, Message> { @@ -77,6 +78,7 @@ impl<'a, Message> Button<'a, Message> { selected: false, style: crate::theme::Button::default(), variant: Variant::Normal, + force_enabled: false, } } @@ -90,6 +92,7 @@ impl<'a, Message> Button<'a, Message> { name: None, #[cfg(feature = "a11y")] description: None, + force_enabled: false, #[cfg(feature = "a11y")] label: None, content: content.into(), @@ -163,6 +166,12 @@ impl<'a, Message> Button<'a, Message> { self } + /// Sets the the [`Button`] to enabled whether or not it has handlers for on press. + pub fn force_enabled(mut self, enabled: bool) -> Self { + self.force_enabled = enabled; + self + } + /// Sets the widget to a selected state. /// /// Displays a selection indicator on image buttons. @@ -348,7 +357,8 @@ impl<'a, Message: 'a + Clone> Widget let mut headerbar_alpha = None; - let is_enabled = self.on_press.is_some() || self.on_press_down.is_some(); + let is_enabled = + self.on_press.is_some() || self.on_press_down.is_some() || self.force_enabled; let is_mouse_over = cursor.position().is_some_and(|p| bounds.contains(p)); let state = tree.state.downcast_ref::();