Settle growing layout branches in one frame
This commit is contained in:
1 parent
e212ed8d02
commit
5ece49b8d9
7 files changed
+139
-33
No files matched your search
@@ -258,17 +258,15 @@ fn a_newline_leaves_the_caret_inside_the_composers_padding() {
|
||||
screen.composer.field.edit(&mut h.rsc).insert("a\n");
|
||||
h.frame(PHONE_FRAME_MS);
|
||||
}
|
||||
let message = h
|
||||
.render
|
||||
.debug(h.rsc.widgets(), "Message")
|
||||
.find(|a| !a.primitives.is_empty())
|
||||
.expect("the composer field is drawn");
|
||||
// The caret is the last primitive `TextEdit::draw` emits.
|
||||
let caret = {
|
||||
let slot = *h
|
||||
.render
|
||||
.debug(h.rsc.widgets(), "Message")
|
||||
.flat_map(|a| a.primitives.iter().map(|p| p.slot))
|
||||
.collect::<Vec<_>>()
|
||||
.last()
|
||||
.expect("the focused field draws a caret");
|
||||
h.render.primitive_corners(slot, &h.rsc)
|
||||
};
|
||||
let caret = h
|
||||
.render
|
||||
.primitive_corners(message.primitives.last().unwrap().slot, &h.rsc);
|
||||
// The bar sits directly on the IME, so its inside edge is one
|
||||
// `FIELD_PAD_DP` above `height - ime`. Stated in pixels rather than
|
||||
// read back from the composer, which is the thing under test.
|
||||
@@ -280,4 +278,22 @@ fn a_newline_leaves_the_caret_inside_the_composers_padding() {
|
||||
and its padding is {padding}px",
|
||||
caret.bot_right.y,
|
||||
);
|
||||
|
||||
// The old assertion only guarded the last line. A viewport one line
|
||||
// shorter than the field still kept that caret above the bottom while
|
||||
// moving the first line above the bar's mask, visibly slicing it off.
|
||||
let mask = h.rsc.ui.masks[message.mask.idx()];
|
||||
let bar = h.render.primitive_corners(mask.primitive, &h.rsc);
|
||||
let visible_content_top = message
|
||||
.primitives
|
||||
.iter()
|
||||
.map(|p| h.render.primitive_corners(p.slot, &h.rsc))
|
||||
.filter(|r| r.bot_right.y > bar.top_left.y)
|
||||
.map(|r| r.top_left.y)
|
||||
.fold(f32::INFINITY, f32::min);
|
||||
assert!(
|
||||
visible_content_top > bar.top_left.y,
|
||||
"the composer's first visible line is clipped above its bar: content starts at {visible_content_top}, bar starts at {}",
|
||||
bar.top_left.y,
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user