Place a scroll's fitting content in the viewport, not in the window
A scroll that has not been scrolled and whose content fits asked for its content box as `Part::From(UiSpan::FULL)`. A `Part::From` span is in window lengths, so `rel(1.0)` in one is the whole window rather than the whole box, and the content landed in a window-tall box anchored at the viewport's start -- 50 px low for a 300 px viewport in a 400 px window. Saying the whole of the box as `Part::All` is the one expression that cannot mean anything else, and it is also the place the child was already asked in, so the placement becomes a no-op.
This commit is contained in:
1 parent
a30971e4c5
commit
e8a5792dcb
2 files changed
+24
-7
No files matched your search
@@ -145,3 +145,19 @@ fn a_clipping_widget_reporting_more_than_its_box_is_caught() {
|
||||
h.set_root(clipper);
|
||||
h.frame();
|
||||
}
|
||||
|
||||
/// Content that fits sits in the viewport, not in a box of the window's
|
||||
/// length anchored at the viewport's start. `Part::From` takes window
|
||||
/// lengths, so a `rel(1.0)` span in one is the window, and only a scroll
|
||||
/// filling the window would land right.
|
||||
#[test]
|
||||
fn content_that_fits_is_placed_in_the_viewport_and_not_in_the_window() {
|
||||
let mut h = Harness::new((400, 400));
|
||||
let head = rect(Color::RED).height(100).add(&mut h.rsc);
|
||||
let inner = rect(Color::BLUE).height(50).add(&mut h.rsc);
|
||||
let scroll = Scroll::new(inner.add_strong(&mut h.rsc), Axis::Y).add(&mut h.rsc);
|
||||
h.set_root((head, scroll).span(Dir::DOWN));
|
||||
|
||||
assert_corners!(h, scroll, (0, 100), (400, 400));
|
||||
assert_corners!(h, inner, (0, 225), (400, 275));
|
||||
}
|
||||
Reference in new issue
Block a user