From 7a50e9e8fbb8d37e53a42c1dd5936b97463ead53 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 21 Jan 2024 17:56:01 +0100 Subject: Convert `Renderer::Theme` to generic `Widget` type --- widget/src/pane_grid.rs | 54 ++++++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 25 deletions(-) (limited to 'widget/src/pane_grid.rs') diff --git a/widget/src/pane_grid.rs b/widget/src/pane_grid.rs index 3fda0e32..c20d959a 100644 --- a/widget/src/pane_grid.rs +++ b/widget/src/pane_grid.rs @@ -71,7 +71,7 @@ use crate::core::{ /// # use iced_widget::{pane_grid, text}; /// # /// # type PaneGrid<'a, Message> = -/// # iced_widget::PaneGrid<'a, Message, iced_widget::renderer::Renderer>; +/// # iced_widget::PaneGrid<'a, Message, iced_widget::style::Theme, iced_widget::renderer::Renderer>; /// # /// enum PaneState { /// SomePane, @@ -96,25 +96,29 @@ use crate::core::{ /// .on_resize(10, Message::PaneResized); /// ``` #[allow(missing_debug_implementations)] -pub struct PaneGrid<'a, Message, Renderer = crate::Renderer> -where +pub struct PaneGrid< + 'a, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where + Theme: StyleSheet + container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet + container::StyleSheet, { - contents: Contents<'a, Content<'a, Message, Renderer>>, + contents: Contents<'a, Content<'a, Message, Theme, Renderer>>, width: Length, height: Length, spacing: f32, on_click: Option Message + 'a>>, on_drag: Option Message + 'a>>, on_resize: Option<(f32, Box Message + 'a>)>, - style: ::Style, + style: ::Style, } -impl<'a, Message, Renderer> PaneGrid<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> PaneGrid<'a, Message, Theme, Renderer> where + Theme: StyleSheet + container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet + container::StyleSheet, { /// Creates a [`PaneGrid`] with the given [`State`] and view function. /// @@ -122,7 +126,7 @@ where /// [`State`]. [`bool`] is set if the pane is maximized. pub fn new( state: &'a State, - view: impl Fn(Pane, &'a T, bool) -> Content<'a, Message, Renderer>, + view: impl Fn(Pane, &'a T, bool) -> Content<'a, Message, Theme, Renderer>, ) -> Self { let contents = if let Some((pane, pane_state)) = state.maximized.and_then(|pane| { @@ -216,7 +220,7 @@ where /// Sets the style of the [`PaneGrid`]. pub fn style( mut self, - style: impl Into<::Style>, + style: impl Into<::Style>, ) -> Self { self.style = style.into(); self @@ -229,11 +233,11 @@ where } } -impl<'a, Message, Renderer> Widget - for PaneGrid<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Widget + for PaneGrid<'a, Message, Theme, Renderer> where Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet + container::StyleSheet, + Theme: StyleSheet + container::StyleSheet, { fn tag(&self) -> tree::Tag { tree::Tag::of::() @@ -408,7 +412,7 @@ where &self, tree: &Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, @@ -443,7 +447,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, - ) -> Option> { + ) -> Option> { let children = self .contents .iter_mut() @@ -458,16 +462,16 @@ where } } -impl<'a, Message, Renderer> From> - for Element<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> From> + for Element<'a, Message, Theme, Renderer> where Message: 'a, - Renderer: 'a + crate::core::Renderer, - Renderer::Theme: StyleSheet + container::StyleSheet, + Theme: StyleSheet + container::StyleSheet + 'a, + Renderer: crate::core::Renderer + 'a, { fn from( - pane_grid: PaneGrid<'a, Message, Renderer>, - ) -> Element<'a, Message, Renderer> { + pane_grid: PaneGrid<'a, Message, Theme, Renderer>, + ) -> Element<'a, Message, Theme, Renderer> { Element::new(pane_grid) } } @@ -811,18 +815,18 @@ pub fn mouse_interaction( } /// Draws a [`PaneGrid`]. -pub fn draw( +pub fn draw( action: &state::Action, node: &Node, layout: Layout<'_>, cursor: mouse::Cursor, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, default_style: &renderer::Style, viewport: &Rectangle, spacing: f32, resize_leeway: Option, - style: &::Style, + style: &Theme::Style, contents: impl Iterator, draw_pane: impl Fn( T, @@ -833,8 +837,8 @@ pub fn draw( &Rectangle, ), ) where + Theme: StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet, { let picked_pane = action.picked_pane(); -- cgit