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() }