summaryrefslogtreecommitdiffstats
path: root/examples/custom_quad/src/main.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector@hecrj.dev>2024-01-20 13:52:15 +0100
committerLibravatar GitHub <noreply@github.com>2024-01-20 13:52:15 +0100
commit545cc909c9f356dd733d273173694db9b8c28594 (patch)
treec8132edab4386bbccb07a372c3776f22abefbda3 /examples/custom_quad/src/main.rs
parentb3e3f6e3c9fc6879e6681810f54d7eaa7c0f3d30 (diff)
parent1c1667c3c99fa9b1009ef416b9b3c7e5a1d53a97 (diff)
downloadiced-545cc909c9f356dd733d273173694db9b8c28594.tar.gz
iced-545cc909c9f356dd733d273173694db9b8c28594.tar.bz2
iced-545cc909c9f356dd733d273173694db9b8c28594.zip
Merge pull request #1882 from nicksenger/shadows
Quad shadows
Diffstat (limited to 'examples/custom_quad/src/main.rs')
-rw-r--r--examples/custom_quad/src/main.rs61
1 files changed, 54 insertions, 7 deletions
diff --git a/examples/custom_quad/src/main.rs b/examples/custom_quad/src/main.rs
index cc9ad528..14f62caa 100644
--- a/examples/custom_quad/src/main.rs
+++ b/examples/custom_quad/src/main.rs
@@ -4,20 +4,27 @@ mod quad {
use iced::advanced::renderer;
use iced::advanced::widget::{self, Widget};
use iced::mouse;
- use iced::{Color, Element, Length, Rectangle, Size};
+ use iced::{Border, Color, Element, Length, Rectangle, Shadow, Size};
pub struct CustomQuad {
size: f32,
radius: [f32; 4],
border_width: f32,
+ shadow: Shadow,
}
impl CustomQuad {
- pub fn new(size: f32, radius: [f32; 4], border_width: f32) -> Self {
+ pub fn new(
+ size: f32,
+ radius: [f32; 4],
+ border_width: f32,
+ shadow: Shadow,
+ ) -> Self {
Self {
size,
radius,
border_width,
+ shadow,
}
}
}
@@ -55,9 +62,12 @@ mod quad {
renderer.fill_quad(
renderer::Quad {
bounds: layout.bounds(),
- border_radius: self.radius.into(),
- border_width: self.border_width,
- border_color: Color::from_rgb(1.0, 0.0, 0.0),
+ border: Border {
+ radius: self.radius.into(),
+ width: self.border_width,
+ color: Color::from_rgb(1.0, 0.0, 0.0),
+ },
+ shadow: self.shadow,
},
Color::BLACK,
);
@@ -75,7 +85,9 @@ mod quad {
}
use iced::widget::{column, container, slider, text};
-use iced::{Alignment, Element, Length, Sandbox, Settings};
+use iced::{
+ Alignment, Color, Element, Length, Sandbox, Settings, Shadow, Vector,
+};
pub fn main() -> iced::Result {
Example::run(Settings::default())
@@ -84,6 +96,7 @@ pub fn main() -> iced::Result {
struct Example {
radius: [f32; 4],
border_width: f32,
+ shadow: Shadow,
}
#[derive(Debug, Clone, Copy)]
@@ -94,6 +107,9 @@ enum Message {
RadiusBottomRightChanged(f32),
RadiusBottomLeftChanged(f32),
BorderWidthChanged(f32),
+ ShadowXOffsetChanged(f32),
+ ShadowYOffsetChanged(f32),
+ ShadowBlurRadiusChanged(f32),
}
impl Sandbox for Example {
@@ -103,6 +119,11 @@ impl Sandbox for Example {
Self {
radius: [50.0; 4],
border_width: 0.0,
+ shadow: Shadow {
+ color: Color::from_rgba(0.0, 0.0, 0.0, 0.8),
+ offset: Vector::new(0.0, 8.0),
+ blur_radius: 16.0,
+ },
}
}
@@ -128,14 +149,33 @@ impl Sandbox for Example {
Message::BorderWidthChanged(width) => {
self.border_width = width;
}
+ Message::ShadowXOffsetChanged(x) => {
+ self.shadow.offset.x = x;
+ }
+ Message::ShadowYOffsetChanged(y) => {
+ self.shadow.offset.y = y;
+ }
+ Message::ShadowBlurRadiusChanged(s) => {
+ self.shadow.blur_radius = s;
+ }
}
}
fn view(&self) -> Element<Message> {
let [tl, tr, br, bl] = self.radius;
+ let Shadow {
+ offset: Vector { x: sx, y: sy },
+ blur_radius: sr,
+ ..
+ } = self.shadow;
let content = column![
- quad::CustomQuad::new(200.0, self.radius, self.border_width),
+ quad::CustomQuad::new(
+ 200.0,
+ self.radius,
+ self.border_width,
+ self.shadow
+ ),
text(format!("Radius: {tl:.2}/{tr:.2}/{br:.2}/{bl:.2}")),
slider(1.0..=100.0, tl, Message::RadiusTopLeftChanged).step(0.01),
slider(1.0..=100.0, tr, Message::RadiusTopRightChanged).step(0.01),
@@ -145,6 +185,13 @@ impl Sandbox for Example {
.step(0.01),
slider(1.0..=10.0, self.border_width, Message::BorderWidthChanged)
.step(0.01),
+ text(format!("Shadow: {sx:.2}x{sy:.2}, {sr:.2}")),
+ slider(-100.0..=100.0, sx, Message::ShadowXOffsetChanged)
+ .step(0.01),
+ slider(-100.0..=100.0, sy, Message::ShadowYOffsetChanged)
+ .step(0.01),
+ slider(0.0..=100.0, sr, Message::ShadowBlurRadiusChanged)
+ .step(0.01),
]
.padding(20)
.spacing(20)