Subwindow shortcut
This commit is contained in:
parent
baf7589aee
commit
0aafa08ddb
@ -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 slider::{labeled_slider, slider};
|
||||
pub use subwindow::subwindow;
|
||||
|
||||
39
utility/src/gui/subwindow.rs
Normal file
39
utility/src/gui/subwindow.rs
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user