use egui::Widget;
pub type BoxedWidget<'a> = Box<dyn FnOnce(&mut egui::Ui) -> egui::Response + Send + Sync + 'a>;
pub type BoxedWidgetLocal<'a> = Box<dyn FnOnce(&mut egui::Ui) -> egui::Response + 'a>;
pub trait BoxedWidgetExt<'a> {
fn boxed(self) -> BoxedWidget<'a>;
}
impl<'a, T: 'a> BoxedWidgetExt<'a> for T
where
T: Widget + Send + Sync,
{
fn boxed(self) -> BoxedWidget<'a> {
Box::new(move |ui: &mut egui::Ui| ui.add(self))
}
}
pub trait BoxedWidgetLocalExt<'a> {
fn boxed_local(self) -> BoxedWidgetLocal<'a>;
}
impl<'a, T: 'a> BoxedWidgetLocalExt<'a> for T
where
T: Widget,
{
fn boxed_local(self) -> BoxedWidgetLocal<'a> {
Box::new(move |ui: &mut egui::Ui| ui.add(self))
}
}