Include popups and tooltips in `Harness::fit_contents` (#7556)
This makes `Harness::fit_contents` also use popups and tooltips to compute the size of the contents.
This commit is contained in:
parent
9150b9342d
commit
48d903d879
|
|
@ -276,14 +276,39 @@ impl<'a, State> Harness<'a, State> {
|
|||
self.output = output;
|
||||
}
|
||||
|
||||
/// Calculate the rect that includes all popups and tooltips.
|
||||
fn compute_total_rect_with_popups(&self) -> Option<Rect> {
|
||||
// Start with the standard response rect
|
||||
let mut used = if let Some(response) = self.response.as_ref() {
|
||||
response.rect
|
||||
} else {
|
||||
return None;
|
||||
};
|
||||
|
||||
// Add all visible areas from other orders (popups, tooltips, etc.)
|
||||
self.ctx.memory(|mem| {
|
||||
mem.areas()
|
||||
.visible_layer_ids()
|
||||
.into_iter()
|
||||
.filter(|layer_id| layer_id.order != egui::Order::Background)
|
||||
.filter_map(|layer_id| mem.area_rect(layer_id.id))
|
||||
.for_each(|area_rect| used |= area_rect);
|
||||
});
|
||||
|
||||
Some(used)
|
||||
}
|
||||
|
||||
/// Resize the test harness to fit the contents. This only works when creating the Harness via
|
||||
/// [`Harness::new_ui`] / [`Harness::new_ui_state`] or
|
||||
/// [`HarnessBuilder::build_ui`] / [`HarnessBuilder::build_ui_state`].
|
||||
pub fn fit_contents(&mut self) {
|
||||
self._step(true);
|
||||
if let Some(response) = &self.response {
|
||||
self.set_size(response.rect.size());
|
||||
|
||||
// Calculate size including all content (main UI + popups + tooltips)
|
||||
if let Some(rect) = self.compute_total_rect_with_popups() {
|
||||
self.set_size(rect.size());
|
||||
}
|
||||
|
||||
self.run_ok();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:025942c144891b8862bf931385824e0484e60f4e7766f5d4401511c72ff20756
|
||||
size 2975
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:c267530452adb4f1ed1440df476d576ef4c2d96e6c58068bb57fed4615f5e113
|
||||
size 4453
|
||||
|
|
@ -16,6 +16,28 @@ fn test_shrink() {
|
|||
harness.snapshot("test_shrink");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_tooltip() {
|
||||
let mut harness = Harness::new_ui(|ui| {
|
||||
ui.label("Hello, world!");
|
||||
ui.separator();
|
||||
ui.label("This is a test")
|
||||
.on_hover_text("This\nis\na\nvery\ntall\ntooltip!");
|
||||
});
|
||||
|
||||
harness.fit_contents();
|
||||
|
||||
#[cfg(all(feature = "snapshot", feature = "wgpu"))]
|
||||
harness.snapshot("test_tooltip_hidden");
|
||||
|
||||
harness.get_by_label("This is a test").hover();
|
||||
harness.run_ok();
|
||||
harness.fit_contents();
|
||||
|
||||
#[cfg(all(feature = "snapshot", feature = "wgpu"))]
|
||||
harness.snapshot("test_tooltip_shown");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_modifiers() {
|
||||
#[derive(Default)]
|
||||
|
|
|
|||
Loading…
Reference in New Issue