mirror of
https://github.com/danbulant/cushy
synced 2026-05-19 12:19:02 +00:00
83 lines
2.7 KiB
Rust
83 lines
2.7 KiB
Rust
use cushy::figures::units::Lp;
|
|
use cushy::figures::{Point, Size, Zero};
|
|
use cushy::styles::components::CornerRadius;
|
|
use cushy::styles::Dimension;
|
|
use cushy::value::{Dynamic, MapEachCloned};
|
|
use cushy::widget::MakeWidget;
|
|
use cushy::widgets::container::ContainerShadow;
|
|
use cushy::widgets::slider::Slidable;
|
|
use cushy::Run;
|
|
use kludgine::shapes::CornerRadii;
|
|
|
|
fn main() -> cushy::Result {
|
|
let top_left = Dynamic::new(Lp::mm(1));
|
|
let top_right = Dynamic::new(Lp::mm(1));
|
|
let bottom_right = Dynamic::new(Lp::mm(1));
|
|
let bottom_left = Dynamic::new(Lp::mm(1));
|
|
let corners = (&top_left, &top_right, &bottom_right, &bottom_left).map_each_cloned(
|
|
|(top_left, top_right, bottom_right, bottom_left)| {
|
|
CornerRadii {
|
|
top_left,
|
|
top_right,
|
|
bottom_right,
|
|
bottom_left,
|
|
}
|
|
.map(Dimension::from)
|
|
},
|
|
);
|
|
|
|
let offset_x = Dynamic::new(Lp::ZERO);
|
|
let offset_y = Dynamic::new(Lp::ZERO);
|
|
let offset = (&offset_x, &offset_y).map_each_cloned(|(x, y)| Point::new(x, y));
|
|
|
|
let radius = Dynamic::new(Lp::mm(1));
|
|
let spread = Dynamic::new(Lp::mm(1));
|
|
|
|
let shadow = (&offset, &radius, &spread).map_each_cloned(|(offset, radius, spread)| {
|
|
ContainerShadow::new(offset)
|
|
.blur_radius(radius)
|
|
.spread(spread)
|
|
});
|
|
|
|
"Corner Radii"
|
|
.h3()
|
|
.and("Top Left")
|
|
.and(top_left.slider_between(Lp::ZERO, Lp::inches(1)))
|
|
.and("Top right")
|
|
.and(top_right.slider_between(Lp::ZERO, Lp::inches(1)))
|
|
.and("Bottom Right")
|
|
.and(bottom_right.slider_between(Lp::ZERO, Lp::inches(1)))
|
|
.and("Bottom Left")
|
|
.and(bottom_left.slider_between(Lp::ZERO, Lp::inches(1)))
|
|
.and("Shadow".h3())
|
|
.and("Offset X")
|
|
.and(offset_x.slider_between(Lp::inches_f(-0.5), Lp::inches_f(0.5)))
|
|
.and("Offset Y")
|
|
.and(offset_y.slider_between(Lp::inches_f(-0.5), Lp::inches_f(0.5)))
|
|
.and("Radius")
|
|
.and(radius.slider_between(Lp::ZERO, Lp::inches_f(0.5)))
|
|
.and("Spread")
|
|
.and(spread.slider_between(Lp::ZERO, Lp::inches_f(0.5)))
|
|
.into_rows()
|
|
.and(
|
|
"Preview"
|
|
.h3()
|
|
.and(
|
|
"Hello, World!"
|
|
.size(Size::squared(Lp::inches(2)))
|
|
.contain()
|
|
.shadow(shadow)
|
|
.with(&CornerRadius, corners)
|
|
.centered()
|
|
.contain()
|
|
.expand(),
|
|
)
|
|
.into_rows()
|
|
.expand(),
|
|
)
|
|
.into_columns()
|
|
.expand()
|
|
.contain()
|
|
.pad()
|
|
.run()
|
|
}
|