From 664251f3f5c7b76f69a97683af1468094bba887f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sat, 14 May 2022 01:47:55 +0200 Subject: Draft first-class `Theme` support RFC: https://github.com/iced-rs/rfcs/pull/6 --- native/src/widget/pane_grid.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'native/src/widget/pane_grid.rs') diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index 0ceec83e..fb056f79 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -754,6 +754,7 @@ where fn draw( &self, renderer: &mut Renderer, + theme: &Renderer::Theme, style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, @@ -772,7 +773,14 @@ where self.style_sheet.as_ref(), self.elements.iter().map(|(pane, content)| (*pane, content)), |pane, renderer, style, layout, cursor_position, rectangle| { - pane.draw(renderer, style, layout, cursor_position, rectangle); + pane.draw( + renderer, + theme, + style, + layout, + cursor_position, + rectangle, + ); }, ) } -- cgit From 6f69df3d415bfc922ce15539746026843bd410e6 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 1 Jun 2022 01:44:59 +0200 Subject: Implement theme styling for `PaneGrid` --- native/src/widget/pane_grid.rs | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) (limited to 'native/src/widget/pane_grid.rs') diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index fb056f79..f903c021 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -93,7 +93,11 @@ pub use iced_style::pane_grid::{Line, StyleSheet}; /// .on_resize(10, Message::PaneResized); /// ``` #[allow(missing_debug_implementations)] -pub struct PaneGrid<'a, Message, Renderer> { +pub struct PaneGrid<'a, Message, Renderer> +where + Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, +{ state: &'a mut state::Internal, action: &'a mut state::Action, elements: Vec<(Pane, Content<'a, Message, Renderer>)>, @@ -103,12 +107,13 @@ pub struct PaneGrid<'a, Message, Renderer> { on_click: Option Message + 'a>>, on_drag: Option Message + 'a>>, on_resize: Option<(u16, Box Message + 'a>)>, - style_sheet: Box, + style: ::Style, } impl<'a, Message, Renderer> PaneGrid<'a, Message, Renderer> where Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, { /// Creates a [`PaneGrid`] with the given [`State`] and view function. /// @@ -136,7 +141,7 @@ where on_click: None, on_drag: None, on_resize: None, - style_sheet: Default::default(), + style: Default::default(), } } @@ -196,8 +201,11 @@ where } /// Sets the style of the [`PaneGrid`]. - pub fn style(mut self, style: impl Into>) -> Self { - self.style_sheet = style.into(); + pub fn style( + mut self, + style: impl Into<::Style>, + ) -> Self { + self.style = style.into(); self } } @@ -468,11 +476,12 @@ pub fn draw( layout: Layout<'_>, cursor_position: Point, renderer: &mut Renderer, - style: &renderer::Style, + theme: &Renderer::Theme, + default_style: &renderer::Style, viewport: &Rectangle, spacing: u16, resize_leeway: Option, - style_sheet: &dyn StyleSheet, + style: ::Style, elements: impl Iterator, draw_pane: impl Fn( T, @@ -484,6 +493,7 @@ pub fn draw( ), ) where Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, { let picked_pane = action.picked_pane(); @@ -545,7 +555,7 @@ pub fn draw( draw_pane( pane, renderer, - style, + default_style, layout, pane_cursor_position, viewport, @@ -558,7 +568,7 @@ pub fn draw( draw_pane( pane, renderer, - style, + default_style, layout, pane_cursor_position, viewport, @@ -569,9 +579,9 @@ pub fn draw( if let Some((axis, split_region, is_picked)) = picked_split { let highlight = if is_picked { - style_sheet.picked_split() + theme.picked_split(style) } else { - style_sheet.hovered_split() + theme.hovered_split(style) }; if let Some(highlight) = highlight { @@ -649,6 +659,7 @@ impl<'a, Message, Renderer> Widget for PaneGrid<'a, Message, Renderer> where Renderer: crate::Renderer, + Renderer::Theme: StyleSheet, { fn width(&self) -> Length { self.width @@ -766,11 +777,12 @@ where layout, cursor_position, renderer, + theme, style, viewport, self.spacing, self.on_resize.as_ref().map(|(leeway, _)| *leeway), - self.style_sheet.as_ref(), + self.style, self.elements.iter().map(|(pane, content)| (*pane, content)), |pane, renderer, style, layout, cursor_position, rectangle| { pane.draw( @@ -801,8 +813,9 @@ where 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( pane_grid: PaneGrid<'a, Message, Renderer>, -- cgit From 97555e67af8b4bcc77df69c5e72156e14948150e Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 7 Jun 2022 04:11:24 +0200 Subject: Implement theme styling for `Container` --- native/src/widget/pane_grid.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'native/src/widget/pane_grid.rs') diff --git a/native/src/widget/pane_grid.rs b/native/src/widget/pane_grid.rs index f903c021..eb969dbf 100644 --- a/native/src/widget/pane_grid.rs +++ b/native/src/widget/pane_grid.rs @@ -36,6 +36,7 @@ use crate::mouse; use crate::overlay; use crate::renderer; use crate::touch; +use crate::widget::container; use crate::{ Clipboard, Color, Element, Layout, Length, Point, Rectangle, Shell, Size, Vector, Widget, @@ -96,7 +97,7 @@ pub use iced_style::pane_grid::{Line, StyleSheet}; pub struct PaneGrid<'a, Message, Renderer> where Renderer: crate::Renderer, - Renderer::Theme: StyleSheet, + Renderer::Theme: StyleSheet + container::StyleSheet, { state: &'a mut state::Internal, action: &'a mut state::Action, @@ -113,7 +114,7 @@ where impl<'a, Message, Renderer> PaneGrid<'a, Message, Renderer> where Renderer: crate::Renderer, - Renderer::Theme: StyleSheet, + Renderer::Theme: StyleSheet + container::StyleSheet, { /// Creates a [`PaneGrid`] with the given [`State`] and view function. /// @@ -659,7 +660,7 @@ impl<'a, Message, Renderer> Widget for PaneGrid<'a, Message, Renderer> where Renderer: crate::Renderer, - Renderer::Theme: StyleSheet, + Renderer::Theme: StyleSheet + container::StyleSheet, { fn width(&self) -> Length { self.width @@ -815,7 +816,7 @@ impl<'a, Message, Renderer> From> where Message: 'a, Renderer: 'a + crate::Renderer, - Renderer::Theme: StyleSheet, + Renderer::Theme: StyleSheet + container::StyleSheet, { fn from( pane_grid: PaneGrid<'a, Message, Renderer>, -- cgit