summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Nick Senger <dev@nsenger.com>2023-11-08 19:12:53 -0800
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2024-01-20 11:59:37 +0100
commitcc906c83cdf896d94b7ccf91258466714be631f6 (patch)
treead873e88cb711d4f186cb0c83497329903c200c3 /graphics
parentb3e3f6e3c9fc6879e6681810f54d7eaa7c0f3d30 (diff)
downloadiced-cc906c83cdf896d94b7ccf91258466714be631f6.tar.gz
iced-cc906c83cdf896d94b7ccf91258466714be631f6.tar.bz2
iced-cc906c83cdf896d94b7ccf91258466714be631f6.zip
feat: quad shadows
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/damage.rs25
-rw-r--r--graphics/src/primitive.rs6
-rw-r--r--graphics/src/renderer.rs3
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,
});
}