ferroui_base/rendering/composition/server/
server_composition_gradient_stop.rs1use 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
12pub struct ServerCompositionGradientStop {
15 base: ServerRenderResource,
16 props: ServerCompositionGradientStopProps,
17}
18
19impl ServerCompositionGradientStop {
20 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 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}