use uzor::docking::panels::DockPanel;
use uzor::framework::app::{App, AppConfig};
use uzor::framework::builder::AppBuilder;
use uzor_render_hub::{RenderBackend, RenderSurfaceFactory};
use crate::manager::{Manager, ManagerError};
pub trait AppRun {
fn run(self) -> Result<(), ManagerError>;
}
impl<A, P> AppRun for AppBuilder<A, P>
where
A: App<P>,
P: DockPanel + Default + Clone + 'static,
{
fn run(self) -> Result<(), ManagerError> {
let built = self.build().map_err(ManagerError::Build)?;
let _single_instance_guard = built
.config
.single_instance
.as_deref()
.map(crate::utils::single_instance::single_instance);
Manager::from_built(built).run()
}
}
pub fn run_closure<P, F>(
ui: F,
config: AppConfig,
backend: RenderBackend,
factory: Box<dyn RenderSurfaceFactory>,
) -> Result<(), ManagerError>
where
P: DockPanel + Default + Clone + Send + Sync + 'static,
F: FnMut(&mut uzor::layout::LayoutManager<P>, &mut dyn uzor::render::RenderContext)
+ 'static,
{
use uzor::framework::app::ClosureApp;
let mut mgr = Manager::new(
ClosureApp::<P, F>::new(ui),
config,
backend,
None,
);
mgr.set_surface_factory(factory);
use uzor::framework::multi_window::{WindowKey, WindowSpec};
mgr.queue_window_spec(
WindowSpec::new(WindowKey::new("main"), "uzor")
.size(1280, 720),
);
mgr.run()
}