From 03b34931383e701c39c653a7662a616fe21a0947 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Thu, 14 Oct 2021 16:07:22 +0700 Subject: Remove trait-specific draw logic in `iced_native` --- native/src/widget/pane_grid/content.rs | 53 +++++++++++++++++----------------- 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index bac9fdd4..e94955f7 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -61,32 +61,33 @@ where layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, - ) -> Renderer::Output { - if let Some(title_bar) = &self.title_bar { - let mut children = layout.children(); - let title_bar_layout = children.next().unwrap(); - let body_layout = children.next().unwrap(); - - renderer.draw_pane( - defaults, - layout.bounds(), - &self.style, - Some((title_bar, title_bar_layout)), - (&self.body, body_layout), - cursor_position, - viewport, - ) - } else { - renderer.draw_pane( - defaults, - layout.bounds(), - &self.style, - None, - (&self.body, layout), - cursor_position, - viewport, - ) - } + ) { + // TODO + // if let Some(title_bar) = &self.title_bar { + // let mut children = layout.children(); + // let title_bar_layout = children.next().unwrap(); + // let body_layout = children.next().unwrap(); + + // renderer.draw_pane( + // defaults, + // layout.bounds(), + // &self.style, + // Some((title_bar, title_bar_layout)), + // (&self.body, body_layout), + // cursor_position, + // viewport, + // ) + // } else { + // renderer.draw_pane( + // defaults, + // layout.bounds(), + // &self.style, + // None, + // (&self.body, layout), + // cursor_position, + // viewport, + // ) + // } } /// Returns whether the [`Content`] with the given [`Layout`] can be picked -- cgit From edea093350e1b576e2b7db50c525e7fa5c3bea9f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 18 Oct 2021 15:19:04 +0700 Subject: Move `Defaults` from `iced_graphics` to `iced_native` --- native/src/widget/pane_grid/content.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index e94955f7..22b3a310 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -3,6 +3,7 @@ use crate::event::{self, Event}; use crate::layout; use crate::overlay; use crate::pane_grid::{self, TitleBar}; +use crate::renderer; use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; /// The content of a [`Pane`]. @@ -57,7 +58,7 @@ where pub fn draw( &self, renderer: &mut Renderer, - defaults: &Renderer::Defaults, + style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, -- cgit From d61cb58d92b6fcd520f665deb093f3747ffd5e5c Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 18 Oct 2021 15:36:32 +0700 Subject: Wire up `container` styling to `iced_native` --- native/src/widget/pane_grid/content.rs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 22b3a310..7858c15d 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -13,7 +13,7 @@ use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; pub struct Content<'a, Message, Renderer: pane_grid::Renderer> { title_bar: Option>, body: Element<'a, Message, Renderer>, - style: ::Style, + style: &'a dyn container::StyleSheet, } impl<'a, Message, Renderer> Content<'a, Message, Renderer> @@ -39,11 +39,8 @@ where } /// Sets the style of the [`Content`]. - pub fn style( - mut self, - style: impl Into<::Style>, - ) -> Self { - self.style = style.into(); + pub fn style(mut self, style: &'a dyn container::StyleSheet) -> Self { + self.style = style; self } } @@ -217,7 +214,7 @@ where impl<'a, T, Message, Renderer> From for Content<'a, Message, Renderer> where T: Into>, - Renderer: pane_grid::Renderer + container::Renderer, + Renderer: pane_grid::Renderer, { fn from(element: T) -> Self { Self::new(element) -- cgit From 41394b4e90a81a43c796c070e706e6aa4d8652bc Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 25 Oct 2021 15:37:28 +0700 Subject: Implement `Widget::draw` for `PaneGrid` --- native/src/widget/pane_grid/content.rs | 79 +++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 35 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 7858c15d..e74e3c84 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -2,7 +2,7 @@ use crate::container; use crate::event::{self, Event}; use crate::layout; use crate::overlay; -use crate::pane_grid::{self, TitleBar}; +use crate::pane_grid::TitleBar; use crate::renderer; use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; @@ -10,22 +10,22 @@ use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; /// /// [`Pane`]: crate::widget::pane_grid::Pane #[allow(missing_debug_implementations)] -pub struct Content<'a, Message, Renderer: pane_grid::Renderer> { +pub struct Content<'a, Message, Renderer> { title_bar: Option>, body: Element<'a, Message, Renderer>, - style: &'a dyn container::StyleSheet, + style_sheet: &'a dyn container::StyleSheet, } impl<'a, Message, Renderer> Content<'a, Message, Renderer> where - Renderer: pane_grid::Renderer, + Renderer: crate::Renderer, { /// Creates a new [`Content`] with the provided body. pub fn new(body: impl Into>) -> Self { Self { title_bar: None, body: body.into(), - style: Default::default(), + style_sheet: Default::default(), } } @@ -39,15 +39,15 @@ where } /// Sets the style of the [`Content`]. - pub fn style(mut self, style: &'a dyn container::StyleSheet) -> Self { - self.style = style; + pub fn style(mut self, style_sheet: &'a dyn container::StyleSheet) -> Self { + self.style_sheet = style_sheet; self } } impl<'a, Message, Renderer> Content<'a, Message, Renderer> where - Renderer: pane_grid::Renderer, + Renderer: crate::Renderer, { /// Draws the [`Content`] with the provided [`Renderer`] and [`Layout`]. /// @@ -60,32 +60,41 @@ where cursor_position: Point, viewport: &Rectangle, ) { - // TODO - // if let Some(title_bar) = &self.title_bar { - // let mut children = layout.children(); - // let title_bar_layout = children.next().unwrap(); - // let body_layout = children.next().unwrap(); - - // renderer.draw_pane( - // defaults, - // layout.bounds(), - // &self.style, - // Some((title_bar, title_bar_layout)), - // (&self.body, body_layout), - // cursor_position, - // viewport, - // ) - // } else { - // renderer.draw_pane( - // defaults, - // layout.bounds(), - // &self.style, - // None, - // (&self.body, layout), - // cursor_position, - // viewport, - // ) - // } + let bounds = layout.bounds(); + + { + let style = self.style_sheet.style(); + + container::draw_background(renderer, &style, bounds); + } + + if let Some(title_bar) = &self.title_bar { + let mut children = layout.children(); + let title_bar_layout = children.next().unwrap(); + let body_layout = children.next().unwrap(); + + let show_controls = bounds.contains(cursor_position); + + title_bar.draw( + renderer, + style, + title_bar_layout, + cursor_position, + viewport, + show_controls, + ); + + self.body.draw( + renderer, + style, + body_layout, + cursor_position, + viewport, + ); + } else { + self.body + .draw(renderer, style, layout, cursor_position, viewport); + } } /// Returns whether the [`Content`] with the given [`Layout`] can be picked @@ -214,7 +223,7 @@ where impl<'a, T, Message, Renderer> From for Content<'a, Message, Renderer> where T: Into>, - Renderer: pane_grid::Renderer, + Renderer: crate::Renderer, { fn from(element: T) -> Self { Self::new(element) -- cgit From 4a11cbd99445338619dfaf1f327dbc25b2983cb7 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 25 Oct 2021 16:16:35 +0700 Subject: Implement `Widget::mouse_interaction` for `PaneGrid` ... and fix rendering of drag interaction in `PaneGrid` by introducing an explicit `with_translation` method to `Renderer` and simplifying the `with_layer` and `Clip` primitive. --- native/src/widget/pane_grid/content.rs | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index e74e3c84..ddc659cc 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -1,6 +1,7 @@ use crate::container; use crate::event::{self, Event}; use crate::layout; +use crate::mouse; use crate::overlay; use crate::pane_grid::TitleBar; use crate::renderer; @@ -194,6 +195,41 @@ where event_status.merge(body_status) } + pub(crate) fn mouse_interaction( + &self, + layout: Layout<'_>, + viewport: &Rectangle, + cursor_position: Point, + ) -> mouse::Interaction { + let mut children = layout.children(); + + let (body_layout, title_bar_interaction) = + if let Some(title_bar) = &self.title_bar { + let title_bar_layout = children.next().unwrap(); + + let is_over_pick_area = title_bar + .is_over_pick_area(title_bar_layout, cursor_position); + + if is_over_pick_area { + return mouse::Interaction::Grab; + } + + let mouse_interaction = title_bar.mouse_interaction( + title_bar_layout, + viewport, + cursor_position, + ); + + (children.next().unwrap(), mouse_interaction) + } else { + (children.next().unwrap(), mouse::Interaction::default()) + }; + + self.body + .mouse_interaction(body_layout, viewport, cursor_position) + .max(title_bar_interaction) + } + pub(crate) fn hash_layout(&self, state: &mut Hasher) { if let Some(title_bar) = &self.title_bar { title_bar.hash_layout(state); -- cgit From 0aafcde0ef1533c9eeba0379de8c0082e30c7504 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 31 Oct 2021 15:35:12 +0700 Subject: Remove `widget` module re-exports in `iced_native` --- native/src/widget/pane_grid/content.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index ddc659cc..83d96917 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -1,10 +1,10 @@ -use crate::container; use crate::event::{self, Event}; use crate::layout; use crate::mouse; use crate::overlay; -use crate::pane_grid::TitleBar; use crate::renderer; +use crate::widget::container; +use crate::widget::pane_grid::TitleBar; use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; /// The content of a [`Pane`]. -- cgit From 40a5de581144886571504b762719f057dbb2e871 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 31 Oct 2021 17:02:59 +0700 Subject: Reintroduce `Box` for `style_sheet` in `Container` --- native/src/widget/pane_grid/content.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index 83d96917..d8da6d33 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -14,7 +14,7 @@ use crate::{Clipboard, Element, Hasher, Layout, Point, Rectangle, Size}; pub struct Content<'a, Message, Renderer> { title_bar: Option>, body: Element<'a, Message, Renderer>, - style_sheet: &'a dyn container::StyleSheet, + style_sheet: Box, } impl<'a, Message, Renderer> Content<'a, Message, Renderer> @@ -40,8 +40,11 @@ where } /// Sets the style of the [`Content`]. - pub fn style(mut self, style_sheet: &'a dyn container::StyleSheet) -> Self { - self.style_sheet = style_sheet; + pub fn style( + mut self, + style_sheet: impl Into>, + ) -> Self { + self.style_sheet = style_sheet.into(); self } } -- cgit From c330bb1b69d55d767fa5bb2e0fcc059fbbe07d07 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 1 Nov 2021 17:39:46 +0700 Subject: Fix `mouse_interaction` using wrong layout in `PaneGrid` ... when no titlebar is present. --- native/src/widget/pane_grid/content.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index d8da6d33..efb3493b 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -204,10 +204,9 @@ where viewport: &Rectangle, cursor_position: Point, ) -> mouse::Interaction { - let mut children = layout.children(); - let (body_layout, title_bar_interaction) = if let Some(title_bar) = &self.title_bar { + let mut children = layout.children(); let title_bar_layout = children.next().unwrap(); let is_over_pick_area = title_bar @@ -225,7 +224,7 @@ where (children.next().unwrap(), mouse_interaction) } else { - (children.next().unwrap(), mouse::Interaction::default()) + (layout, mouse::Interaction::default()) }; self.body -- cgit From 631e95ee0be01dc7f5e5183e1429972aee37787f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 2 Nov 2021 15:03:29 +0700 Subject: Move `viewport` argument to last position in `mouse_interaction` methods This keeps the order of the arguments consistent with `draw`. --- native/src/widget/pane_grid/content.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'native/src/widget/pane_grid/content.rs') diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs index efb3493b..c44506dd 100644 --- a/native/src/widget/pane_grid/content.rs +++ b/native/src/widget/pane_grid/content.rs @@ -201,8 +201,8 @@ where pub(crate) fn mouse_interaction( &self, layout: Layout<'_>, - viewport: &Rectangle, cursor_position: Point, + viewport: &Rectangle, ) -> mouse::Interaction { let (body_layout, title_bar_interaction) = if let Some(title_bar) = &self.title_bar { @@ -218,8 +218,8 @@ where let mouse_interaction = title_bar.mouse_interaction( title_bar_layout, - viewport, cursor_position, + viewport, ); (children.next().unwrap(), mouse_interaction) @@ -228,7 +228,7 @@ where }; self.body - .mouse_interaction(body_layout, viewport, cursor_position) + .mouse_interaction(body_layout, cursor_position, viewport) .max(title_bar_interaction) } -- cgit