From c275fde67a7f5d1d5789540dc7905250a2f01fe7 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 1 Jun 2022 01:56:46 +0200 Subject: Implement theme styling for `Rule` --- native/src/widget/rule.rs | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) (limited to 'native/src/widget/rule.rs') diff --git a/native/src/widget/rule.rs b/native/src/widget/rule.rs index fc3b0202..26285df4 100644 --- a/native/src/widget/rule.rs +++ b/native/src/widget/rule.rs @@ -3,25 +3,33 @@ use crate::layout; use crate::renderer; use crate::{Color, Element, Layout, Length, Point, Rectangle, Size, Widget}; -pub use iced_style::rule::{FillMode, Style, StyleSheet}; +pub use iced_style::rule::{Appearance, FillMode, StyleSheet}; /// Display a horizontal or vertical rule for dividing content. #[allow(missing_debug_implementations)] -pub struct Rule<'a> { +pub struct Rule +where + Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, +{ width: Length, height: Length, is_horizontal: bool, - style_sheet: Box, + style: ::Style, } -impl<'a> Rule<'a> { +impl Rule +where + Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, +{ /// Creates a horizontal [`Rule`] with the given height. pub fn horizontal(height: u16) -> Self { Rule { width: Length::Fill, height: Length::Units(height), is_horizontal: true, - style_sheet: Default::default(), + style: Default::default(), } } @@ -31,23 +39,24 @@ impl<'a> Rule<'a> { width: Length::from(Length::Units(width)), height: Length::Fill, is_horizontal: false, - style_sheet: Default::default(), + style: Default::default(), } } /// Sets the style of the [`Rule`]. 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 } } -impl<'a, Message, Renderer> Widget for Rule<'a> +impl Widget for Rule where Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, { fn width(&self) -> Length { self.width @@ -77,7 +86,7 @@ where _viewport: &Rectangle, ) { let bounds = layout.bounds(); - let style = self.style_sheet.style(); + let style = theme.style(self.style); let bounds = if self.is_horizontal { let line_y = (bounds.y + (bounds.height / 2.0) @@ -121,12 +130,14 @@ where } } -impl<'a, Message, Renderer> From> for Element<'a, Message, Renderer> +impl<'a, Message, Renderer> From> + for Element<'a, Message, Renderer> where - Renderer: 'a + crate::Renderer, Message: 'a, + Renderer: 'a + crate::Renderer, + Renderer::Theme: StyleSheet, { - fn from(rule: Rule<'a>) -> Element<'a, Message, Renderer> { + fn from(rule: Rule) -> Element<'a, Message, Renderer> { Element::new(rule) } } -- cgit