Draft basic styling for Container

This commit is contained in:
Héctor Ramón Jiménez 2019-12-31 11:36:54 +01:00
parent 8caa66be27
commit fb9cc0262b
6 changed files with 126 additions and 11 deletions

View file

@ -1,6 +1,7 @@
mod button;
mod checkbox;
mod column;
mod container;
mod image;
mod radio;
mod row;

View file

@ -0,0 +1,46 @@
use crate::{container, defaults, Defaults, Primitive, Renderer};
use iced_native::{Element, Layout, Point, Rectangle};
impl iced_native::container::Renderer for Renderer {
type Style = Box<dyn container::StyleSheet>;
fn draw<Message>(
&mut self,
defaults: &Defaults,
bounds: Rectangle,
cursor_position: Point,
style_sheet: &Self::Style,
content: &Element<'_, Message, Self>,
content_layout: Layout<'_>,
) -> Self::Output {
let style = style_sheet.style();
let defaults = Defaults {
text: defaults::Text {
color: style.text_color.unwrap_or(defaults.text.color),
},
..*defaults
};
let (content, mouse_cursor) =
content.draw(self, &defaults, content_layout, cursor_position);
match style.background {
Some(background) => {
let quad = Primitive::Quad {
bounds,
background,
border_radius: style.border_radius,
};
(
Primitive::Group {
primitives: vec![quad, content],
},
mouse_cursor,
)
}
None => (content, mouse_cursor),
}
}
}

View file

@ -1 +1,2 @@
pub mod button;
pub mod container;

View file

@ -0,0 +1,37 @@
use iced_native::{Background, Color};
#[derive(Debug, Clone, Copy)]
pub struct Style {
pub text_color: Option<Color>,
pub background: Option<Background>,
pub border_radius: u16,
}
pub trait StyleSheet {
fn style(&self) -> Style {
Style {
text_color: None,
background: None,
border_radius: 0,
}
}
}
struct Default;
impl StyleSheet for Default {}
impl std::default::Default for Box<dyn StyleSheet> {
fn default() -> Self {
Box::new(Default)
}
}
impl<T> From<T> for Box<dyn StyleSheet>
where
T: 'static + StyleSheet,
{
fn from(style: T) -> Self {
Box::new(style)
}
}