Fix styling in button::Renderer implementation

This commit is contained in:
Héctor Ramón Jiménez 2020-01-05 19:48:27 +01:00
parent 7c4dba29c7
commit a848306b89

View file

@ -1,6 +1,6 @@
use crate::{button::StyleSheet, defaults, Defaults, Primitive, Renderer}; use crate::{button::StyleSheet, defaults, Defaults, Primitive, Renderer};
use iced_native::{ use iced_native::{
Background, Color, Element, Layout, MouseCursor, Point, Rectangle, Background, Color, Element, Layout, MouseCursor, Point, Rectangle, Vector,
}; };
impl iced_native::button::Renderer for Renderer { impl iced_native::button::Renderer for Renderer {
@ -45,11 +45,24 @@ impl iced_native::button::Renderer for Renderer {
); );
( (
match styling.background { if styling.background.is_some() || styling.border_width > 0 {
None => content, let background = Primitive::Quad {
Some(background) => Primitive::Group { bounds,
primitives: vec![ background: styling
Primitive::Quad { .background
.unwrap_or(Background::Color(Color::TRANSPARENT)),
border_radius: styling.border_radius,
border_width: styling.border_width,
border_color: styling.border_color,
};
if styling.shadow_offset == Vector::default() {
Primitive::Group {
primitives: vec![background, content],
}
} else {
// TODO: Implement proper shadow support
let shadow = Primitive::Quad {
bounds: Rectangle { bounds: Rectangle {
x: bounds.x + styling.shadow_offset.x, x: bounds.x + styling.shadow_offset.x,
y: bounds.y + styling.shadow_offset.y, y: bounds.y + styling.shadow_offset.y,
@ -61,17 +74,14 @@ impl iced_native::button::Renderer for Renderer {
border_radius: styling.border_radius, border_radius: styling.border_radius,
border_width: 0, border_width: 0,
border_color: Color::TRANSPARENT, border_color: Color::TRANSPARENT,
}, };
Primitive::Quad {
bounds, Primitive::Group {
background, primitives: vec![shadow, background, content],
border_radius: styling.border_radius, }
border_width: styling.border_width, }
border_color: styling.border_color, } else {
}, content
content,
],
},
}, },
if is_mouse_over { if is_mouse_over {
MouseCursor::Pointer MouseCursor::Pointer