diff options
Diffstat (limited to 'native/src/widget/rule.rs')
-rw-r--r-- | native/src/widget/rule.rs | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/native/src/widget/rule.rs b/native/src/widget/rule.rs index b0cc3768..56f8c80d 100644 --- a/native/src/widget/rule.rs +++ b/native/src/widget/rule.rs @@ -1,53 +1,63 @@ //! Display a horizontal or vertical rule for dividing content. use crate::layout; use crate::renderer; +use crate::widget::Tree; 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<Renderer> +where + Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, +{ width: Length, height: Length, is_horizontal: bool, - style_sheet: Box<dyn StyleSheet + 'a>, + style: <Renderer::Theme as StyleSheet>::Style, } -impl<'a> Rule<'a> { - /// Creates a horizontal [`Rule`] for dividing content by the given vertical spacing. - pub fn horizontal(spacing: u16) -> Self { +impl<Renderer> Rule<Renderer> +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::from(Length::Units(spacing)), + height: Length::Units(height), is_horizontal: true, - style_sheet: Default::default(), + style: Default::default(), } } - /// Creates a vertical [`Rule`] for dividing content by the given horizontal spacing. - pub fn vertical(spacing: u16) -> Self { + /// Creates a vertical [`Rule`] with the given width. + pub fn vertical(width: u16) -> Self { Rule { - width: Length::from(Length::Units(spacing)), + width: 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<Box<dyn StyleSheet + 'a>>, + style: impl Into<<Renderer::Theme as StyleSheet>::Style>, ) -> Self { - self.style_sheet = style_sheet.into(); + self.style = style.into(); self } } -impl<'a, Message, Renderer> Widget<Message, Renderer> for Rule<'a> +impl<Message, Renderer> Widget<Message, Renderer> for Rule<Renderer> where Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, { fn width(&self) -> Length { self.width @@ -69,14 +79,16 @@ where fn draw( &self, + _state: &Tree, renderer: &mut Renderer, + theme: &Renderer::Theme, _style: &renderer::Style, layout: Layout<'_>, _cursor_position: Point, _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) @@ -120,12 +132,14 @@ where } } -impl<'a, Message, Renderer> From<Rule<'a>> for Element<'a, Message, Renderer> +impl<'a, Message, Renderer> From<Rule<Renderer>> + 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<Renderer>) -> Element<'a, Message, Renderer> { Element::new(rule) } } |