From f2c2ed0ccd10932dc17296edf1752131acf25e73 Mon Sep 17 00:00:00 2001 From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com> Date: Fri, 24 Jan 2025 09:44:00 -0300 Subject: [PATCH] Allow the context menu to take an `icon_color` (#23600) Doing this to enable customization in the Assistant 2 context picker. Release Notes: - N/A --- crates/ui/src/components/context_menu.rs | 42 +++++++++++++++++------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/crates/ui/src/components/context_menu.rs b/crates/ui/src/components/context_menu.rs index e4357a8ccd3558f57310a94bc70aa2924a79aa16..9516cc665a537a0c6766daa79a462cc3935c87cc 100644 --- a/crates/ui/src/components/context_menu.rs +++ b/crates/ui/src/components/context_menu.rs @@ -41,8 +41,9 @@ pub struct ContextMenuEntry { toggle: Option<(IconPosition, bool)>, label: SharedString, icon: Option, - icon_size: IconSize, icon_position: IconPosition, + icon_size: IconSize, + icon_color: Option, handler: Rc, &mut WindowContext)>, action: Option>, disabled: bool, @@ -54,8 +55,9 @@ impl ContextMenuEntry { toggle: None, label: label.into(), icon: None, - icon_size: IconSize::Small, icon_position: IconPosition::Start, + icon_size: IconSize::Small, + icon_color: None, handler: Rc::new(|_, _| {}), action: None, disabled: false, @@ -77,6 +79,11 @@ impl ContextMenuEntry { self } + pub fn icon_color(mut self, icon_color: Color) -> Self { + self.icon_color = Some(icon_color); + self + } + pub fn toggle(mut self, toggle_position: IconPosition, toggled: bool) -> Self { self.toggle = Some((toggle_position, toggled)); self @@ -188,8 +195,9 @@ impl ContextMenu { label: label.into(), handler: Rc::new(move |_, cx| handler(cx)), icon: None, - icon_size: IconSize::Small, icon_position: IconPosition::End, + icon_size: IconSize::Small, + icon_color: None, action, disabled: false, })); @@ -209,8 +217,9 @@ impl ContextMenu { label: label.into(), handler: Rc::new(move |_, cx| handler(cx)), icon: None, - icon_size: IconSize::Small, icon_position: position, + icon_size: IconSize::Small, + icon_color: None, action, disabled: false, })); @@ -262,6 +271,7 @@ impl ContextMenu { icon: None, icon_position: IconPosition::End, icon_size: IconSize::Small, + icon_color: None, disabled: false, })); self @@ -286,6 +296,7 @@ impl ContextMenu { icon: None, icon_size: IconSize::Small, icon_position: IconPosition::End, + icon_color: None, disabled: true, })); self @@ -301,6 +312,7 @@ impl ContextMenu { icon: Some(IconName::ArrowUpRight), icon_size: IconSize::XSmall, icon_position: IconPosition::End, + icon_color: None, disabled: false, })); self @@ -508,39 +520,47 @@ impl Render for ContextMenu { label, handler, icon, - icon_size, icon_position, + icon_size, + icon_color, action, disabled, }) => { let handler = handler.clone(); let menu = cx.view().downgrade(); - let color = if *disabled { + let icon_color = if *disabled { + Color::Muted + } else { + icon_color.unwrap_or(Color::Default) + }; + let label_color = if *disabled { Color::Muted } else { Color::Default }; let label_element = if let Some(icon_name) = icon { h_flex() - .gap_1() + .gap_2() .when(*icon_position == IconPosition::Start, |flex| { flex.child( Icon::new(*icon_name) .size(*icon_size) - .color(color), + .color(icon_color), ) }) - .child(Label::new(label.clone()).color(color)) + .child(Label::new(label.clone()).color(label_color)) .when(*icon_position == IconPosition::End, |flex| { flex.child( Icon::new(*icon_name) .size(*icon_size) - .color(color), + .color(icon_color), ) }) .into_any_element() } else { - Label::new(label.clone()).color(color).into_any_element() + Label::new(label.clone()) + .color(label_color) + .into_any_element() }; ListItem::new(ix)