use bevy::{ input::{keyboard::KeyboardInput, ButtonState}, prelude::*, window::PrimaryWindow, }; fn main() { App::new() .add_plugins(DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { title: "UI WTF".into(), resolution: (640., 480.).into(), ..default() }), ..default() })) .init_resource::() .add_systems(Startup, (init, init_cursors, init_container)) .add_systems(Update, (cursors, container)) .run(); } const CURSORS: [CursorIcon; 35] = [ CursorIcon::Default, CursorIcon::Crosshair, CursorIcon::Hand, CursorIcon::Arrow, CursorIcon::Move, CursorIcon::Text, CursorIcon::Wait, CursorIcon::Help, CursorIcon::Progress, CursorIcon::NotAllowed, CursorIcon::ContextMenu, CursorIcon::Cell, CursorIcon::VerticalText, CursorIcon::Alias, CursorIcon::Copy, CursorIcon::NoDrop, CursorIcon::Grab, CursorIcon::Grabbing, CursorIcon::AllScroll, CursorIcon::ZoomIn, CursorIcon::ZoomOut, CursorIcon::EResize, CursorIcon::NResize, CursorIcon::NeResize, CursorIcon::NwResize, CursorIcon::SResize, CursorIcon::SeResize, CursorIcon::SwResize, CursorIcon::WResize, CursorIcon::EwResize, CursorIcon::NsResize, CursorIcon::NeswResize, CursorIcon::NwseResize, CursorIcon::ColResize, CursorIcon::RowResize, ]; #[derive(Debug, Component, Resource, Default)] struct Icon(CursorIcon); fn init(mut commands: Commands) { info!("Spawning camera"); commands.spawn(( Camera2dBundle { ..default() }, UiCameraConfig { show_ui: true }, )); } fn init_cursors(mut commands: Commands) { info!("Spawning Cursor Icons"); commands .spawn(NodeBundle { style: Style { flex_direction: FlexDirection::Column, ..default() }, background_color: BackgroundColor(Color::BLACK), ..default() }) .with_children(|parent| { parent.spawn( TextBundle::from_section("Cursor Icons", TextStyle { ..default() }) .with_style(Style { max_width: Val::Percent(100.0), justify_self: JustifySelf::Stretch, ..default() }) .with_background_color(Color::PINK), ); parent .spawn(NodeBundle { style: Style { align_items: AlignItems::FlexStart, flex_direction: FlexDirection::Column, flex_wrap: FlexWrap::Wrap, ..default() }, ..default() }) .with_children(|parent| { CURSORS.iter().for_each(|&icon| { parent .spawn(( ButtonBundle { style: Style { padding: UiRect::all(Val::Px(5.0)), margin: UiRect::all(Val::Px(5.0)), border: UiRect::all(Val::Px(2.0)), ..default() }, background_color: BackgroundColor(Color::GRAY), border_color: BorderColor(Color::WHITE), ..default() }, Icon(icon), )) .with_children(|parent| { parent.spawn(TextBundle::from_section( format!("{:?}", icon), TextStyle { ..default() }, )); }); }); }); }); } fn cursors( events: Query<(&Interaction, &Icon), (Changed, With