cranpose_ui/widgets/
button.rs1#![allow(non_snake_case)]
4
5use crate::composable;
6use crate::layout::policies::FlexMeasurePolicy;
7use crate::modifier::Modifier;
8use crate::widgets::Layout;
9use cranpose_core::NodeId;
10use cranpose_ui_layout::{HorizontalAlignment, LinearArrangement};
11
12#[composable]
19pub fn Button<F, G>(modifier: Modifier, on_click: F, content: G) -> NodeId
20where
21 F: FnMut() + 'static,
22 G: FnMut() + 'static,
23{
24 use std::cell::RefCell;
25 use std::rc::Rc;
26
27 let on_click_rc: Rc<RefCell<dyn FnMut()>> = Rc::new(RefCell::new(on_click));
29
30 let clickable_modifier = modifier.clickable(move |_point| {
32 (on_click_rc.borrow_mut())();
33 });
34
35 Layout(
38 clickable_modifier,
39 FlexMeasurePolicy::column(
40 LinearArrangement::Center,
41 HorizontalAlignment::CenterHorizontally,
42 ),
43 content,
44 )
45}