summaryrefslogtreecommitdiffstats
path: root/widget/src/combo_box.rs
diff options
context:
space:
mode:
Diffstat (limited to 'widget/src/combo_box.rs')
-rw-r--r--widget/src/combo_box.rs57
1 files changed, 32 insertions, 25 deletions
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<T>,
- text_input: TextInput<'a, TextInputEvent, Renderer>,
+ text_input: TextInput<'a, TextInputEvent, Theme, Renderer>,
font: Option<Renderer::Font>,
selection: text_input::Value,
on_selected: Box<dyn Fn(T) -> Message>,
on_option_hovered: Option<Box<dyn Fn(T) -> Message>>,
on_close: Option<Message>,
on_input: Option<Box<dyn Fn(String) -> Message>>,
- menu_style: <Renderer::Theme as menu::StyleSheet>::Style,
+ menu_style: <Theme as menu::StyleSheet>::Style,
padding: Padding,
size: Option<f32>,
}
-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<S>(mut self, style: S) -> Self
where
- S: Into<<Renderer::Theme as text_input::StyleSheet>::Style>
- + Into<<Renderer::Theme as menu::StyleSheet>::Style>
+ S: Into<<Theme as text_input::StyleSheet>::Style>
+ + Into<<Theme as menu::StyleSheet>::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<S>(mut self, style: S) -> Self
where
- S: Into<<Renderer::Theme as text_input::StyleSheet>::Style> + Clone,
+ S: Into<<Theme as text_input::StyleSheet>::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<Message, Renderer>
- for ComboBox<'a, T, Message, Renderer>
+impl<'a, T, Message, Theme, Renderer> Widget<Message, Theme, Renderer>
+ 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<Length> {
- Widget::<TextInputEvent, Renderer>::size(&self.text_input)
+ Widget::<TextInputEvent, Theme, Renderer>::size(&self.text_input)
}
fn layout(
@@ -340,7 +345,7 @@ where
}
fn children(&self) -> Vec<widget::Tree> {
- 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<overlay::Element<'b, Message, Renderer>> {
+ ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
let is_focused = {
let text_input_state = tree.children[0]
.state
@@ -707,18 +712,20 @@ where
}
}
-impl<'a, T, Message, Renderer> From<ComboBox<'a, T, Message, Renderer>>
- for Element<'a, Message, Renderer>
+impl<'a, T, Message, Theme, Renderer>
+ From<ComboBox<'a, T, Message, Theme, Renderer>>
+ 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)
}
}