Skip to main content

ferroui_base/rendering/composition/server/
server_composition_simple_geometry.rs

1use super::{impl_simple_server_render_resource, IServerObject, IServerRenderResource, ServerCompositor, SimpleServerRenderResource};
2use crate::platform::IGeometryImpl;
3use crate::rendering::composition::drawing::IRenderDataGeometry;
4use crate::rendering::composition::generated::{ServerCompositionSimpleGeometryHooks, ServerCompositionSimpleGeometryProps};
5use crate::rendering::composition::transport::BatchStreamReader;
6use std::any::{Any, TypeId};
7use std::rc::Rc;
8use std::sync::Arc;
9use std::time::Duration;
10
11/// The server-side counterpart of a geometry object: the platform geometry
12/// the object currently resolves to.
13pub struct ServerCompositionSimpleGeometry {
14    base: SimpleServerRenderResource,
15    props: ServerCompositionSimpleGeometryProps,
16}
17
18impl ServerCompositionSimpleGeometry {
19    pub fn new(compositor: &Rc<ServerCompositor>) -> Rc<ServerCompositionSimpleGeometry> {
20        Rc::new_cyclic(|this| {
21            let this: std::rc::Weak<ServerCompositionSimpleGeometry> = this.clone();
22            ServerCompositionSimpleGeometry {
23                base: SimpleServerRenderResource::new(compositor, this),
24                props: ServerCompositionSimpleGeometryProps::new(),
25            }
26        })
27    }
28
29    pub fn is_disposed(&self) -> bool {
30        self.base.is_disposed()
31    }
32
33    pub fn geometry_impl(&self) -> Option<Arc<dyn IGeometryImpl>> {
34        self.props.geometry_impl()
35    }
36
37    pub fn set_geometry_impl(&self, value: Option<Arc<dyn IGeometryImpl>>) {
38        self.props.set_geometry_impl(self, value)
39    }
40}
41
42impl_simple_server_render_resource!(ServerCompositionSimpleGeometry, base);
43
44impl ServerCompositionSimpleGeometryHooks for ServerCompositionSimpleGeometry {}
45
46impl IServerObject for ServerCompositionSimpleGeometry {
47    fn deserialize_changes_core(&self, reader: &mut BatchStreamReader<'_>, committed_at: Duration) {
48        self.props.deserialize_changes_core(self, reader, committed_at);
49    }
50
51    fn values_invalidated(&self) {
52        self.base.core().invalidated(self);
53    }
54
55    fn dispose(&self) {
56        self.base.core().dispose();
57    }
58
59    fn as_render_resource(self: Rc<Self>) -> Option<Rc<dyn IServerRenderResource>> {
60        Some(self)
61    }
62
63    fn as_render_data_geometry(self: Rc<Self>) -> Option<Rc<dyn IRenderDataGeometry>> {
64        Some(self)
65    }
66
67    fn get_props(&self, type_id: TypeId) -> Option<&dyn Any> {
68        self.props.find_props(type_id)
69    }
70
71    fn as_any(&self) -> &dyn Any {
72        self
73    }
74
75    fn into_any_rc(self: Rc<Self>) -> Rc<dyn Any> {
76        self
77    }
78}
79
80impl IRenderDataGeometry for ServerCompositionSimpleGeometry {
81    fn geometry_impl(&self) -> Option<Arc<dyn IGeometryImpl>> {
82        self.props.geometry_impl()
83    }
84}