Skip to main content

ferroui_base/rendering/composition/server/
server_composition_gradient_stop.rs

1use super::{
2    impl_server_render_resource, IAnimatedServerObject, IServerObject, IServerRenderResource, ServerCompositor,
3    ServerRenderResource,
4};
5use crate::media::{Color, IGradientStop};
6use crate::rendering::composition::generated::{ServerCompositionGradientStopHooks, ServerCompositionGradientStopProps};
7use crate::rendering::composition::transport::BatchStreamReader;
8use std::any::{Any, TypeId};
9use std::rc::{Rc, Weak};
10use std::time::Duration;
11
12/// The server-side counterpart of a
13/// [`CompositionGradientStop`](crate::rendering::composition::CompositionGradientStop).
14pub struct ServerCompositionGradientStop {
15    base: ServerRenderResource,
16    props: ServerCompositionGradientStopProps,
17}
18
19impl ServerCompositionGradientStop {
20    /// Creates the stop, active: the UI-thread stop activates its server
21    /// object when it is created (`InitializeDefaultsExtra`), which is here
22    /// done when the server object is created for it.
23    pub fn new(compositor: &Rc<ServerCompositor>) -> Rc<ServerCompositionGradientStop> {
24        let stop = Rc::new_cyclic(|this: &Weak<ServerCompositionGradientStop>| ServerCompositionGradientStop {
25            base: ServerRenderResource::new(
26                compositor,
27                this.clone() as Weak<dyn IAnimatedServerObject>,
28                this.clone() as Weak<dyn IServerRenderResource>,
29            ),
30            props: ServerCompositionGradientStopProps::new(),
31        });
32        stop.base.object().activate();
33        stop
34    }
35
36    /// The properties of the stop.
37    pub fn props(&self) -> &ServerCompositionGradientStopProps {
38        &self.props
39    }
40
41    pub fn is_disposed(&self) -> bool {
42        self.base.is_disposed()
43    }
44}
45
46impl_server_render_resource!(
47    ServerCompositionGradientStop,
48    base,
49    composition_property: ServerCompositionGradientStopProps::get_composition_property
50);
51
52impl ServerCompositionGradientStopHooks for ServerCompositionGradientStop {}
53
54impl IServerObject for ServerCompositionGradientStop {
55    fn deserialize_changes_core(&self, reader: &mut BatchStreamReader<'_>, committed_at: Duration) {
56        self.props.deserialize_changes_core(self, reader, committed_at);
57    }
58
59    fn values_invalidated(&self) {
60        self.base.core().invalidated(self);
61    }
62
63    fn dispose(&self) {
64        self.base.core().dispose();
65    }
66
67    fn as_render_resource(self: Rc<Self>) -> Option<Rc<dyn IServerRenderResource>> {
68        Some(self)
69    }
70
71    fn as_animated(self: Rc<Self>) -> Option<Rc<dyn IAnimatedServerObject>> {
72        Some(self)
73    }
74
75    fn as_gradient_stop(self: Rc<Self>) -> Option<Rc<dyn IGradientStop>> {
76        Some(self)
77    }
78
79    fn get_props(&self, type_id: TypeId) -> Option<&dyn Any> {
80        self.props.find_props(type_id)
81    }
82
83    fn as_any(&self) -> &dyn Any {
84        self
85    }
86
87    fn into_any_rc(self: Rc<Self>) -> Rc<dyn Any> {
88        self
89    }
90}
91
92impl IGradientStop for ServerCompositionGradientStop {
93    fn color(&self) -> Color {
94        self.props.color()
95    }
96
97    fn offset(&self) -> f64 {
98        self.props.offset()
99    }
100}