diff options
Diffstat (limited to 'native/src/widget/pane_grid/content.rs')
-rw-r--r-- | native/src/widget/pane_grid/content.rs | 79 |
1 files changed, 44 insertions, 35 deletions
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<TitleBar<'a, Message, Renderer>>, 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<Element<'a, Message, Renderer>>) -> 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<T> for Content<'a, Message, Renderer> where T: Into<Element<'a, Message, Renderer>>, - Renderer: pane_grid::Renderer, + Renderer: crate::Renderer, { fn from(element: T) -> Self { Self::new(element) |