Make Iris layout dependencies explicit
This commit is contained in:
1 parent
2bc0ff1866
commit
3ae034a47b
25 files changed
+609
-186
No files matched your search
+17
-10
@@ -73,9 +73,13 @@ fn a_button_over_a_list_scrolls_the_list_and_still_clicks() {
|
||||
let clicked = Rc::new(Cell::new(false));
|
||||
{
|
||||
let scrolled = scrolled.clone();
|
||||
rsc.register_event(list_weak, CursorSense::Scroll, move |_ctx, _rsc| {
|
||||
scrolled.set(true);
|
||||
});
|
||||
rsc.register_event(
|
||||
list_weak,
|
||||
CursorSense::Scroll(Axis::Y),
|
||||
move |_ctx, _rsc| {
|
||||
scrolled.set(true);
|
||||
},
|
||||
);
|
||||
}
|
||||
{
|
||||
let clicked = clicked.clone();
|
||||
@@ -461,10 +465,10 @@ fn taking_the_pointer_cancels_everyone_else_tracking_the_press() {
|
||||
events: EventManager::default(),
|
||||
};
|
||||
|
||||
// The bystander *contains* the capturer, which is the real shape: a
|
||||
// transcript's `LazySpan` and one row's own text both track the same
|
||||
// press, and a `Stack`'s siblings would be on separate layers where
|
||||
// only the topmost is dispatched to at all.
|
||||
// The bystander contains the capturer on a lower visual layer: the
|
||||
// shape of a vertical transcript scroller with a higher horizontal
|
||||
// scroller inside one row. Both observe the undecided press, then only
|
||||
// the recognizer matching its direction may consume it.
|
||||
let capturer = rsc.ui.widgets.add_strong(Rect::new(UiColor::WHITE));
|
||||
let capturer_weak = capturer.weak();
|
||||
let bystander = rsc.ui.widgets.add_strong(Stack {
|
||||
@@ -478,7 +482,7 @@ fn taking_the_pointer_cancels_everyone_else_tracking_the_press() {
|
||||
let capturer_saw = capturer_saw.clone();
|
||||
rsc.register_event(
|
||||
capturer_weak,
|
||||
CursorSense::drag_senses(),
|
||||
CursorSense::drag(Axis::X),
|
||||
move |ctx, _rsc| {
|
||||
capturer_saw.set(capturer_saw.get() + 1);
|
||||
if matches!(ctx.data.sense, CursorSense::Pressing(_)) {
|
||||
@@ -493,7 +497,7 @@ fn taking_the_pointer_cancels_everyone_else_tracking_the_press() {
|
||||
let (cancelled, ended) = (cancelled.clone(), ended.clone());
|
||||
rsc.register_event(
|
||||
bystander_weak,
|
||||
CursorSense::drag_senses(),
|
||||
CursorSense::drag(Axis::Y),
|
||||
move |ctx, _rsc| match ctx.data.sense {
|
||||
CursorSense::Cancel => cancelled.set(cancelled.get() + 1),
|
||||
CursorSense::PressEnd(_) | CursorSense::Drop => ended.set(ended.get() + 1),
|
||||
@@ -515,7 +519,7 @@ fn taking_the_pointer_cancels_everyone_else_tracking_the_press() {
|
||||
render.update(&root, &mut rsc);
|
||||
assert_eq!(cancelled.get(), 0, "nothing has captured yet");
|
||||
|
||||
let mut moved = cursor_at((50.0, 20.0).into());
|
||||
let mut moved = cursor_at((80.0, 50.0).into());
|
||||
moved.buttons.left = ActivationState::On;
|
||||
render.run_sensors(&mut rsc, &mut state, moved, win);
|
||||
render.update(&root, &mut rsc);
|
||||
@@ -590,6 +594,9 @@ fn a_drag_pans_whichever_nested_scroll_area_owns_its_axis() {
|
||||
record.set(Some(id));
|
||||
id
|
||||
})
|
||||
// The horizontal area is visually above the vertical one, as
|
||||
// it is when a raised transcript row contains sideways content.
|
||||
.layer_offset(1)
|
||||
.scrollable(Axis::Y, Pin::Start)
|
||||
.add_strong(&mut rsc);
|
||||
let inner = seen.get().unwrap();
|
||||
|
||||
Reference in new issue
Block a user