Track retained layout validity explicitly
This commit is contained in:
1 parent
691e3eb23c
commit
29c7881c8a
25 files changed
+836
-795
No files matched your search
@@ -296,3 +296,46 @@ fn a_span_placed_once_in_a_box_its_answer_decided() {
|
||||
}
|
||||
assert!(wrong.is_empty(), "{}", wrong.join("\n"));
|
||||
}
|
||||
|
||||
/// Reports a width derived from the box it is asked in. Reading through the
|
||||
/// painter is its declaration that the answer holds for that width only.
|
||||
struct Wider {
|
||||
extra: f32,
|
||||
}
|
||||
|
||||
impl Widget for Wider {
|
||||
fn draw(&mut self, painter: &mut Painter) -> Size {
|
||||
Size {
|
||||
x: Len::px(painter.px_len(Axis::X) + self.extra),
|
||||
y: Len::LEFTOVER,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn plant_wider(h: &mut Harness, extra: f32) -> (WeakWidget<Wider>, WidgetId) {
|
||||
let content = Wider { extra }.add(&mut h.rsc);
|
||||
let scroll = Scroll::new(content.add_strong(&mut h.rsc), Axis::X).add(&mut h.rsc);
|
||||
let root = Aligned {
|
||||
inner: scroll.add_strong(&mut h.rsc),
|
||||
align: Align {
|
||||
x: Some(AxisAlign::Neg),
|
||||
y: None,
|
||||
},
|
||||
}
|
||||
.add(&mut h.rsc);
|
||||
h.set_root(root);
|
||||
(content, scroll.id())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_scrolls_retained_answer_is_the_one_a_cold_layout_asks_for() {
|
||||
let mut warm = Harness::new((100, 100));
|
||||
let (content, scroll) = plant_wider(&mut warm, 50.0);
|
||||
warm.rsc[content].extra = 70.0;
|
||||
warm.frame();
|
||||
|
||||
let mut cold = Harness::new((100, 100));
|
||||
let (_, cold_scroll) = plant_wider(&mut cold, 70.0);
|
||||
|
||||
assert_eq!(warm.region(&scroll), cold.region(&cold_scroll));
|
||||
}
|
||||
Reference in new issue
Block a user