summaryrefslogtreecommitdiffstats
path: root/native/src/widget/combo_box.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-06-11 20:41:11 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-07-08 11:19:56 +0200
commit61f22b1db23f3495145a9a4f7255311fe8381998 (patch)
tree925db905f29c3df13cf6e7480672d2a294ce10c7 /native/src/widget/combo_box.rs
parent0ff5a02550e5d5de8fb5fd0643ea424d9e508888 (diff)
downloadiced-61f22b1db23f3495145a9a4f7255311fe8381998.tar.gz
iced-61f22b1db23f3495145a9a4f7255311fe8381998.tar.bz2
iced-61f22b1db23f3495145a9a4f7255311fe8381998.zip
Add styling support for `ComboBox` and `Menu`
Diffstat (limited to 'native/src/widget/combo_box.rs')
-rw-r--r--native/src/widget/combo_box.rs33
1 files changed, 28 insertions, 5 deletions
diff --git a/native/src/widget/combo_box.rs b/native/src/widget/combo_box.rs
index 2adee884..df2a530a 100644
--- a/native/src/widget/combo_box.rs
+++ b/native/src/widget/combo_box.rs
@@ -6,7 +6,7 @@ use crate::{
};
use std::borrow::Cow;
-pub struct ComboBox<'a, T, Message>
+pub struct ComboBox<'a, T, Message, Renderer: self::Renderer>
where
[T]: ToOwned<Owned = Vec<T>>,
{
@@ -16,6 +16,7 @@ where
width: Length,
padding: u16,
text_size: Option<u16>,
+ style: <Renderer as self::Renderer>::Style,
}
#[derive(Default)]
@@ -28,7 +29,8 @@ pub struct Internal<'a, T, Message> {
on_selected: Box<dyn Fn(T) -> Message>,
}
-impl<'a, T: 'a, Message> ComboBox<'a, T, Message>
+impl<'a, T: 'a, Message, Renderer: self::Renderer>
+ ComboBox<'a, T, Message, Renderer>
where
T: ToString,
[T]: ToOwned<Owned = Vec<T>>,
@@ -48,7 +50,8 @@ where
selected,
width: Length::Shrink,
text_size: None,
- padding: 5,
+ padding: Renderer::DEFAULT_PADDING,
+ style: <Renderer as self::Renderer>::Style::default(),
}
}
@@ -72,10 +75,21 @@ where
self.text_size = Some(size);
self
}
+
+ /// Sets the style of the [`ComboBox`].
+ ///
+ /// [`ComboBox`]: struct.ComboBox.html
+ pub fn style(
+ mut self,
+ style: impl Into<<Renderer as self::Renderer>::Style>,
+ ) -> Self {
+ self.style = style.into();
+ self
+ }
}
impl<'a, T: 'a, Message, Renderer> Widget<'a, Message, Renderer>
- for ComboBox<'a, T, Message>
+ for ComboBox<'a, T, Message, Renderer>
where
T: Clone + ToString + Eq,
[T]: ToOwned<Owned = Vec<T>>,
@@ -196,6 +210,7 @@ where
self.selected.as_ref().map(ToString::to_string),
self.text_size.unwrap_or(renderer.default_size()),
self.padding,
+ &self.style,
)
}
@@ -223,6 +238,7 @@ where
bounds.height,
self.text_size.unwrap_or(20),
self.padding,
+ Renderer::menu_style(&self.style),
)),
))
} else {
@@ -235,8 +251,14 @@ where
}
pub trait Renderer: text::Renderer + menu::Renderer {
+ type Style: Default;
+
const DEFAULT_PADDING: u16;
+ fn menu_style(
+ style: &<Self as Renderer>::Style,
+ ) -> <Self as menu::Renderer>::Style;
+
fn draw(
&mut self,
bounds: Rectangle,
@@ -244,11 +266,12 @@ pub trait Renderer: text::Renderer + menu::Renderer {
selected: Option<String>,
text_size: u16,
padding: u16,
+ style: &<Self as Renderer>::Style,
) -> Self::Output;
}
impl<'a, T: 'a, Message, Renderer> Into<Element<'a, Message, Renderer>>
- for ComboBox<'a, T, Message>
+ for ComboBox<'a, T, Message, Renderer>
where
T: Clone + ToString + Eq,
[T]: ToOwned<Owned = Vec<T>>,