Skip to main content

ferroui_base/rendering/composition/generated/
composition_simple_brush.rs

1// @generated by scripts/generate_composition.py — do not edit
2
3//! `CompositionSimpleBrush` (server only).
4//!
5//! Schema attributes: internal.
6
7use bitflags::bitflags;
8use crate::RelativePoint;
9use crate::media::ITransform;
10use crate::rendering::composition::expressions::ExpressionVariant;
11use crate::rendering::composition::server::AsServerRenderResource;
12use crate::rendering::composition::server::CompositionProperty;
13use crate::rendering::composition::server::CompositionPropertyOf;
14use crate::rendering::composition::server::IServerPropertyHost;
15use crate::rendering::composition::server::ServerPropertyValue;
16use crate::rendering::composition::server::ServerResourceRef;
17use crate::rendering::composition::server::ServerValueChange;
18use crate::rendering::composition::server::props_of;
19use crate::rendering::composition::server::read_resource;
20use crate::rendering::composition::transport::BatchResource;
21use crate::rendering::composition::transport::BatchStreamReader;
22use crate::rendering::composition::transport::BatchStreamWriter;
23use crate::rendering::composition::transport::BatchValue;
24use crate::rendering::composition::transport::BatchValueReader;
25use std::any::Any;
26use std::any::TypeId;
27use std::cell::Cell;
28use std::cell::RefCell;
29use std::sync::OnceLock;
30use std::time::Duration;
31
32bitflags! {
33    /// The fields of `CompositionSimpleBrush` that changed since its last serialization.
34    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
35    pub struct CompositionSimpleBrushChangedFields: u8 {
36        const OPACITY = 1;
37        const TRANSFORM_ORIGIN = 2;
38        const TRANSFORM = 4;
39        const RELATIVE_TRANSFORM = 8;
40    }
41}
42
43impl BatchValue for CompositionSimpleBrushChangedFields {
44    #[inline]
45    fn write_to(&self, out: &mut Vec<u8>) {
46        self.bits().write_to(out);
47    }
48
49    #[inline]
50    fn read_from(input: &mut BatchValueReader<'_>) -> Self {
51        CompositionSimpleBrushChangedFields::from_bits_retain(u8::read_from(input))
52    }
53}
54
55/// The partial methods of `ServerCompositionSimpleBrush`: implemented by the class that embeds
56/// [`ServerCompositionSimpleBrushProps`]. Every hook defaults to doing nothing.
57pub trait ServerCompositionSimpleBrushHooks: IServerPropertyHost {
58    fn deserialize_changes_extra(&self, _reader: &mut BatchStreamReader<'_>) {}
59    fn on_fields_deserialized(&self, _changed: CompositionSimpleBrushChangedFields) {}
60
61    fn on_opacity_changed(&self) {}
62    fn on_opacity_changing(&self) {}
63
64    fn on_transform_origin_changed(&self) {}
65    fn on_transform_origin_changing(&self) {}
66
67    fn on_transform_changed(&self) {}
68    fn on_transform_changing(&self) {}
69
70    fn on_relative_transform_changed(&self) {}
71    fn on_relative_transform_changing(&self) {}
72}
73
74/// The server-side properties of `ServerCompositionSimpleBrush`.
75pub struct ServerCompositionSimpleBrushProps {
76    opacity: Cell<f64>,
77    transform_origin: Cell<RelativePoint>,
78    transform: RefCell<Option<ServerResourceRef<dyn ITransform>>>,
79    relative_transform: RefCell<Option<ServerResourceRef<dyn ITransform>>>,
80}
81
82impl Default for ServerCompositionSimpleBrushProps {
83    fn default() -> Self {
84        Self::new()
85    }
86}
87
88impl ServerCompositionSimpleBrushProps {
89    /// Creates the properties with every field at the default of its type; the
90    /// values of the UI thread arrive with the first batch.
91    pub fn new() -> Self {
92        Self {
93            opacity: Cell::new(Default::default()),
94            transform_origin: Cell::new(Default::default()),
95            transform: RefCell::new(None),
96            relative_transform: RefCell::new(None),
97        }
98    }
99
100    /// This block or the block of a base class, by type: what
101    /// `IServerObject::get_props` of the embedding class returns.
102    pub fn find_props(&self, type_id: TypeId) -> Option<&dyn Any> {
103        if type_id == TypeId::of::<Self>() {
104            return Some(self);
105        }
106        None
107    }
108
109    /// The composition property of `Opacity`.
110    pub fn id_of_opacity_property() -> &'static CompositionPropertyOf<f64> {
111        static PROPERTY: OnceLock<CompositionPropertyOf<f64>> = OnceLock::new();
112        PROPERTY.get_or_init(|| {
113            CompositionProperty::register::<ServerCompositionSimpleBrushProps, f64>(
114                "Opacity",
115                "ServerCompositionSimpleBrush",
116                |obj| props_of::<ServerCompositionSimpleBrushProps>(obj).opacity.get(),
117                |obj, v| props_of::<ServerCompositionSimpleBrushProps>(obj).opacity.set(v),
118                Some(|obj| ExpressionVariant::create(props_of::<ServerCompositionSimpleBrushProps>(obj).opacity.get())),
119                None,
120            )
121        })
122    }
123
124    /// `Opacity`.
125    pub fn opacity(&self) -> f64 {
126        self.opacity.get()
127    }
128
129    pub fn set_opacity(&self, host: &dyn ServerCompositionSimpleBrushHooks, value: f64) {
130        let old_value = self.opacity.get();
131        let mut changed = false;
132        if old_value.differs(&value) {
133            ServerCompositionSimpleBrushHooks::on_opacity_changing(host);
134            changed = true;
135        }
136        host.set_value(
137            Self::id_of_opacity_property().base(),
138            ServerValueChange {
139                equal: old_value.default_equals(&value),
140                old_resource: None,
141                new_resource: None,
142                assign: &mut || self.opacity.set(value),
143            },
144        );
145        if changed {
146            ServerCompositionSimpleBrushHooks::on_opacity_changed(host);
147        }
148    }
149
150    /// The composition property of `TransformOrigin`.
151    pub fn id_of_transform_origin_property() -> &'static CompositionPropertyOf<RelativePoint> {
152        static PROPERTY: OnceLock<CompositionPropertyOf<RelativePoint>> = OnceLock::new();
153        PROPERTY.get_or_init(|| {
154            CompositionProperty::register::<ServerCompositionSimpleBrushProps, RelativePoint>(
155                "TransformOrigin",
156                "ServerCompositionSimpleBrush",
157                |obj| props_of::<ServerCompositionSimpleBrushProps>(obj).transform_origin.get(),
158                |obj, v| props_of::<ServerCompositionSimpleBrushProps>(obj).transform_origin.set(v),
159                None,
160                None,
161            )
162        })
163    }
164
165    /// `TransformOrigin`.
166    pub fn transform_origin(&self) -> RelativePoint {
167        self.transform_origin.get()
168    }
169
170    pub fn set_transform_origin(&self, host: &dyn ServerCompositionSimpleBrushHooks, value: RelativePoint) {
171        let old_value = self.transform_origin.get();
172        let mut changed = false;
173        if old_value.differs(&value) {
174            ServerCompositionSimpleBrushHooks::on_transform_origin_changing(host);
175            changed = true;
176        }
177        host.set_value(
178            Self::id_of_transform_origin_property().base(),
179            ServerValueChange {
180                equal: old_value.default_equals(&value),
181                old_resource: None,
182                new_resource: None,
183                assign: &mut || self.transform_origin.set(value),
184            },
185        );
186        if changed {
187            ServerCompositionSimpleBrushHooks::on_transform_origin_changed(host);
188        }
189    }
190
191    /// The composition property of `Transform`.
192    pub fn id_of_transform_property() -> &'static CompositionPropertyOf<Option<ServerResourceRef<dyn ITransform>>> {
193        static PROPERTY: OnceLock<CompositionPropertyOf<Option<ServerResourceRef<dyn ITransform>>>> = OnceLock::new();
194        PROPERTY.get_or_init(|| {
195            CompositionProperty::register::<ServerCompositionSimpleBrushProps, Option<ServerResourceRef<dyn ITransform>>>(
196                "Transform",
197                "ServerCompositionSimpleBrush",
198                |obj| props_of::<ServerCompositionSimpleBrushProps>(obj).transform.borrow().clone(),
199                |obj, v| *props_of::<ServerCompositionSimpleBrushProps>(obj).transform.borrow_mut() = v,
200                None,
201                None,
202            )
203        })
204    }
205
206    /// `Transform`.
207    pub fn transform(&self) -> Option<ServerResourceRef<dyn ITransform>> {
208        self.transform.borrow().clone()
209    }
210
211    pub fn set_transform(&self, host: &dyn ServerCompositionSimpleBrushHooks, value: Option<ServerResourceRef<dyn ITransform>>) {
212        let old_value = self.transform.borrow().clone();
213        let mut changed = false;
214        if old_value.differs(&value) {
215            ServerCompositionSimpleBrushHooks::on_transform_changing(host);
216            changed = true;
217        }
218        host.set_value(
219            Self::id_of_transform_property().base(),
220            ServerValueChange {
221                equal: old_value.default_equals(&value),
222                old_resource: old_value.as_server_render_resource(),
223                new_resource: value.as_server_render_resource(),
224                assign: &mut || *self.transform.borrow_mut() = value.clone(),
225            },
226        );
227        if changed {
228            ServerCompositionSimpleBrushHooks::on_transform_changed(host);
229        }
230    }
231
232    /// The composition property of `RelativeTransform`.
233    pub fn id_of_relative_transform_property() -> &'static CompositionPropertyOf<Option<ServerResourceRef<dyn ITransform>>> {
234        static PROPERTY: OnceLock<CompositionPropertyOf<Option<ServerResourceRef<dyn ITransform>>>> = OnceLock::new();
235        PROPERTY.get_or_init(|| {
236            CompositionProperty::register::<ServerCompositionSimpleBrushProps, Option<ServerResourceRef<dyn ITransform>>>(
237                "RelativeTransform",
238                "ServerCompositionSimpleBrush",
239                |obj| props_of::<ServerCompositionSimpleBrushProps>(obj).relative_transform.borrow().clone(),
240                |obj, v| *props_of::<ServerCompositionSimpleBrushProps>(obj).relative_transform.borrow_mut() = v,
241                None,
242                None,
243            )
244        })
245    }
246
247    /// `RelativeTransform`.
248    pub fn relative_transform(&self) -> Option<ServerResourceRef<dyn ITransform>> {
249        self.relative_transform.borrow().clone()
250    }
251
252    pub fn set_relative_transform(&self, host: &dyn ServerCompositionSimpleBrushHooks, value: Option<ServerResourceRef<dyn ITransform>>) {
253        let old_value = self.relative_transform.borrow().clone();
254        let mut changed = false;
255        if old_value.differs(&value) {
256            ServerCompositionSimpleBrushHooks::on_relative_transform_changing(host);
257            changed = true;
258        }
259        host.set_value(
260            Self::id_of_relative_transform_property().base(),
261            ServerValueChange {
262                equal: old_value.default_equals(&value),
263                old_resource: old_value.as_server_render_resource(),
264                new_resource: value.as_server_render_resource(),
265                assign: &mut || *self.relative_transform.borrow_mut() = value.clone(),
266            },
267        );
268        if changed {
269            ServerCompositionSimpleBrushHooks::on_relative_transform_changed(host);
270        }
271    }
272
273    /// Reads the changes of the object: the base class first, then the
274    /// changed-fields mask and the changed members of this class.
275    pub fn deserialize_changes_core(
276        &self,
277        host: &dyn ServerCompositionSimpleBrushHooks,
278        reader: &mut BatchStreamReader<'_>,
279        _committed_at: Duration,
280    ) {
281        let compositor = host.server_compositor();
282        ServerCompositionSimpleBrushHooks::deserialize_changes_extra(host, reader);
283        let changed = reader.read::<CompositionSimpleBrushChangedFields>();
284        if changed.contains(CompositionSimpleBrushChangedFields::OPACITY) {
285            let value = reader.read::<f64>();
286            self.set_opacity(host, value);
287        }
288        if changed.contains(CompositionSimpleBrushChangedFields::TRANSFORM_ORIGIN) {
289            let value = reader.read::<RelativePoint>();
290            self.set_transform_origin(host, value);
291        }
292        if changed.contains(CompositionSimpleBrushChangedFields::TRANSFORM) {
293            let value = read_resource(reader, compositor.as_ref(), |o| o.as_transform());
294            self.set_transform(host, value);
295        }
296        if changed.contains(CompositionSimpleBrushChangedFields::RELATIVE_TRANSFORM) {
297            let value = read_resource(reader, compositor.as_ref(), |o| o.as_transform());
298            self.set_relative_transform(host, value);
299        }
300        ServerCompositionSimpleBrushHooks::on_fields_deserialized(host, changed);
301    }
302
303    /// Writes every property of the class, in the form
304    /// [`deserialize_changes_core`](Self::deserialize_changes_core) reads.
305    pub fn serialize_all_changes(
306        writer: &mut BatchStreamWriter<'_>,
307        opacity: f64,
308        transform_origin: RelativePoint,
309        transform: Option<BatchResource<dyn ITransform>>,
310        relative_transform: Option<BatchResource<dyn ITransform>>,
311    ) {
312        writer.write(CompositionSimpleBrushChangedFields::OPACITY | CompositionSimpleBrushChangedFields::TRANSFORM_ORIGIN | CompositionSimpleBrushChangedFields::TRANSFORM | CompositionSimpleBrushChangedFields::RELATIVE_TRANSFORM);
313        writer.write(opacity);
314        writer.write(transform_origin);
315        writer.write_resource(transform);
316        writer.write_resource(relative_transform);
317    }
318}