diff options
author | 2024-01-21 17:56:01 +0100 | |
---|---|---|
committer | 2024-01-21 17:56:01 +0100 | |
commit | 7a50e9e8fbb8d37e53a42c1dd5936b97463ead53 (patch) | |
tree | c0960018f287bcb2043a1752ae85ad0d45e00f21 /widget/src/pane_grid | |
parent | 545cc909c9f356dd733d273173694db9b8c28594 (diff) | |
download | iced-7a50e9e8fbb8d37e53a42c1dd5936b97463ead53.tar.gz iced-7a50e9e8fbb8d37e53a42c1dd5936b97463ead53.tar.bz2 iced-7a50e9e8fbb8d37e53a42c1dd5936b97463ead53.zip |
Convert `Renderer::Theme` to generic `Widget` type
Diffstat (limited to '')
-rw-r--r-- | widget/src/pane_grid.rs | 54 | ||||
-rw-r--r-- | widget/src/pane_grid/content.rs | 51 | ||||
-rw-r--r-- | widget/src/pane_grid/title_bar.rs | 39 |
3 files changed, 74 insertions, 70 deletions
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::style::Theme>>; +/// # 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<Box<dyn Fn(Pane) -> Message + 'a>>, on_drag: Option<Box<dyn Fn(DragEvent) -> Message + 'a>>, on_resize: Option<(f32, Box<dyn Fn(ResizeEvent) -> Message + 'a>)>, - style: <Renderer::Theme as StyleSheet>::Style, + style: <Theme as StyleSheet>::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<T>( state: &'a State<T>, - 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<<Renderer::Theme as StyleSheet>::Style>, + style: impl Into<<Theme as StyleSheet>::Style>, ) -> Self { self.style = style.into(); self @@ -229,11 +233,11 @@ where } } -impl<'a, Message, Renderer> Widget<Message, Renderer> - for PaneGrid<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer> + 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::<state::Action>() @@ -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<overlay::Element<'_, Message, Renderer>> { + ) -> Option<overlay::Element<'_, Message, Theme, Renderer>> { let children = self .contents .iter_mut() @@ -458,16 +462,16 @@ where } } -impl<'a, Message, Renderer> From<PaneGrid<'a, Message, Renderer>> - for Element<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> From<PaneGrid<'a, Message, Theme, Renderer>> + 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<Renderer, T>( +pub fn draw<Theme, Renderer, T>( 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<f32>, - style: &<Renderer::Theme as StyleSheet>::Style, + style: &Theme::Style, contents: impl Iterator<Item = (Pane, T)>, draw_pane: impl Fn( T, @@ -833,8 +837,8 @@ pub fn draw<Renderer, T>( &Rectangle, ), ) where + Theme: StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: StyleSheet, { let picked_pane = action.picked_pane(); diff --git a/widget/src/pane_grid/content.rs b/widget/src/pane_grid/content.rs index ee00f186..415dcc3e 100644 --- a/widget/src/pane_grid/content.rs +++ b/widget/src/pane_grid/content.rs @@ -12,23 +12,27 @@ use crate::pane_grid::{Draggable, TitleBar}; /// /// [`Pane`]: super::Pane #[allow(missing_debug_implementations)] -pub struct Content<'a, Message, Renderer = crate::Renderer> -where +pub struct Content< + 'a, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { - title_bar: Option<TitleBar<'a, Message, Renderer>>, - body: Element<'a, Message, Renderer>, - style: <Renderer::Theme as container::StyleSheet>::Style, + title_bar: Option<TitleBar<'a, Message, Theme, Renderer>>, + body: Element<'a, Message, Theme, Renderer>, + style: Theme::Style, } -impl<'a, Message, Renderer> Content<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Content<'a, Message, Theme, Renderer> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { /// Creates a new [`Content`] with the provided body. - pub fn new(body: impl Into<Element<'a, Message, Renderer>>) -> Self { + pub fn new(body: impl Into<Element<'a, Message, Theme, Renderer>>) -> Self { Self { title_bar: None, body: body.into(), @@ -39,26 +43,23 @@ where /// Sets the [`TitleBar`] of this [`Content`]. pub fn title_bar( mut self, - title_bar: TitleBar<'a, Message, Renderer>, + title_bar: TitleBar<'a, Message, Theme, Renderer>, ) -> Self { self.title_bar = Some(title_bar); self } /// Sets the style of the [`Content`]. - pub fn style( - mut self, - style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>, - ) -> Self { + pub fn style(mut self, style: impl Into<Theme::Style>) -> Self { self.style = style.into(); self } } -impl<'a, Message, Renderer> Content<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Content<'a, Message, Theme, Renderer> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { pub(super) fn state(&self) -> Tree { let children = if let Some(title_bar) = self.title_bar.as_ref() { @@ -92,14 +93,12 @@ where &self, tree: &Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, viewport: &Rectangle, ) { - use container::StyleSheet; - let bounds = layout.bounds(); { @@ -331,7 +330,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, - ) -> Option<overlay::Element<'b, Message, Renderer>> { + ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { if let Some(title_bar) = self.title_bar.as_mut() { let mut children = layout.children(); let title_bar_layout = children.next()?; @@ -359,10 +358,11 @@ where } } -impl<'a, Message, Renderer> Draggable for &Content<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> Draggable + for &Content<'a, Message, Theme, Renderer> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { fn can_be_dragged_at( &self, @@ -380,11 +380,12 @@ where } } -impl<'a, T, Message, Renderer> From<T> for Content<'a, Message, Renderer> +impl<'a, T, Message, Theme, Renderer> From<T> + for Content<'a, Message, Theme, Renderer> where - T: Into<Element<'a, Message, Renderer>>, + T: Into<Element<'a, Message, Theme, Renderer>>, + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { fn from(element: T) -> Self { Self::new(element) diff --git a/widget/src/pane_grid/title_bar.rs b/widget/src/pane_grid/title_bar.rs index eb21b743..3cca6b33 100644 --- a/widget/src/pane_grid/title_bar.rs +++ b/widget/src/pane_grid/title_bar.rs @@ -13,27 +13,31 @@ use crate::core::{ /// /// [`Pane`]: super::Pane #[allow(missing_debug_implementations)] -pub struct TitleBar<'a, Message, Renderer = crate::Renderer> -where +pub struct TitleBar< + 'a, + Message, + Theme = crate::Theme, + Renderer = crate::Renderer, +> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { - content: Element<'a, Message, Renderer>, - controls: Option<Element<'a, Message, Renderer>>, + content: Element<'a, Message, Theme, Renderer>, + controls: Option<Element<'a, Message, Theme, Renderer>>, padding: Padding, always_show_controls: bool, - style: <Renderer::Theme as container::StyleSheet>::Style, + style: Theme::Style, } -impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> TitleBar<'a, Message, Theme, Renderer> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { /// Creates a new [`TitleBar`] with the given content. pub fn new<E>(content: E) -> Self where - E: Into<Element<'a, Message, Renderer>>, + E: Into<Element<'a, Message, Theme, Renderer>>, { Self { content: content.into(), @@ -47,7 +51,7 @@ where /// Sets the controls of the [`TitleBar`]. pub fn controls( mut self, - controls: impl Into<Element<'a, Message, Renderer>>, + controls: impl Into<Element<'a, Message, Theme, Renderer>>, ) -> Self { self.controls = Some(controls.into()); self @@ -60,10 +64,7 @@ where } /// Sets the style of the [`TitleBar`]. - pub fn style( - mut self, - style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>, - ) -> Self { + pub fn style(mut self, style: impl Into<Theme::Style>) -> Self { self.style = style.into(); self } @@ -82,10 +83,10 @@ where } } -impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> +impl<'a, Message, Theme, Renderer> TitleBar<'a, Message, Theme, Renderer> where + Theme: container::StyleSheet, Renderer: crate::core::Renderer, - Renderer::Theme: container::StyleSheet, { pub(super) fn state(&self) -> Tree { let children = if let Some(controls) = self.controls.as_ref() { @@ -119,15 +120,13 @@ where &self, tree: &Tree, renderer: &mut Renderer, - theme: &Renderer::Theme, + theme: &Theme, inherited_style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, viewport: &Rectangle, show_controls: bool, ) { - use container::StyleSheet; - let bounds = layout.bounds(); let style = theme.appearance(&self.style); let inherited_style = renderer::Style { @@ -406,7 +405,7 @@ where tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, - ) -> Option<overlay::Element<'b, Message, Renderer>> { + ) -> Option<overlay::Element<'b, Message, Theme, Renderer>> { let mut children = layout.children(); let padded = children.next()?; |