use iris::prelude::*; #[derive(Clone, Copy, WidgetView)] struct Test { #[root] root: WeakWidget, cur: WeakState, } impl Test { pub fn new(rsc: &mut StdRsc) -> Self { let root = rect(PaintId::RED).add(rsc); let cur = rsc.create_state(root, false); Self { root, cur } } pub fn toggle(&self, rsc: &mut StdRsc) { let cur = &mut rsc[self.cur]; *cur = !*cur; if *cur { rsc[self.root].set_paint(PaintId::BLUE); } else { rsc[self.root].set_paint(PaintId::RED); } } } pub(crate) fn build(rsc: &mut StdRsc, ui_state: &mut impl HasRoot>) where State: FocusHost, { let test = Test::new(rsc); test.on(CursorSense::click(), move |_, rsc| { test.toggle(rsc); }) .set_root(rsc, ui_state); }