diff options
author | 2022-06-07 03:26:48 +0200 | |
---|---|---|
committer | 2022-06-07 03:26:48 +0200 | |
commit | de21a651c0616307bb6bfd36da1a06119e629b10 (patch) | |
tree | f565bfa3e75d57f6a4be1369d25dfd701b51c4ea /pure | |
parent | ce53d3933c860cd958636cce415ac97c04aee746 (diff) | |
download | iced-de21a651c0616307bb6bfd36da1a06119e629b10.tar.gz iced-de21a651c0616307bb6bfd36da1a06119e629b10.tar.bz2 iced-de21a651c0616307bb6bfd36da1a06119e629b10.zip |
Implement theme styling for `Scrollable`
Diffstat (limited to 'pure')
-rw-r--r-- | pure/src/helpers.rs | 1 | ||||
-rw-r--r-- | pure/src/widget/pick_list.rs | 5 | ||||
-rw-r--r-- | pure/src/widget/scrollable.rs | 29 |
3 files changed, 24 insertions, 11 deletions
diff --git a/pure/src/helpers.rs b/pure/src/helpers.rs index 1d020b3c..810b3885 100644 --- a/pure/src/helpers.rs +++ b/pure/src/helpers.rs @@ -41,6 +41,7 @@ pub fn scrollable<'a, Message, Renderer>( ) -> widget::Scrollable<'a, Message, Renderer> where Renderer: iced_native::Renderer, + Renderer::Theme: widget::scrollable::StyleSheet, { widget::Scrollable::new(content) } diff --git a/pure/src/widget/pick_list.rs b/pure/src/widget/pick_list.rs index 78302a7d..8fadd785 100644 --- a/pure/src/widget/pick_list.rs +++ b/pure/src/widget/pick_list.rs @@ -1,4 +1,5 @@ //! Display a dropdown list of selectable values. +use crate::widget::scrollable; use crate::widget::tree::{self, Tree}; use crate::{Element, Widget}; @@ -110,6 +111,7 @@ where [T]: ToOwned<Owned = Vec<T>>, Message: 'a, Renderer: text::Renderer + 'a, + Renderer::Theme: scrollable::StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::<pick_list::State<T>>() @@ -225,8 +227,9 @@ impl<'a, T: 'a, Message, Renderer> Into<Element<'a, Message, Renderer>> where T: Clone + ToString + Eq + 'static, [T]: ToOwned<Owned = Vec<T>>, - Renderer: text::Renderer + 'a, Message: 'a, + Renderer: text::Renderer + 'a, + Renderer::Theme: scrollable::StyleSheet, { fn into(self) -> Element<'a, Message, Renderer> { Element::new(self) diff --git a/pure/src/widget/scrollable.rs b/pure/src/widget/scrollable.rs index a0180dc0..4e24915b 100644 --- a/pure/src/widget/scrollable.rs +++ b/pure/src/widget/scrollable.rs @@ -15,18 +15,24 @@ pub use iced_style::scrollable::{Scrollbar, Scroller, StyleSheet}; /// A widget that can vertically display an infinite amount of content with a /// scrollbar. #[allow(missing_debug_implementations)] -pub struct Scrollable<'a, Message, Renderer> { +pub struct Scrollable<'a, Message, Renderer> +where + Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, +{ height: Length, scrollbar_width: u16, scrollbar_margin: u16, scroller_width: u16, - on_scroll: Option<Box<dyn Fn(f32) -> Message + 'a>>, - style_sheet: Box<dyn StyleSheet + 'a>, content: Element<'a, Message, Renderer>, + on_scroll: Option<Box<dyn Fn(f32) -> Message + 'a>>, + style: <Renderer::Theme as StyleSheet>::Style, } -impl<'a, Message, Renderer: iced_native::Renderer> - Scrollable<'a, Message, Renderer> +impl<'a, Message, Renderer> Scrollable<'a, Message, Renderer> +where + Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, { /// Creates a new [`Scrollable`]. pub fn new(content: impl Into<Element<'a, Message, Renderer>>) -> Self { @@ -35,9 +41,9 @@ impl<'a, Message, Renderer: iced_native::Renderer> scrollbar_width: 10, scrollbar_margin: 0, scroller_width: 10, - on_scroll: None, - style_sheet: Default::default(), content: content.into(), + on_scroll: None, + style: Default::default(), } } @@ -80,9 +86,9 @@ impl<'a, Message, Renderer: iced_native::Renderer> /// Sets the style of the [`Scrollable`] . 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 } } @@ -91,6 +97,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> for Scrollable<'a, Message, Renderer> where Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::<scrollable::State>() @@ -180,12 +187,13 @@ where scrollable::draw( tree.state.downcast_ref::<scrollable::State>(), renderer, + theme, layout, cursor_position, self.scrollbar_width, self.scrollbar_margin, self.scroller_width, - self.style_sheet.as_ref(), + self.style, |renderer, layout, cursor_position, viewport| { self.content.as_widget().draw( &tree.children[0], @@ -259,6 +267,7 @@ impl<'a, Message, Renderer> From<Scrollable<'a, Message, Renderer>> where Message: 'a + Clone, Renderer: 'a + iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn from( text_input: Scrollable<'a, Message, Renderer>, |