use iris::prelude::*; fn main() { DefaultApp::::run(); } #[derive(DefaultUiState)] struct State { ui_state: DefaultUiState, } type Rsc = DefaultRsc; #[derive(Clone, Copy, WidgetView)] struct Test { #[root] root: WidgetRef, } impl Test { pub fn new(rsc: &mut Rsc) -> Self { let root = rect(Color::RED).add(rsc); Self { root } } pub fn toggle(&self, rsc: &mut Rsc) { let rect = (self.root)(rsc); if rect.color == Color::RED { rect.color = Color::BLUE; } else { rect.color = Color::RED; } } } impl DefaultAppState for State { fn new(ui_state: DefaultUiState, rsc: &mut DefaultRsc, _: Proxy) -> Self { let test = Test::new(rsc); test.on(CursorSense::click(), move |_, rsc| { test.toggle(rsc); }) .set_root(rsc); Self { ui_state } } }