diff options
author | 2022-06-07 04:11:24 +0200 | |
---|---|---|
committer | 2022-06-07 04:11:24 +0200 | |
commit | 97555e67af8b4bcc77df69c5e72156e14948150e (patch) | |
tree | 6af3db6e439fdcb40f94ac9b1db96296fb66e86e /pure/src/widget/container.rs | |
parent | 2933ac7355d5c14aa4f04a64a67197cd97e7608c (diff) | |
download | iced-97555e67af8b4bcc77df69c5e72156e14948150e.tar.gz iced-97555e67af8b4bcc77df69c5e72156e14948150e.tar.bz2 iced-97555e67af8b4bcc77df69c5e72156e14948150e.zip |
Implement theme styling for `Container`
Diffstat (limited to 'pure/src/widget/container.rs')
-rw-r--r-- | pure/src/widget/container.rs | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/pure/src/widget/container.rs b/pure/src/widget/container.rs index 0ec2351a..8ea9ca72 100644 --- a/pure/src/widget/container.rs +++ b/pure/src/widget/container.rs @@ -15,13 +15,17 @@ use iced_native::{ use std::u32; -pub use iced_style::container::{Style, StyleSheet}; +pub use iced_style::container::{Appearance, StyleSheet}; /// An element decorating some content. /// /// It is normally used for alignment purposes. #[allow(missing_debug_implementations)] -pub struct Container<'a, Message, Renderer> { +pub struct Container<'a, Message, Renderer> +where + Renderer: iced_native::Renderer, + Renderer::Theme: container::StyleSheet, +{ padding: Padding, width: Length, height: Length, @@ -29,13 +33,14 @@ pub struct Container<'a, Message, Renderer> { max_height: u32, horizontal_alignment: alignment::Horizontal, vertical_alignment: alignment::Vertical, - style_sheet: Box<dyn StyleSheet + 'a>, + style: <Renderer::Theme as StyleSheet>::Style, content: Element<'a, Message, Renderer>, } impl<'a, Message, Renderer> Container<'a, Message, Renderer> where Renderer: iced_native::Renderer, + Renderer::Theme: container::StyleSheet, { /// Creates an empty [`Container`]. pub fn new<T>(content: T) -> Self @@ -50,7 +55,7 @@ where max_height: u32::MAX, horizontal_alignment: alignment::Horizontal::Left, vertical_alignment: alignment::Vertical::Top, - style_sheet: Default::default(), + style: Default::default(), content: content.into(), } } @@ -112,9 +117,9 @@ where /// Sets the style of the [`Container`]. 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 } } @@ -123,6 +128,7 @@ impl<'a, Message, Renderer> Widget<Message, Renderer> for Container<'a, Message, Renderer> where Renderer: iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn children(&self) -> Vec<Tree> { vec![Tree::new(&self.content)] @@ -207,7 +213,7 @@ where cursor_position: Point, viewport: &Rectangle, ) { - let style = self.style_sheet.style(); + let style = theme.appearance(self.style); container::draw_background(renderer, &style, layout.bounds()); @@ -243,8 +249,9 @@ where impl<'a, Message, Renderer> From<Container<'a, Message, Renderer>> for Element<'a, Message, Renderer> where - Renderer: 'a + iced_native::Renderer, Message: 'a, + Renderer: 'a + iced_native::Renderer, + Renderer::Theme: StyleSheet, { fn from( column: Container<'a, Message, Renderer>, |