diff options
author | 2020-06-11 20:41:11 +0200 | |
---|---|---|
committer | 2020-07-08 11:19:56 +0200 | |
commit | 61f22b1db23f3495145a9a4f7255311fe8381998 (patch) | |
tree | 925db905f29c3df13cf6e7480672d2a294ce10c7 /native/src/overlay/menu.rs | |
parent | 0ff5a02550e5d5de8fb5fd0643ea424d9e508888 (diff) | |
download | iced-61f22b1db23f3495145a9a4f7255311fe8381998.tar.gz iced-61f22b1db23f3495145a9a4f7255311fe8381998.tar.bz2 iced-61f22b1db23f3495145a9a4f7255311fe8381998.zip |
Add styling support for `ComboBox` and `Menu`
Diffstat (limited to 'native/src/overlay/menu.rs')
-rw-r--r-- | native/src/overlay/menu.rs | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/native/src/overlay/menu.rs b/native/src/overlay/menu.rs index 05c41181..9c180671 100644 --- a/native/src/overlay/menu.rs +++ b/native/src/overlay/menu.rs @@ -10,6 +10,7 @@ pub struct Menu<'a, Message, Renderer: self::Renderer> { is_open: &'a mut bool, width: u16, target_height: f32, + style: <Renderer as self::Renderer>::Style, } #[derive(Default)] @@ -43,6 +44,7 @@ where target_height: f32, text_size: u16, padding: u16, + style: <Renderer as self::Renderer>::Style, ) -> Self where T: Clone + ToString, @@ -55,6 +57,7 @@ where on_selected, text_size, padding, + style.clone(), )), ) .padding(1); @@ -64,6 +67,7 @@ where is_open: &mut state.is_open, width, target_height, + style, } } } @@ -156,11 +160,16 @@ where self.container .draw(renderer, defaults, layout, cursor_position); - renderer.decorate(layout.bounds(), cursor_position, primitives) + renderer.decorate( + layout.bounds(), + cursor_position, + &self.style, + primitives, + ) } } -struct List<'a, T, Message> +struct List<'a, T, Message, Renderer: self::Renderer> where [T]: ToOwned, { @@ -169,9 +178,10 @@ where on_selected: Box<dyn Fn(T) -> Message>, text_size: u16, padding: u16, + style: <Renderer as self::Renderer>::Style, } -impl<'a, T, Message> List<'a, T, Message> +impl<'a, T, Message, Renderer: self::Renderer> List<'a, T, Message, Renderer> where [T]: ToOwned, { @@ -181,6 +191,7 @@ where on_selected: Box<dyn Fn(T) -> Message>, text_size: u16, padding: u16, + style: <Renderer as self::Renderer>::Style, ) -> Self { List { hovered_option, @@ -188,12 +199,13 @@ where on_selected, text_size, padding, + style, } } } -impl<'a, T, Message, Renderer> Widget<'a, Message, Renderer> - for List<'a, T, Message> +impl<'a, T, Message, Renderer: self::Renderer> Widget<'a, Message, Renderer> + for List<'a, T, Message, Renderer> where T: ToString + Clone, [T]: ToOwned, @@ -286,15 +298,19 @@ where *self.hovered_option, self.text_size, self.padding, + &self.style, ) } } pub trait Renderer: scrollable::Renderer + container::Renderer { + type Style: Default + Clone; + fn decorate( &mut self, bounds: Rectangle, cursor_position: Point, + style: &<Self as Renderer>::Style, primitive: Self::Output, ) -> Self::Output; @@ -306,16 +322,17 @@ pub trait Renderer: scrollable::Renderer + container::Renderer { hovered_option: Option<usize>, text_size: u16, padding: u16, + style: &<Self as Renderer>::Style, ) -> Self::Output; } impl<'a, T, Message, Renderer> Into<Element<'a, Message, Renderer>> - for List<'a, T, Message> + for List<'a, T, Message, Renderer> where T: ToString + Clone, [T]: ToOwned, Message: 'static, - Renderer: self::Renderer, + Renderer: 'a + self::Renderer, { fn into(self) -> Element<'a, Message, Renderer> { Element::new(self) |