From 7a50e9e8fbb8d37e53a42c1dd5936b97463ead53 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 21 Jan 2024 17:56:01 +0100 Subject: Convert `Renderer::Theme` to generic `Widget` type --- widget/src/combo_box.rs | 57 +++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 25 deletions(-) (limited to 'widget/src/combo_box.rs') diff --git a/widget/src/combo_box.rs b/widget/src/combo_box.rs index 73beeac3..0103e9cd 100644 --- a/widget/src/combo_box.rs +++ b/widget/src/combo_box.rs @@ -25,29 +25,34 @@ use std::fmt::Display; /// to search for corresponding values from the list of options that are displayed /// as a Menu. #[allow(missing_debug_implementations)] -pub struct ComboBox<'a, T, Message, Renderer = crate::Renderer> -where +pub struct ComboBox< + 'a, + T, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where + Theme: text_input::StyleSheet + menu::StyleSheet, Renderer: text::Renderer, - Renderer::Theme: text_input::StyleSheet + menu::StyleSheet, { state: &'a State, - text_input: TextInput<'a, TextInputEvent, Renderer>, + text_input: TextInput<'a, TextInputEvent, Theme, Renderer>, font: Option, selection: text_input::Value, on_selected: Box Message>, on_option_hovered: Option Message>>, on_close: Option, on_input: Option Message>>, - menu_style: ::Style, + menu_style: ::Style, padding: Padding, size: Option, } -impl<'a, T, Message, Renderer> ComboBox<'a, T, Message, Renderer> +impl<'a, T, Message, Theme, Renderer> ComboBox<'a, T, Message, Theme, Renderer> where T: std::fmt::Display + Clone, + Theme: text_input::StyleSheet + menu::StyleSheet, Renderer: text::Renderer, - Renderer::Theme: text_input::StyleSheet + menu::StyleSheet, { /// Creates a new [`ComboBox`] with the given list of options, a placeholder, /// the current selected value, and the message to produce when an option is @@ -116,8 +121,8 @@ where // TODO: Define its own `StyleSheet` trait pub fn style(mut self, style: S) -> Self where - S: Into<::Style> - + Into<::Style> + S: Into<::Style> + + Into<::Style> + Clone, { self.menu_style = style.clone().into(); @@ -128,7 +133,7 @@ where /// Sets the style of the [`TextInput`] of the [`ComboBox`]. pub fn text_input_style(mut self, style: S) -> Self where - S: Into<::Style> + Clone, + S: Into<::Style> + Clone, { self.text_input = self.text_input.style(style); self @@ -289,19 +294,19 @@ enum TextInputEvent { TextChanged(String), } -impl<'a, T, Message, Renderer> Widget - for ComboBox<'a, T, Message, Renderer> +impl<'a, T, Message, Theme, Renderer> Widget + for ComboBox<'a, T, Message, Theme, Renderer> where T: Display + Clone + 'static, Message: Clone, - Renderer: text::Renderer, - Renderer::Theme: container::StyleSheet + Theme: container::StyleSheet + text_input::StyleSheet + scrollable::StyleSheet + menu::StyleSheet, + Renderer: text::Renderer, { fn size(&self) -> Size { - Widget::::size(&self.text_input) + Widget::::size(&self.text_input) } fn layout( @@ -340,7 +345,7 @@ where } fn children(&self) -> Vec { - vec![widget::Tree::new(&self.text_input as &dyn Widget<_, _>)] + vec![widget::Tree::new(&self.text_input as &dyn Widget<_, _, _>)] } fn on_event( @@ -616,7 +621,7 @@ where &self, tree: &widget::Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, _style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, @@ -652,7 +657,7 @@ where tree: &'b mut widget::Tree, layout: Layout<'_>, _renderer: &Renderer, - ) -> Option> { + ) -> Option> { let is_focused = { let text_input_state = tree.children[0] .state @@ -707,18 +712,20 @@ where } } -impl<'a, T, Message, Renderer> From> - for Element<'a, Message, Renderer> +impl<'a, T, Message, Theme, Renderer> + From> + for Element<'a, Message, Theme, Renderer> where T: Display + Clone + 'static, - Message: 'a + Clone, - Renderer: text::Renderer + 'a, - Renderer::Theme: container::StyleSheet + Message: Clone + 'a, + Theme: container::StyleSheet + text_input::StyleSheet + scrollable::StyleSheet - + menu::StyleSheet, + + menu::StyleSheet + + 'a, + Renderer: text::Renderer + 'a, { - fn from(combo_box: ComboBox<'a, T, Message, Renderer>) -> Self { + fn from(combo_box: ComboBox<'a, T, Message, Theme, Renderer>) -> Self { Self::new(combo_box) } } -- cgit