diff options
author | 2022-06-07 04:51:44 +0200 | |
---|---|---|
committer | 2022-06-07 04:51:44 +0200 | |
commit | 396735b682433928f52ba777891e14f2fbc703c7 (patch) | |
tree | bd275980a2fe6bc2efa7288f08db007dcaa7b6a4 /pure | |
parent | 97555e67af8b4bcc77df69c5e72156e14948150e (diff) | |
download | iced-396735b682433928f52ba777891e14f2fbc703c7.tar.gz iced-396735b682433928f52ba777891e14f2fbc703c7.tar.bz2 iced-396735b682433928f52ba777891e14f2fbc703c7.zip |
Implement theme styling for `PickList` and `Menu`
Diffstat (limited to 'pure')
-rw-r--r-- | pure/src/helpers.rs | 1 | ||||
-rw-r--r-- | pure/src/widget/pick_list.rs | 32 |
2 files changed, 18 insertions, 15 deletions
diff --git a/pure/src/helpers.rs b/pure/src/helpers.rs index 216dab53..18791945 100644 --- a/pure/src/helpers.rs +++ b/pure/src/helpers.rs @@ -179,6 +179,7 @@ where T: ToString + Eq + 'static, [T]: ToOwned<Owned = Vec<T>>, Renderer: iced_native::text::Renderer, + Renderer::Theme: widget::pick_list::StyleSheet, { widget::PickList::new(options, selected, on_selected) } diff --git a/pure/src/widget/pick_list.rs b/pure/src/widget/pick_list.rs index 7c8a3be6..2c465932 100644 --- a/pure/src/widget/pick_list.rs +++ b/pure/src/widget/pick_list.rs @@ -1,6 +1,4 @@ //! Display a dropdown list of selectable values. -use crate::widget::container; -use crate::widget::scrollable; use crate::widget::tree::{self, Tree}; use crate::{Element, Widget}; @@ -17,13 +15,15 @@ use iced_native::{ use std::borrow::Cow; -pub use iced_style::pick_list::{Style, StyleSheet}; +pub use iced_style::pick_list::{Appearance, StyleSheet}; /// A widget for selecting a single value from a list of options. #[allow(missing_debug_implementations)] -pub struct PickList<'a, T, Message, Renderer: text::Renderer> +pub struct PickList<'a, T, Message, Renderer> where [T]: ToOwned<Owned = Vec<T>>, + Renderer: text::Renderer, + Renderer::Theme: StyleSheet, { on_selected: Box<dyn Fn(T) -> Message + 'a>, options: Cow<'a, [T]>, @@ -33,14 +33,15 @@ where padding: Padding, text_size: Option<u16>, font: Renderer::Font, - style_sheet: Box<dyn StyleSheet + 'a>, + style: <Renderer::Theme as StyleSheet>::Style, } -impl<'a, T: 'a, Message, Renderer: text::Renderer> - PickList<'a, T, Message, Renderer> +impl<'a, T: 'a, Message, Renderer> PickList<'a, T, Message, Renderer> where T: ToString + Eq, [T]: ToOwned<Owned = Vec<T>>, + Renderer: text::Renderer, + Renderer::Theme: StyleSheet, { /// The default padding of a [`PickList`]. pub const DEFAULT_PADDING: Padding = Padding::new(5); @@ -61,7 +62,7 @@ where text_size: None, padding: Self::DEFAULT_PADDING, font: Default::default(), - style_sheet: Default::default(), + style: Default::default(), } } @@ -98,9 +99,9 @@ where /// Sets the style of the [`PickList`]. pub fn style( mut self, - style_sheet: impl Into<Box<dyn StyleSheet + 'a>>, + style: impl Into<<Renderer::Theme as StyleSheet>::Style>, ) -> Self { - self.style_sheet = style_sheet.into(); + self.style = style.into(); self } } @@ -112,7 +113,7 @@ where [T]: ToOwned<Owned = Vec<T>>, Message: 'a, Renderer: text::Renderer + 'a, - Renderer::Theme: container::StyleSheet + scrollable::StyleSheet, + Renderer::Theme: StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::<pick_list::State<T>>() @@ -184,7 +185,7 @@ where &self, _tree: &Tree, renderer: &mut Renderer, - _theme: &Renderer::Theme, + theme: &Renderer::Theme, _style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, @@ -192,6 +193,7 @@ where ) { pick_list::draw( renderer, + theme, layout, cursor_position, self.padding, @@ -199,7 +201,7 @@ where &self.font, self.placeholder.as_ref().map(String::as_str), self.selected.as_ref(), - self.style_sheet.as_ref(), + self.style, ) } @@ -218,7 +220,7 @@ where self.text_size, self.font.clone(), &self.options, - self.style_sheet.as_ref(), + self.style, ) } } @@ -230,7 +232,7 @@ where [T]: ToOwned<Owned = Vec<T>>, Message: 'a, Renderer: text::Renderer + 'a, - Renderer::Theme: container::StyleSheet + scrollable::StyleSheet, + Renderer::Theme: StyleSheet, { fn into(self) -> Element<'a, Message, Renderer> { Element::new(self) |