polyhorn_ios/raw/
platform.rs1use polyhorn_core::EventLoop;
2use polyhorn_ui::layout::LayoutTree;
3
4use super::{
5 CommandBuffer, Compositor, ContainerID, Environment, OpaqueComponent, OpaqueContainer,
6};
7
8pub enum Platform {}
10
11impl polyhorn_core::Platform for Platform {
12 type CommandBuffer = CommandBuffer;
13 type Component = OpaqueComponent;
14 type Compositor = Compositor;
15 type Container = OpaqueContainer;
16 type ContainerID = ContainerID;
17 type Environment = Environment;
18
19 fn with_compositor<F>(container: Self::Container, task: F) -> polyhorn_core::Disposable
20 where
21 F: FnOnce(Self::ContainerID, Self::Compositor, EventLoop) -> polyhorn_core::Disposable
22 + Send
23 + 'static,
24 {
25 use std::sync::{Arc, RwLock};
26
27 let layout_tree = Arc::new(RwLock::new(LayoutTree::new()));
28 let mut compositor = Compositor::new(layout_tree);
29 let id = compositor.track(container);
30
31 std::thread::Builder::new()
32 .name("com.glacyr.Polyhorn".to_owned())
33 .spawn(move || {
34 let mut runtime = tokio::runtime::Runtime::new().unwrap();
35 runtime.block_on(async move {
36 let (evloop, handler) = EventLoop::new();
37 let _compositor = compositor.clone();
38 let _result = task(id, compositor, evloop);
39
40 handler.main().await;
41 })
42 })
43 .unwrap();
44
45 struct Abc;
46
47 impl Drop for Abc {
48 fn drop(&mut self) {}
49 }
50
51 polyhorn_core::Disposable::new(Abc)
52 }
53}