Skip to main content

ferroui_base/rendering/composition/server/
server_composition_simple_transform.rs

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