`WakeTaskQueue` becomes `TaskQueue`, which carries the update itself. Delivery and waking are then one act: the winit host sends it through the `EventLoopProxy` as a `DefaultEvent::Update`, so there is no channel beside the loop and nothing has to claim a redraw is needed in order to be looked at. `Window::request_redraw` is gone from this path; `event` applies the update and then asks the tree whether anything became dirty, which is the same question `window_event` already ended with -- now `schedule_redraw`, called from both. The loop's message type is `DefaultEvent<State>`, so `Proxy` becomes a wrapper that takes the application's own `Event` and requires it to be `Send`, since it now crosses to the task thread by that route. The harness supplies a channel-backed queue, which is what lets a test hold updates until it asks for them. Tests split by subject -- layout, pointer, scroll, tasks -- with the region helper in `tests/common`.
50 lines
1.0 KiB
Rust
50 lines
1.0 KiB
Rust
use iris::prelude::*;
|
|
|
|
fn main() {
|
|
DefaultApp::<State>::run();
|
|
}
|
|
|
|
#[derive(DefaultUiState)]
|
|
struct State {
|
|
ui_state: DefaultUiState,
|
|
}
|
|
|
|
type Rsc = DefaultRsc<State>;
|
|
|
|
#[derive(Clone, Copy, WidgetView)]
|
|
struct Test {
|
|
#[root]
|
|
root: WeakWidget<Rect>,
|
|
cur: WeakState<bool>,
|
|
}
|
|
|
|
impl Test {
|
|
pub fn new(rsc: &mut Rsc) -> Self {
|
|
let root = rect(Color::RED).add(rsc);
|
|
let cur = rsc.create_state(root, false);
|
|
Self { root, cur }
|
|
}
|
|
pub fn toggle(&self, rsc: &mut Rsc) {
|
|
let cur = &mut rsc[self.cur];
|
|
*cur = !*cur;
|
|
if *cur {
|
|
rsc[self.root].color = Color::BLUE;
|
|
} else {
|
|
rsc[self.root].color = Color::RED;
|
|
}
|
|
}
|
|
}
|
|
|
|
impl DefaultAppState for State {
|
|
fn new(mut ui_state: DefaultUiState, rsc: &mut DefaultRsc<Self>, _: Proxy<Self>) -> Self {
|
|
let test = Test::new(rsc);
|
|
|
|
test.on(CursorSense::click(), move |_, rsc| {
|
|
test.toggle(rsc);
|
|
})
|
|
.set_root(rsc, &mut ui_state);
|
|
|
|
Self { ui_state }
|
|
}
|
|
}
|