Replace placement calls with region nodes
This commit is contained in:
1 parent
f437495309
commit
71c9c39523
23 files changed
+374
-170
No files matched your search
+37
-11
@@ -119,8 +119,8 @@ fn a_resize_lands_where_a_cold_start_would() {
|
||||
#[test]
|
||||
fn a_fixed_box_is_drawn_again_rather_than_stretched() {
|
||||
let mut h = Harness::new((400, 400));
|
||||
// The panel fills a stack sized by its sibling, so it is drawn in the
|
||||
// whole box and then placed in the shorter one. Reusing it in that fixed
|
||||
// The panel fills a stack sized by its sibling, so it is first asked in
|
||||
// the whole box and then given the shorter one. Reusing it in that fixed
|
||||
// box afterwards would leave it whatever height it happened to have.
|
||||
let panel = rect(Color::BLUE).add(&mut h.rsc);
|
||||
let leaf = rect(Color::RED).height(100).add(&mut h.rsc);
|
||||
@@ -142,15 +142,15 @@ fn a_moved_subtree_takes_its_children_with_it() {
|
||||
let mut h = Harness::new((400, 400));
|
||||
let first = rect(Color::RED).height(40).add(&mut h.rsc);
|
||||
let inner = rect(Color::BLUE).add(&mut h.rsc);
|
||||
let row = inner.pad(10).height(40).add(&mut h.rsc);
|
||||
let row = inner.pad(10).height(40).region_node().add(&mut h.rsc);
|
||||
h.set_root((first, row).span(Dir::DOWN));
|
||||
assert_corners!(h, inner, (10, 50), (390, 70));
|
||||
|
||||
h.rsc[first].y = Some(Len::px(80));
|
||||
h.frame();
|
||||
|
||||
// The row is the same shape somewhere else, so one slot moved it and
|
||||
// `inner`'s own region was never rewritten.
|
||||
// The row opted into one movable region, so its descendants follow one
|
||||
// entry rather than having their primitive regions rewritten.
|
||||
assert_corners!(h, inner, (10, 90), (390, 110));
|
||||
}
|
||||
|
||||
@@ -202,21 +202,29 @@ fn a_box_with_a_fixed_length_can_be_stretched_on_its_other_axis() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn only_a_container_that_places_its_children_lengthens_the_chain() {
|
||||
fn only_a_region_node_lengthens_the_chain_and_it_can_be_removed() {
|
||||
let mut h = Harness::new((400, 200));
|
||||
let leaf = rect(Color::BLUE).add(&mut h.rsc);
|
||||
// Four widgets between the span and the leaf, none of which places what
|
||||
// it draws, so all of them share the span's slot.
|
||||
let buried = leaf.pad(4).pad(4).pad(4).pad(4).add(&mut h.rsc);
|
||||
let bar = rect(Color::RED).width(100).add(&mut h.rsc);
|
||||
h.set_root((bar, buried).span(Dir::RIGHT));
|
||||
|
||||
let slot = h.render.active[&leaf.id()].parent_move;
|
||||
let move_idx = h.render.active[&leaf.id()].parent_move;
|
||||
assert_eq!(h.render.moves.depth(move_idx), 1, "only the root region");
|
||||
|
||||
h.rsc.widgets_mut().set_region_node(buried, true);
|
||||
h.frame();
|
||||
let move_idx = h.render.active[&leaf.id()].parent_move;
|
||||
assert_eq!(
|
||||
h.render.moves.depth(slot),
|
||||
h.render.moves.depth(move_idx),
|
||||
2,
|
||||
"the span above the leaf, and the root the window is held in"
|
||||
"the opted-in widget's region and the root region"
|
||||
);
|
||||
|
||||
h.rsc.widgets_mut().set_region_node(buried, false);
|
||||
h.frame();
|
||||
let move_idx = h.render.active[&leaf.id()].parent_move;
|
||||
assert_eq!(h.render.moves.depth(move_idx), 1);
|
||||
}
|
||||
|
||||
/// A span that sizes from its children passes their `leftover` weight up
|
||||
@@ -412,3 +420,21 @@ fn only_a_pure_leftover_child_disappears_when_nothing_is_left() {
|
||||
// is leftover is omitted.
|
||||
assert_corners!(h, mixed, (100, 0), (120, 20));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn leftover_children_disappear_at_the_exact_fixed_content_boundary() {
|
||||
let mut h = Harness::new((100, 100));
|
||||
let first = rect(Color::RED).height(90).add(&mut h.rsc);
|
||||
let a = rect(Color::GREEN).add(&mut h.rsc);
|
||||
let b = rect(Color::BLUE).add(&mut h.rsc);
|
||||
let inner = (a, b).span(Dir::DOWN).gap(4).add(&mut h.rsc);
|
||||
h.set_root((first, inner).span(Dir::DOWN));
|
||||
assert!(h.region(&a).is_some());
|
||||
assert!(h.region(&b).is_some());
|
||||
|
||||
h.rsc[first].y = Some(Len::px(96.0));
|
||||
h.frame();
|
||||
|
||||
assert!(h.region(&a).is_none());
|
||||
assert!(h.region(&b).is_none());
|
||||
}
|
||||
Reference in new issue
Block a user