Checkbox

counter example

The checkbox widget is used to toggle a value, which should be bound to your state.

#![allow(unused)]
fn main() {
Checkbox::new(
    val!(|state: &MyState| state.checked)
).with_on_change(|state| {
    state.checked = !state.checked;
    Update::DRAW
})
}

or the full example:

use maycoon::core::app::update::Update;
use maycoon::core::app::MayApp;
use maycoon::core::config::MayConfig;
use maycoon::core::layout::{AlignItems, Dimension, FlexDirection, LayoutStyle};
use maycoon::core::state::Val;
use maycoon::macros::{val, State};
use maycoon::math::Vector2;
use maycoon::widgets::checkbox::Checkbox;
use maycoon::widgets::container::Container;
use maycoon::widgets::text::Text;

#[derive(State)]
struct MyState {
    checked: bool,
}

fn main() {
    MayApp::new(MayConfig::default()).run(
        MyState { checked: false },
        Container::new(vec![
            Val::new_val(Box::new(
                Checkbox::new(val!(|state: &MyState| state.checked)).with_on_change(|state| {
                    state.checked = !state.checked;
                    Update::DRAW
                }),
            )),
            Val::new_val(Box::new(Text::new(val!(
                |state: &MyState| if state.checked {
                    "Checked".to_string()
                } else {
                    "Unchecked".to_string()
                }
            )))),
        ])
        .with_layout_style(LayoutStyle {
            size: Vector2::<Dimension>::new(Dimension::Percent(1.0), Dimension::Percent(1.0)),
            flex_direction: FlexDirection::Column,
            align_items: Some(AlignItems::Center),
            ..Default::default()
        }),
    );
}