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 +++++++++++++++--------------- native/src/widget/pane_grid/title_bar.rs | 56 ++++++++++++++++---------------- 2 files changed, 55 insertions(+), 54 deletions(-) (limited to 'native/src/widget/pane_grid') 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 diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 070010f8..9b0b7c78 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -90,34 +90,34 @@ where cursor_position: Point, viewport: &Rectangle, show_controls: bool, - ) -> Renderer::Output { - let mut children = layout.children(); - let padded = children.next().unwrap(); - - let mut children = padded.children(); - let title_layout = children.next().unwrap(); - - let controls = if let Some(controls) = &self.controls { - let controls_layout = children.next().unwrap(); - - if show_controls || self.always_show_controls { - Some((controls, controls_layout)) - } else { - None - } - } else { - None - }; - - renderer.draw_title_bar( - defaults, - layout.bounds(), - &self.style, - (&self.content, title_layout), - controls, - cursor_position, - viewport, - ) + ) { + // let mut children = layout.children(); + // let padded = children.next().unwrap(); + + // let mut children = padded.children(); + // let title_layout = children.next().unwrap(); + + // let controls = if let Some(controls) = &self.controls { + // let controls_layout = children.next().unwrap(); + + // if show_controls || self.always_show_controls { + // Some((controls, controls_layout)) + // } else { + // None + // } + // } else { + // None + // }; + + // renderer.draw_title_bar( + // defaults, + // layout.bounds(), + // &self.style, + // (&self.content, title_layout), + // controls, + // cursor_position, + // viewport, + // ) } /// Returns whether the mouse cursor is over the pick area of the -- 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 ++- native/src/widget/pane_grid/title_bar.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'native/src/widget/pane_grid') 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, diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 9b0b7c78..ce9249d2 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -3,6 +3,7 @@ use crate::event::{self, Event}; use crate::layout; use crate::overlay; use crate::pane_grid; +use crate::renderer; use crate::{ Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size, }; @@ -85,7 +86,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 ++++------- native/src/widget/pane_grid/title_bar.rs | 9 +++------ 2 files changed, 7 insertions(+), 13 deletions(-) (limited to 'native/src/widget/pane_grid') 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) diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index ce9249d2..22d3a9eb 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -17,7 +17,7 @@ pub struct TitleBar<'a, Message, Renderer: pane_grid::Renderer> { controls: Option>, padding: Padding, always_show_controls: bool, - style: ::Style, + style: &'a dyn container::StyleSheet, } impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> @@ -54,11 +54,8 @@ where } /// Sets the style of the [`TitleBar`]. - 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 } -- 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 ++++++++++++++++++-------------- native/src/widget/pane_grid/title_bar.rs | 77 +++++++++++++++++-------------- 2 files changed, 86 insertions(+), 70 deletions(-) (limited to 'native/src/widget/pane_grid') 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) diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 22d3a9eb..161eb9bc 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -2,7 +2,6 @@ use crate::container; use crate::event::{self, Event}; use crate::layout; use crate::overlay; -use crate::pane_grid; use crate::renderer; use crate::{ Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size, @@ -12,17 +11,17 @@ use crate::{ /// /// [`Pane`]: crate::widget::pane_grid::Pane #[allow(missing_debug_implementations)] -pub struct TitleBar<'a, Message, Renderer: pane_grid::Renderer> { +pub struct TitleBar<'a, Message, Renderer> { content: Element<'a, Message, Renderer>, controls: Option>, padding: Padding, always_show_controls: bool, - style: &'a dyn container::StyleSheet, + style_sheet: &'a dyn container::StyleSheet, } impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> where - Renderer: pane_grid::Renderer, + Renderer: crate::Renderer, { /// Creates a new [`TitleBar`] with the given content. pub fn new(content: E) -> Self @@ -34,7 +33,7 @@ where controls: None, padding: Padding::ZERO, always_show_controls: false, - style: Default::default(), + style_sheet: Default::default(), } } @@ -55,7 +54,7 @@ where /// Sets the style of the [`TitleBar`]. pub fn style(mut self, style: &'a dyn container::StyleSheet) -> Self { - self.style = style; + self.style_sheet = style; self } @@ -75,7 +74,7 @@ where impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> where - Renderer: pane_grid::Renderer, + Renderer: crate::Renderer, { /// Draws the [`TitleBar`] with the provided [`Renderer`] and [`Layout`]. /// @@ -83,39 +82,47 @@ where pub fn draw( &self, renderer: &mut Renderer, - style: &renderer::Style, + inherited_style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, show_controls: bool, ) { - // let mut children = layout.children(); - // let padded = children.next().unwrap(); - - // let mut children = padded.children(); - // let title_layout = children.next().unwrap(); - - // let controls = if let Some(controls) = &self.controls { - // let controls_layout = children.next().unwrap(); - - // if show_controls || self.always_show_controls { - // Some((controls, controls_layout)) - // } else { - // None - // } - // } else { - // None - // }; - - // renderer.draw_title_bar( - // defaults, - // layout.bounds(), - // &self.style, - // (&self.content, title_layout), - // controls, - // cursor_position, - // viewport, - // ) + let bounds = layout.bounds(); + let style = self.style_sheet.style(); + let inherited_style = renderer::Style { + text_color: style.text_color.unwrap_or(inherited_style.text_color), + }; + + container::draw_background(renderer, &style, bounds); + + let mut children = layout.children(); + let padded = children.next().unwrap(); + + let mut children = padded.children(); + let title_layout = children.next().unwrap(); + + self.content.draw( + renderer, + &inherited_style, + title_layout, + cursor_position, + viewport, + ); + + if let Some(controls) = &self.controls { + let controls_layout = children.next().unwrap(); + + if show_controls || self.always_show_controls { + controls.draw( + renderer, + &inherited_style, + controls_layout, + cursor_position, + viewport, + ); + } + } } /// Returns whether the mouse cursor is over the pick area of the -- 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 ++++++++++++++++++++++++++++++++ native/src/widget/pane_grid/title_bar.rs | 30 ++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) (limited to 'native/src/widget/pane_grid') 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); diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 161eb9bc..493c74db 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -1,6 +1,7 @@ use crate::container; use crate::event::{self, Event}; use crate::layout; +use crate::mouse; use crate::overlay; use crate::renderer; use crate::{ @@ -249,6 +250,35 @@ where control_status.merge(title_status) } + pub(crate) fn mouse_interaction( + &self, + layout: Layout<'_>, + viewport: &Rectangle, + cursor_position: Point, + ) -> mouse::Interaction { + let mut children = layout.children(); + let padded = children.next().unwrap(); + + let mut children = padded.children(); + let title_layout = children.next().unwrap(); + + let title_interaction = self.content.mouse_interaction( + title_layout, + viewport, + cursor_position, + ); + + if let Some(controls) = &self.controls { + let controls_layout = children.next().unwrap(); + + controls + .mouse_interaction(controls_layout, viewport, cursor_position) + .max(title_interaction) + } else { + title_interaction + } + } + pub(crate) fn overlay( &mut self, layout: Layout<'_>, -- 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/configuration.rs | 2 +- native/src/widget/pane_grid/content.rs | 4 ++-- native/src/widget/pane_grid/node.rs | 6 ++---- native/src/widget/pane_grid/state.rs | 6 +++--- native/src/widget/pane_grid/title_bar.rs | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) (limited to 'native/src/widget/pane_grid') diff --git a/native/src/widget/pane_grid/configuration.rs b/native/src/widget/pane_grid/configuration.rs index 4c43826e..4c52bad4 100644 --- a/native/src/widget/pane_grid/configuration.rs +++ b/native/src/widget/pane_grid/configuration.rs @@ -1,4 +1,4 @@ -use crate::pane_grid::Axis; +use crate::widget::pane_grid::Axis; /// The arrangement of a [`PaneGrid`]. /// 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`]. diff --git a/native/src/widget/pane_grid/node.rs b/native/src/widget/pane_grid/node.rs index 84714e00..af6573a0 100644 --- a/native/src/widget/pane_grid/node.rs +++ b/native/src/widget/pane_grid/node.rs @@ -1,7 +1,5 @@ -use crate::{ - pane_grid::{Axis, Pane, Split}, - Rectangle, Size, -}; +use crate::widget::pane_grid::{Axis, Pane, Split}; +use crate::{Rectangle, Size}; use std::collections::BTreeMap; diff --git a/native/src/widget/pane_grid/state.rs b/native/src/widget/pane_grid/state.rs index fb96f89f..bcc724a8 100644 --- a/native/src/widget/pane_grid/state.rs +++ b/native/src/widget/pane_grid/state.rs @@ -1,7 +1,7 @@ -use crate::{ - pane_grid::{Axis, Configuration, Direction, Node, Pane, Split}, - Hasher, Point, Rectangle, Size, +use crate::widget::pane_grid::{ + Axis, Configuration, Direction, Node, Pane, Split, }; +use crate::{Hasher, Point, Rectangle, Size}; use std::collections::{BTreeMap, HashMap}; diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 493c74db..2d66ba6c 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -1,9 +1,9 @@ -use crate::container; use crate::event::{self, Event}; use crate::layout; use crate::mouse; use crate::overlay; use crate::renderer; +use crate::widget::container; use crate::{ Clipboard, Element, Hasher, Layout, Padding, Point, Rectangle, Size, }; -- 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 ++++++--- native/src/widget/pane_grid/title_bar.rs | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) (limited to 'native/src/widget/pane_grid') 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 } } diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index 2d66ba6c..ffd59488 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -17,7 +17,7 @@ pub struct TitleBar<'a, Message, Renderer> { controls: Option>, padding: Padding, always_show_controls: bool, - style_sheet: &'a dyn container::StyleSheet, + style_sheet: Box, } impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer> @@ -54,8 +54,11 @@ where } /// Sets the style of the [`TitleBar`]. - pub fn style(mut self, style: &'a dyn container::StyleSheet) -> Self { - self.style_sheet = style; + pub fn style( + mut self, + style: impl Into>, + ) -> Self { + self.style_sheet = style.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') 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 +++--- native/src/widget/pane_grid/title_bar.rs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'native/src/widget/pane_grid') 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) } diff --git a/native/src/widget/pane_grid/title_bar.rs b/native/src/widget/pane_grid/title_bar.rs index ffd59488..070cf404 100644 --- a/native/src/widget/pane_grid/title_bar.rs +++ b/native/src/widget/pane_grid/title_bar.rs @@ -256,8 +256,8 @@ where pub(crate) fn mouse_interaction( &self, layout: Layout<'_>, - viewport: &Rectangle, cursor_position: Point, + viewport: &Rectangle, ) -> mouse::Interaction { let mut children = layout.children(); let padded = children.next().unwrap(); @@ -267,15 +267,15 @@ where let title_interaction = self.content.mouse_interaction( title_layout, - viewport, cursor_position, + viewport, ); if let Some(controls) = &self.controls { let controls_layout = children.next().unwrap(); controls - .mouse_interaction(controls_layout, viewport, cursor_position) + .mouse_interaction(controls_layout, cursor_position, viewport) .max(title_interaction) } else { title_interaction -- cgit