summaryrefslogtreecommitdiffstats
path: root/native/src/widget/pane_grid
diff options
context:
space:
mode:
Diffstat (limited to 'native/src/widget/pane_grid')
-rw-r--r--native/src/widget/pane_grid/content.rs35
-rw-r--r--native/src/widget/pane_grid/title_bar.rs23
2 files changed, 44 insertions, 14 deletions
diff --git a/native/src/widget/pane_grid/content.rs b/native/src/widget/pane_grid/content.rs
index 407f5458..4c9e65c9 100644
--- a/native/src/widget/pane_grid/content.rs
+++ b/native/src/widget/pane_grid/content.rs
@@ -11,22 +11,27 @@ use crate::{Clipboard, Element, Layout, Point, Rectangle, Shell, Size};
///
/// [`Pane`]: crate::widget::pane_grid::Pane
#[allow(missing_debug_implementations)]
-pub struct Content<'a, Message, Renderer> {
+pub struct Content<'a, Message, Renderer>
+where
+ Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
+{
title_bar: Option<TitleBar<'a, Message, Renderer>>,
body: Element<'a, Message, Renderer>,
- style_sheet: Box<dyn container::StyleSheet + 'a>,
+ style: <Renderer::Theme as container::StyleSheet>::Style,
}
impl<'a, Message, Renderer> Content<'a, Message, Renderer>
where
Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// 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_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -42,9 +47,9 @@ where
/// Sets the style of the [`Content`].
pub fn style(
mut self,
- style_sheet: impl Into<Box<dyn container::StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style_sheet.into();
+ self.style = style.into();
self
}
}
@@ -52,6 +57,7 @@ where
impl<'a, Message, Renderer> Content<'a, Message, Renderer>
where
Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// Draws the [`Content`] with the provided [`Renderer`] and [`Layout`].
///
@@ -59,15 +65,18 @@ where
pub fn draw(
&self,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
viewport: &Rectangle,
) {
+ use container::StyleSheet;
+
let bounds = layout.bounds();
{
- let style = self.style_sheet.style();
+ let style = theme.appearance(self.style);
container::draw_background(renderer, &style, bounds);
}
@@ -81,6 +90,7 @@ where
title_bar.draw(
renderer,
+ theme,
style,
title_bar_layout,
cursor_position,
@@ -90,14 +100,21 @@ where
self.body.draw(
renderer,
+ theme,
style,
body_layout,
cursor_position,
viewport,
);
} else {
- self.body
- .draw(renderer, style, layout, cursor_position, viewport);
+ self.body.draw(
+ renderer,
+ theme,
+ style,
+ layout,
+ cursor_position,
+ viewport,
+ );
}
}
@@ -239,6 +256,7 @@ where
impl<'a, Message, Renderer> Draggable for &Content<'a, Message, Renderer>
where
Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
fn can_be_dragged_at(
&self,
@@ -260,6 +278,7 @@ impl<'a, T, Message, Renderer> From<T> for Content<'a, Message, Renderer>
where
T: Into<Element<'a, Message, Renderer>>,
Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
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 6713724a..14c3ab4e 100644
--- a/native/src/widget/pane_grid/title_bar.rs
+++ b/native/src/widget/pane_grid/title_bar.rs
@@ -12,17 +12,22 @@ use crate::{
///
/// [`Pane`]: crate::widget::pane_grid::Pane
#[allow(missing_debug_implementations)]
-pub struct TitleBar<'a, Message, Renderer> {
+pub struct TitleBar<'a, Message, Renderer>
+where
+ Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
+{
content: Element<'a, Message, Renderer>,
controls: Option<Element<'a, Message, Renderer>>,
padding: Padding,
always_show_controls: bool,
- style_sheet: Box<dyn container::StyleSheet + 'a>,
+ style: <Renderer::Theme as container::StyleSheet>::Style,
}
impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer>
where
Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// Creates a new [`TitleBar`] with the given content.
pub fn new<E>(content: E) -> Self
@@ -34,7 +39,7 @@ where
controls: None,
padding: Padding::ZERO,
always_show_controls: false,
- style_sheet: Default::default(),
+ style: Default::default(),
}
}
@@ -56,9 +61,9 @@ where
/// Sets the style of the [`TitleBar`].
pub fn style(
mut self,
- style: impl Into<Box<dyn container::StyleSheet + 'a>>,
+ style: impl Into<<Renderer::Theme as container::StyleSheet>::Style>,
) -> Self {
- self.style_sheet = style.into();
+ self.style = style.into();
self
}
@@ -79,6 +84,7 @@ where
impl<'a, Message, Renderer> TitleBar<'a, Message, Renderer>
where
Renderer: crate::Renderer,
+ Renderer::Theme: container::StyleSheet,
{
/// Draws the [`TitleBar`] with the provided [`Renderer`] and [`Layout`].
///
@@ -86,14 +92,17 @@ where
pub fn draw(
&self,
renderer: &mut Renderer,
+ theme: &Renderer::Theme,
inherited_style: &renderer::Style,
layout: Layout<'_>,
cursor_position: Point,
viewport: &Rectangle,
show_controls: bool,
) {
+ use container::StyleSheet;
+
let bounds = layout.bounds();
- let style = self.style_sheet.style();
+ let style = theme.appearance(self.style);
let inherited_style = renderer::Style {
text_color: style.text_color.unwrap_or(inherited_style.text_color),
};
@@ -118,6 +127,7 @@ where
}
controls.draw(
renderer,
+ theme,
&inherited_style,
controls_layout,
cursor_position,
@@ -129,6 +139,7 @@ where
if show_title {
self.content.draw(
renderer,
+ theme,
&inherited_style,
title_layout,
cursor_position,