Subwindow shortcut

This commit is contained in:
Andrew Golovashevich 2026-02-15 20:51:49 +03:00
parent baf7589aee
commit 0aafa08ddb
2 changed files with 44 additions and 3 deletions

View File

@ -1,7 +1,9 @@
mod boot;
pub mod lengths_table;
pub mod render;
mod slider;
mod boot;
mod subwindow;
pub use slider::{slider, labeled_slider};
pub use boot::boot_eframe;
pub use boot::boot_eframe;
pub use slider::{labeled_slider, slider};
pub use subwindow::subwindow;

View File

@ -0,0 +1,39 @@
use eframe::egui;
use eframe::egui::{Frame, Ui, ViewportBuilder};
pub fn subwindow(
ui: &mut Ui,
id: &str,
title: &str,
extra_settings: impl FnOnce(ViewportBuilder) -> ViewportBuilder,
mut content: impl FnMut(&mut Ui),
) -> Response {
let id = egui::ViewportId::from_hash_of(id);
let vb = extra_settings(ViewportBuilder::default().with_title(title));
let closed = ui.ctx().show_viewport_immediate(id, vb, |ui, _| {
egui::CentralPanel::default()
.frame(Frame::default().inner_margin(0.0))
.show(ui, |ui| content(ui));
return ui.input(|i| i.viewport().close_requested());
});
return Response { closed };
}
pub struct Response {
closed: bool,
}
impl Response {
pub fn close_requested(&self) -> bool {
return self.closed;
}
pub fn on_close(&self, cb: impl FnOnce()) {
if self.closed {
cb()
}
}
}