use hui::{ color, size, draw::TextureFormat, signal::Signal, layout::{Alignment, Direction}, element::{ container::Container, text::Text, image::Image, br::Br, interactable::ElementInteractableExt, UiElementExt, }, }; enum CounterSignal { Increment, Decrement, } impl Signal for CounterSignal {} #[path = "../boilerplate.rs"] #[macro_use] mod boilerplate; const IMAGE_DATA: &[u8] = include_bytes!("../assets/icons/visual-studio-code-icon_32x32.rgba"); ui_main!( "hUI: Internal input test", init: |ui| { let image = ui.add_image(TextureFormat::Rgba, IMAGE_DATA, 32); (0, image) }, run: |ui, size, (ref mut counter, image)| { Container::default() .with_size(size!(100%)) .with_padding(10.) .with_align((Alignment::Center, Alignment::Begin)) .with_direction(Direction::Horizontal) .with_gap(5.) .with_background((0.1, 0.1, 0.1)) .with_wrap(true) .with_children(|ui| { Text::new("Number of images:") .with_text_size(24) .add_child(ui); Br.add_child(ui); Container::default() .with_padding(10.) .with_background(color::ORANGE) .with_children(|ui| { Text::new("-") .with_text_size(32) .add_child(ui); }) .on_click(|| CounterSignal::Decrement) .add_child(ui); Container::default() .with_size(size!(60, auto)) .with_align(Alignment::Center) .with_children(|ui| { Text::new(counter.to_string()) .with_text_size(64) .add_child(ui); }) .add_child(ui); Container::default() .with_padding(10.) .with_background(color::ORANGE) .with_children(|ui| { Text::new("+") .with_text_size(32) .add_child(ui); }) .on_click(|| CounterSignal::Increment) .add_child(ui); Br.add_child(ui); for _ in 0..*counter { Image::new(*image) .with_size(size!(48, 48)) .add_child(ui); } }) .add_root(ui, size); ui.process_signals(|sig| match sig { CounterSignal::Increment => *counter += 1, CounterSignal::Decrement => *counter -= 1, }); } );