diff options
author | 2023-11-08 19:12:53 -0800 | |
---|---|---|
committer | 2024-01-20 11:59:37 +0100 | |
commit | cc906c83cdf896d94b7ccf91258466714be631f6 (patch) | |
tree | ad873e88cb711d4f186cb0c83497329903c200c3 /graphics | |
parent | b3e3f6e3c9fc6879e6681810f54d7eaa7c0f3d30 (diff) | |
download | iced-cc906c83cdf896d94b7ccf91258466714be631f6.tar.gz iced-cc906c83cdf896d94b7ccf91258466714be631f6.tar.bz2 iced-cc906c83cdf896d94b7ccf91258466714be631f6.zip |
feat: quad shadows
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/src/damage.rs | 25 | ||||
-rw-r--r-- | graphics/src/primitive.rs | 6 | ||||
-rw-r--r-- | graphics/src/renderer.rs | 3 |
3 files changed, 31 insertions, 3 deletions
diff --git a/graphics/src/damage.rs b/graphics/src/damage.rs index 59e9f5b4..2aec9b25 100644 --- a/graphics/src/damage.rs +++ b/graphics/src/damage.rs @@ -78,9 +78,28 @@ impl<T: Damage> Damage for Primitive<T> { // damage bounds (?) raw.clip_bounds.expand(1.5) } - Self::Quad { bounds, .. } - | Self::Image { bounds, .. } - | Self::Svg { bounds, .. } => bounds.expand(1.0), + Self::Quad { + bounds, + shadow_offset, + shadow_blur_radius, + .. + } => { + let bounds_with_shadow = Rectangle { + x: bounds.x + shadow_offset.x.min(0.0) - shadow_blur_radius, + y: bounds.y + shadow_offset.y.min(0.0) - shadow_blur_radius, + width: bounds.width + + shadow_offset.x.abs() + + shadow_blur_radius * 2.0, + height: bounds.height + + shadow_offset.y.abs() + + shadow_blur_radius * 2.0, + }; + + bounds_with_shadow.expand(1.0) + } + Self::Image { bounds, .. } | Self::Svg { bounds, .. } => { + bounds.expand(1.0) + } Self::Clip { bounds, .. } => bounds.expand(1.0), Self::Group { primitives } => primitives .iter() diff --git a/graphics/src/primitive.rs b/graphics/src/primitive.rs index 20affaaf..795d9609 100644 --- a/graphics/src/primitive.rs +++ b/graphics/src/primitive.rs @@ -71,6 +71,12 @@ pub enum Primitive<T> { border_width: f32, /// The border color of the quad border_color: Color, + /// The shadow color of the quad + shadow_color: Color, + /// The shadow offset of the quad + shadow_offset: Vector, + /// The shadow blur radius of the quad + shadow_blur_radius: f32, }, /// An image primitive Image { diff --git a/graphics/src/renderer.rs b/graphics/src/renderer.rs index 1b0f5c5b..bd640097 100644 --- a/graphics/src/renderer.rs +++ b/graphics/src/renderer.rs @@ -127,6 +127,9 @@ impl<B: Backend, T> iced_core::Renderer for Renderer<B, T> { border_radius: quad.border_radius.into(), border_width: quad.border_width, border_color: quad.border_color, + shadow_color: quad.shadow.color, + shadow_offset: quad.shadow.offset, + shadow_blur_radius: quad.shadow.blur_radius, }); } |