use std::marker::PhantomData;
use crate::internal_prelude::*;
use crate::config::ScreenMetrics;
use crate::node::Buildable;
use crate::window::Window;
pub struct Builder<R: Buildable> {
pub(crate) sandbox: Weak<Sandbox>,
_phantom: PhantomData<R>,
}
#[derive(Clone)]
pub struct Sandbox {
screen_metrics: ScreenMetrics,
window: Arc<Window>,
}
impl Sandbox {
pub fn new(screen_metrics: ScreenMetrics) -> Arc<Sandbox> {
Arc::new_cyclic(|sandbox_weak| -> Sandbox {
let win = Window::new(sandbox_weak.clone());
Sandbox {
screen_metrics,
window: win,
}
})
}
pub fn window(&self) -> Arc<Window> {
self.window.clone()
}
pub fn builder<T: Buildable>(self: &Arc<Self>) -> Builder<T> {
Builder {
sandbox: Arc::downgrade(self),
_phantom: PhantomData,
}
}
}