use std::any::Any;
#[cfg(feature = "winit")]
use winit::event_loop::{ControlFlow, EventLoop};
use crate::error::UiResult;
#[cfg(feature = "winit")]
use crate::window::winit_app::WInitApplication;
use crate::ui::Ui;
#[cfg(not(feature = "winit"))]
use crate::window::application::Application;
use crate::WindowAttribute;
pub mod context;
pub trait App: Any + 'static {
fn draw(&mut self, ui: &mut Ui);
fn update(&mut self, _: &mut Ui) {}
fn window_attributes(&self) -> WindowAttribute {
WindowAttribute::default()
}
fn run(self) -> UiResult<()>
where
Self: Sized,
{
#[cfg(feature = "winit")]
{
let event_loop = EventLoop::with_user_event().build()?;
let proxy_event = event_loop.create_proxy();
event_loop.set_control_flow(ControlFlow::Wait);
let mut application = WInitApplication::new();
application.set_app(Some(self));
application.set_proxy_event(Some(proxy_event));
event_loop.run_app(&mut application)?;
}
#[cfg(not(feature = "winit"))]
{
let app = Application::new(self)?;
app.run()?;
}
Ok(())
}
}