From de21a651c0616307bb6bfd36da1a06119e629b10 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 7 Jun 2022 03:26:48 +0200 Subject: Implement theme styling for `Scrollable` --- pure/src/helpers.rs | 1 + pure/src/widget/pick_list.rs | 5 ++++- pure/src/widget/scrollable.rs | 29 +++++++++++++++++++---------- 3 files changed, 24 insertions(+), 11 deletions(-) (limited to 'pure') 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>, Message: 'a, Renderer: text::Renderer + 'a, + Renderer::Theme: scrollable::StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::>() @@ -225,8 +227,9 @@ impl<'a, T: 'a, Message, Renderer> Into> where T: Clone + ToString + Eq + 'static, [T]: ToOwned>, - 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 Message + 'a>>, - style_sheet: Box, content: Element<'a, Message, Renderer>, + on_scroll: Option Message + 'a>>, + style: ::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>) -> 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>, + style: impl Into<::Style>, ) -> Self { - self.style_sheet = style_sheet.into(); + self.style = style.into(); self } } @@ -91,6 +97,7 @@ impl<'a, Message, Renderer> Widget for Scrollable<'a, Message, Renderer> where Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::() @@ -180,12 +187,13 @@ where scrollable::draw( tree.state.downcast_ref::(), 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> where Message: 'a + Clone, Renderer: 'a + iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn from( text_input: Scrollable<'a, Message, Renderer>, -- cgit