Post task updates to the loop instead of waking it
`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`.
This commit is contained in:
1 parent
e97aba30e0
commit
3a74a04a5b
13 files changed
+266
-302
No files matched your search
@@ -0,0 +1,37 @@
|
||||
//! Where a frame puts things, with no window to put them in.
|
||||
|
||||
mod common;
|
||||
|
||||
use common::corners;
|
||||
use iris::harness::Harness;
|
||||
use iris::prelude::*;
|
||||
|
||||
/// A fixed 100 wide, and the rest of the 400 to its neighbour.
|
||||
fn two_rects(h: &mut Harness) -> (WidgetId, WidgetId) {
|
||||
let left = rect(Color::RED).width(100).add(&mut h.rsc);
|
||||
let right = rect(Color::BLUE).add(&mut h.rsc);
|
||||
h.set_root((left, right).span(Dir::RIGHT));
|
||||
(left.id(), right.id())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_span_gives_each_child_the_width_it_asked_for() {
|
||||
let mut h = Harness::new((400, 200));
|
||||
let (left, right) = two_rects(&mut h);
|
||||
|
||||
assert_eq!(corners(&h, &left), (0.0, 0.0, 100.0, 200.0));
|
||||
assert_eq!(corners(&h, &right), (100.0, 0.0, 400.0, 200.0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resizing_relays_out_against_the_new_output() {
|
||||
let mut h = Harness::new((400, 200));
|
||||
let (left, right) = two_rects(&mut h);
|
||||
|
||||
h.resize((800, 100));
|
||||
assert!(h.needs_redraw());
|
||||
h.frame();
|
||||
|
||||
assert_eq!(corners(&h, &left), (0.0, 0.0, 100.0, 100.0));
|
||||
assert_eq!(corners(&h, &right), (100.0, 0.0, 800.0, 100.0));
|
||||
}
|
||||
Reference in new issue
Block a user