cushy/examples/overlays.rs
Jonathan Johnson 4e145d7f35
Removed UnwindSafe bounds
appit wasn't supposed to pass along this requirement
2023-12-20 11:35:19 -08:00

64 lines
2 KiB
Rust

use gooey::widget::{MakeWidget, MakeWidgetWithTag, WidgetTag};
use gooey::widgets::container::ContainerShadow;
use gooey::widgets::layers::{OverlayBuilder, OverlayLayer};
use gooey::Run;
use kludgine::figures::units::Lp;
use kludgine::figures::Point;
use kludgine::Color;
use rand::{thread_rng, Rng};
fn main() -> gooey::Result {
let overlay = OverlayLayer::default();
test_widget(&overlay, true)
.centered()
.and(overlay)
.into_layers()
.run()
}
fn test_widget(overlay: &OverlayLayer, is_root: bool) -> impl MakeWidget {
let (my_tag, my_id) = WidgetTag::new();
let right = show_overlay_button("Right", overlay, move |overlay| overlay.right_of(my_id));
let left = show_overlay_button("Left", overlay, move |overlay| overlay.left_of(my_id));
let up = show_overlay_button("Up", overlay, move |overlay| overlay.above(my_id));
let down = show_overlay_button("Down", overlay, move |overlay| overlay.below(my_id));
let mut buttons = up
.centered()
.and(left.and(right).into_columns())
.and(down.centered())
.into_rows()
.contain();
if !is_root {
buttons = buttons
.background_color(Color::new(
thread_rng().gen(),
thread_rng().gen(),
thread_rng().gen(),
255,
))
.shadow(
ContainerShadow::new(Point::new(Lp::ZERO, Lp::mm(2)))
.blur_radius(Lp::mm(1))
.spread(Lp::mm(1)),
);
}
buttons.pad().make_with_tag(my_tag)
}
fn show_overlay_button(
label: &str,
overlay: &OverlayLayer,
direction_func: impl for<'a> Fn(OverlayBuilder<'a>) -> OverlayBuilder<'a> + Send + 'static,
) -> impl MakeWidget {
let overlay = overlay.clone();
label.into_button().on_click(move |()| {
direction_func(overlay.build_overlay(test_widget(&overlay, false)))
.hide_on_unhover()
.show()
.forget();
})
}