37 lines
890 B
Rust
37 lines
890 B
Rust
use iris::prelude::*;
|
|
|
|
#[derive(Clone, Copy, WidgetView)]
|
|
struct Test {
|
|
#[root]
|
|
root: WeakWidget<Rect>,
|
|
cur: WeakState<bool>,
|
|
}
|
|
|
|
impl Test {
|
|
pub fn new<State>(rsc: &mut StdRsc<State>) -> Self {
|
|
let root = rect(PaintId::RED).add(rsc);
|
|
let cur = rsc.create_state(root, false);
|
|
Self { root, cur }
|
|
}
|
|
pub fn toggle<State>(&self, rsc: &mut StdRsc<State>) {
|
|
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<State>(rsc: &mut StdRsc<State>, ui_state: &mut impl HasRoot<StdRsc<State>>)
|
|
where
|
|
State: FocusHost,
|
|
{
|
|
let test = Test::new(rsc);
|
|
test.on(CursorSense::click(), move |_, rsc| {
|
|
test.toggle(rsc);
|
|
})
|
|
.set_root(rsc, ui_state);
|
|
}
|