Add close_button option to test_viewports (#4907)

This make the test excercise the window recreation logic, that resulted
in several bugs - see #4862

Adds a check box that turns the close button on and off for child
windows
This commit is contained in:
pm100 2024-08-25 23:49:25 -07:00 committed by GitHub
parent 9a1e358a14
commit 06f88e12b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 9 deletions

View File

@ -61,7 +61,7 @@ impl ViewportState {
}))
}
pub fn show(vp_state: Arc<RwLock<Self>>, ctx: &egui::Context) {
pub fn show(vp_state: Arc<RwLock<Self>>, ctx: &egui::Context, close_button: bool) {
if !vp_state.read().visible {
return;
}
@ -71,6 +71,7 @@ impl ViewportState {
let viewport = ViewportBuilder::default()
.with_title(&title)
.with_close_button(close_button)
.with_inner_size([500.0, 500.0]);
if immediate {
@ -80,7 +81,7 @@ impl ViewportState {
vp_state.visible = false;
}
show_as_popup(ctx, class, &title, vp_id.into(), |ui: &mut egui::Ui| {
generic_child_ui(ui, &mut vp_state);
generic_child_ui(ui, &mut vp_state, close_button);
});
});
} else {
@ -101,7 +102,7 @@ impl ViewportState {
ui.label(format!("Callback has been reused {current_count} times"));
*count.write() += 1;
generic_child_ui(ui, &mut vp_state);
generic_child_ui(ui, &mut vp_state, close_button);
},
);
});
@ -118,6 +119,7 @@ impl ViewportState {
pub struct App {
top: Vec<Arc<RwLock<ViewportState>>>,
close_button: bool,
}
impl Default for App {
@ -151,6 +153,7 @@ impl Default for App {
],
),
],
close_button: true,
}
}
}
@ -169,8 +172,8 @@ impl eframe::App for App {
}
ctx.set_embed_viewports(embed_viewports);
}
generic_ui(ui, &self.top);
ui.checkbox(&mut self.close_button, "with close button");
generic_ui(ui, &self.top, self.close_button);
});
}
}
@ -191,7 +194,7 @@ fn show_as_popup(
}
}
fn generic_child_ui(ui: &mut egui::Ui, vp_state: &mut ViewportState) {
fn generic_child_ui(ui: &mut egui::Ui, vp_state: &mut ViewportState, close_button: bool) {
ui.horizontal(|ui| {
ui.label("Title:");
if ui.text_edit_singleline(&mut vp_state.title).changed() {
@ -203,10 +206,10 @@ fn generic_child_ui(ui: &mut egui::Ui, vp_state: &mut ViewportState) {
}
});
generic_ui(ui, &vp_state.children);
generic_ui(ui, &vp_state.children, close_button);
}
fn generic_ui(ui: &mut egui::Ui, children: &[Arc<RwLock<ViewportState>>]) {
fn generic_ui(ui: &mut egui::Ui, children: &[Arc<RwLock<ViewportState>>], close_button: bool) {
let container_id = ui.id();
let ctx = ui.ctx().clone();
@ -290,7 +293,7 @@ fn generic_ui(ui: &mut egui::Ui, children: &[Arc<RwLock<ViewportState>>]) {
*visible
};
if visible {
ViewportState::show(child.clone(), &ctx);
ViewportState::show(child.clone(), &ctx, close_button);
}
}
}