woodpecker_ui 0.1.1

A UI library for the Bevy game engine.
Documentation
use bevy::prelude::*;
use woodpecker_ui::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_plugins(WoodpeckerUIPlugin::default())
        .add_systems(Startup, startup)
        .run();
}

#[derive(Resource)]
pub struct MaterialList {
    red: Handle<ColorMaterial>,
    blue: Handle<ColorMaterial>,
}

fn startup(
    mut commands: Commands,
    mut ui_context: ResMut<WoodpeckerContext>,
    mut meshes: ResMut<Assets<Mesh>>,
    mut materials: ResMut<Assets<ColorMaterial>>,
) {
    commands.spawn((Camera2d, WoodpeckerView));

    let material_red = materials.add(Color::Srgba(Srgba::RED));
    let material_blue = materials.add(Color::Srgba(Srgba::BLUE));

    commands.insert_resource(MaterialList {
        red: material_red.clone(),
        blue: material_blue,
    });

    commands.spawn((
        Mesh2d(meshes.add(Circle { radius: 50.0 })),
        MeshMaterial2d(material_red),
        Transform::from_xyz(0.0, 0.0, 0.0),
    ));

    let root = commands.spawn_empty().id();
    commands.entity(root).insert((
        WoodpeckerApp,
        WoodpeckerStyle {
            padding: Edge::all(10.0),
            ..default()
        },
        WidgetChildren::default()
            .with_child::<Toggle>(Toggle)
            .with_observe(
                CurrentWidget(root),
                |trigger: Trigger<Change<ToggleChanged>>,
                 material_list: Res<MaterialList>,
                 mut query: Query<&mut MeshMaterial2d<ColorMaterial>>| {
                    for mut material in query.iter_mut() {
                        if trigger.data.checked {
                            info!("Toggle is now checked!");
                            *material = MeshMaterial2d(material_list.blue.clone());
                        } else {
                            info!("Toggle is now unchecked!");
                            *material = MeshMaterial2d(material_list.red.clone());
                        }
                    }
                },
            ),
    ));
    ui_context.set_root_widget(root);
}