Draw styling in Widget::draw for Container

This commit is contained in:
Héctor Ramón Jiménez 2021-10-18 15:44:03 +07:00
parent d61cb58d92
commit 945f69e567
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -7,8 +7,8 @@ use crate::layout;
use crate::overlay; use crate::overlay;
use crate::renderer; use crate::renderer;
use crate::{ use crate::{
Clipboard, Element, Hasher, Layout, Length, Padding, Point, Rectangle, Background, Clipboard, Color, Element, Hasher, Layout, Length, Padding,
Widget, Point, Rectangle, Widget,
}; };
use std::u32; use std::u32;
@ -27,7 +27,7 @@ pub struct Container<'a, Message, Renderer> {
max_height: u32, max_height: u32,
horizontal_alignment: alignment::Horizontal, horizontal_alignment: alignment::Horizontal,
vertical_alignment: alignment::Vertical, vertical_alignment: alignment::Vertical,
style: &'a dyn StyleSheet, style_sheet: &'a dyn StyleSheet,
content: Element<'a, Message, Renderer>, content: Element<'a, Message, Renderer>,
} }
@ -48,7 +48,7 @@ where
max_height: u32::MAX, max_height: u32::MAX,
horizontal_alignment: alignment::Horizontal::Left, horizontal_alignment: alignment::Horizontal::Left,
vertical_alignment: alignment::Vertical::Top, vertical_alignment: alignment::Vertical::Top,
style: Default::default(), style_sheet: Default::default(),
content: content.into(), content: content.into(),
} }
} }
@ -108,8 +108,8 @@ where
} }
/// Sets the style of the [`Container`]. /// Sets the style of the [`Container`].
pub fn style(mut self, style: &'a dyn StyleSheet) -> Self { pub fn style(mut self, style_sheet: &'a dyn StyleSheet) -> Self {
self.style = style; self.style_sheet = style_sheet;
self self
} }
} }
@ -178,14 +178,22 @@ where
fn draw( fn draw(
&self, &self,
renderer: &mut Renderer, renderer: &mut Renderer,
style: &renderer::Style, renderer_style: &renderer::Style,
layout: Layout<'_>, layout: Layout<'_>,
cursor_position: Point, cursor_position: Point,
viewport: &Rectangle, viewport: &Rectangle,
) { ) {
let style = self.style_sheet.style();
draw_background(renderer, &style, layout.bounds());
self.content.draw( self.content.draw(
renderer, renderer,
style, &renderer::Style {
text_color: style
.text_color
.unwrap_or(renderer_style.text_color),
},
layout.children().next().unwrap(), layout.children().next().unwrap(),
cursor_position, cursor_position,
viewport, viewport,
@ -213,6 +221,26 @@ where
} }
} }
pub fn draw_background<Renderer>(
renderer: &mut Renderer,
style: &Style,
bounds: Rectangle,
) where
Renderer: crate::Renderer,
{
if style.background.is_some() || style.border_width > 0.0 {
renderer.fill_rectangle(renderer::Quad {
bounds,
background: style
.background
.unwrap_or(Background::Color(Color::TRANSPARENT)),
border_radius: style.border_radius,
border_width: style.border_width,
border_color: style.border_color,
});
}
}
impl<'a, Message, Renderer> From<Container<'a, Message, Renderer>> impl<'a, Message, Renderer> From<Container<'a, Message, Renderer>>
for Element<'a, Message, Renderer> for Element<'a, Message, Renderer>
where where