Skip to main content

ferroui_base/rendering/composition/generated/
composition_tile_brush.rs

1// @generated by scripts/generate_composition.py — do not edit
2
3//! `CompositionTileBrush` (server only).
4//!
5//! Schema attributes: internal.
6
7use bitflags::bitflags;
8use crate::RelativeRect;
9use crate::media::AlignmentX;
10use crate::media::AlignmentY;
11use crate::media::Stretch;
12use crate::media::TileMode;
13use crate::rendering::composition::server::CompositionProperty;
14use crate::rendering::composition::server::CompositionPropertyOf;
15use crate::rendering::composition::server::ServerPropertyValue;
16use crate::rendering::composition::server::ServerValueChange;
17use crate::rendering::composition::server::props_of;
18use crate::rendering::composition::transport::BatchStreamReader;
19use crate::rendering::composition::transport::BatchStreamWriter;
20use crate::rendering::composition::transport::BatchValue;
21use crate::rendering::composition::transport::BatchValueReader;
22use std::any::Any;
23use std::any::TypeId;
24use std::cell::Cell;
25use std::sync::OnceLock;
26use std::time::Duration;
27use super::ServerCompositionBrushHooks;
28use super::ServerCompositionBrushProps;
29
30bitflags! {
31    /// The fields of `CompositionTileBrush` that changed since its last serialization.
32    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
33    pub struct CompositionTileBrushChangedFields: u8 {
34        const ALIGNMENT_X = 1;
35        const ALIGNMENT_Y = 2;
36        const DESTINATION_RECT = 4;
37        const SOURCE_RECT = 8;
38        const STRETCH = 16;
39        const TILE_MODE = 32;
40    }
41}
42
43impl BatchValue for CompositionTileBrushChangedFields {
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        CompositionTileBrushChangedFields::from_bits_retain(u8::read_from(input))
52    }
53}
54
55/// The partial methods of `ServerCompositionTileBrush`: implemented by the class that embeds
56/// [`ServerCompositionTileBrushProps`]. Every hook defaults to doing nothing.
57pub trait ServerCompositionTileBrushHooks: ServerCompositionBrushHooks {
58    fn deserialize_changes_extra(&self, _reader: &mut BatchStreamReader<'_>) {}
59    fn on_fields_deserialized(&self, _changed: CompositionTileBrushChangedFields) {}
60
61    fn on_alignment_x_changed(&self) {}
62    fn on_alignment_x_changing(&self) {}
63
64    fn on_alignment_y_changed(&self) {}
65    fn on_alignment_y_changing(&self) {}
66
67    fn on_destination_rect_changed(&self) {}
68    fn on_destination_rect_changing(&self) {}
69
70    fn on_source_rect_changed(&self) {}
71    fn on_source_rect_changing(&self) {}
72
73    fn on_stretch_changed(&self) {}
74    fn on_stretch_changing(&self) {}
75
76    fn on_tile_mode_changed(&self) {}
77    fn on_tile_mode_changing(&self) {}
78}
79
80/// The server-side properties of `ServerCompositionTileBrush`.
81pub struct ServerCompositionTileBrushProps {
82    base: ServerCompositionBrushProps,
83    alignment_x: Cell<AlignmentX>,
84    alignment_y: Cell<AlignmentY>,
85    destination_rect: Cell<RelativeRect>,
86    source_rect: Cell<RelativeRect>,
87    stretch: Cell<Stretch>,
88    tile_mode: Cell<TileMode>,
89}
90
91impl Default for ServerCompositionTileBrushProps {
92    fn default() -> Self {
93        Self::new()
94    }
95}
96
97impl ServerCompositionTileBrushProps {
98    /// Creates the properties with every field at the default of its type; the
99    /// values of the UI thread arrive with the first batch.
100    pub fn new() -> Self {
101        Self {
102            base: ServerCompositionBrushProps::new(),
103            alignment_x: Cell::new(Default::default()),
104            alignment_y: Cell::new(Default::default()),
105            destination_rect: Cell::new(Default::default()),
106            source_rect: Cell::new(Default::default()),
107            stretch: Cell::new(Default::default()),
108            tile_mode: Cell::new(Default::default()),
109        }
110    }
111
112    /// The properties of the base class.
113    pub fn base(&self) -> &ServerCompositionBrushProps {
114        &self.base
115    }
116
117    /// This block or the block of a base class, by type: what
118    /// `IServerObject::get_props` of the embedding class returns.
119    pub fn find_props(&self, type_id: TypeId) -> Option<&dyn Any> {
120        if type_id == TypeId::of::<Self>() {
121            return Some(self);
122        }
123        self.base.find_props(type_id)
124    }
125
126    /// The composition property of `AlignmentX`.
127    pub fn id_of_alignment_x_property() -> &'static CompositionPropertyOf<AlignmentX> {
128        static PROPERTY: OnceLock<CompositionPropertyOf<AlignmentX>> = OnceLock::new();
129        PROPERTY.get_or_init(|| {
130            CompositionProperty::register::<ServerCompositionTileBrushProps, AlignmentX>(
131                "AlignmentX",
132                "ServerCompositionTileBrush",
133                |obj| props_of::<ServerCompositionTileBrushProps>(obj).alignment_x.get(),
134                |obj, v| props_of::<ServerCompositionTileBrushProps>(obj).alignment_x.set(v),
135                None,
136                None,
137            )
138        })
139    }
140
141    /// `AlignmentX`.
142    pub fn alignment_x(&self) -> AlignmentX {
143        self.alignment_x.get()
144    }
145
146    pub fn set_alignment_x(&self, host: &dyn ServerCompositionTileBrushHooks, value: AlignmentX) {
147        let old_value = self.alignment_x.get();
148        let mut changed = false;
149        if old_value.differs(&value) {
150            ServerCompositionTileBrushHooks::on_alignment_x_changing(host);
151            changed = true;
152        }
153        host.set_value(
154            Self::id_of_alignment_x_property().base(),
155            ServerValueChange {
156                equal: old_value.default_equals(&value),
157                old_resource: None,
158                new_resource: None,
159                assign: &mut || self.alignment_x.set(value),
160            },
161        );
162        if changed {
163            ServerCompositionTileBrushHooks::on_alignment_x_changed(host);
164        }
165    }
166
167    /// The composition property of `AlignmentY`.
168    pub fn id_of_alignment_y_property() -> &'static CompositionPropertyOf<AlignmentY> {
169        static PROPERTY: OnceLock<CompositionPropertyOf<AlignmentY>> = OnceLock::new();
170        PROPERTY.get_or_init(|| {
171            CompositionProperty::register::<ServerCompositionTileBrushProps, AlignmentY>(
172                "AlignmentY",
173                "ServerCompositionTileBrush",
174                |obj| props_of::<ServerCompositionTileBrushProps>(obj).alignment_y.get(),
175                |obj, v| props_of::<ServerCompositionTileBrushProps>(obj).alignment_y.set(v),
176                None,
177                None,
178            )
179        })
180    }
181
182    /// `AlignmentY`.
183    pub fn alignment_y(&self) -> AlignmentY {
184        self.alignment_y.get()
185    }
186
187    pub fn set_alignment_y(&self, host: &dyn ServerCompositionTileBrushHooks, value: AlignmentY) {
188        let old_value = self.alignment_y.get();
189        let mut changed = false;
190        if old_value.differs(&value) {
191            ServerCompositionTileBrushHooks::on_alignment_y_changing(host);
192            changed = true;
193        }
194        host.set_value(
195            Self::id_of_alignment_y_property().base(),
196            ServerValueChange {
197                equal: old_value.default_equals(&value),
198                old_resource: None,
199                new_resource: None,
200                assign: &mut || self.alignment_y.set(value),
201            },
202        );
203        if changed {
204            ServerCompositionTileBrushHooks::on_alignment_y_changed(host);
205        }
206    }
207
208    /// The composition property of `DestinationRect`.
209    pub fn id_of_destination_rect_property() -> &'static CompositionPropertyOf<RelativeRect> {
210        static PROPERTY: OnceLock<CompositionPropertyOf<RelativeRect>> = OnceLock::new();
211        PROPERTY.get_or_init(|| {
212            CompositionProperty::register::<ServerCompositionTileBrushProps, RelativeRect>(
213                "DestinationRect",
214                "ServerCompositionTileBrush",
215                |obj| props_of::<ServerCompositionTileBrushProps>(obj).destination_rect.get(),
216                |obj, v| props_of::<ServerCompositionTileBrushProps>(obj).destination_rect.set(v),
217                None,
218                None,
219            )
220        })
221    }
222
223    /// `DestinationRect`.
224    pub fn destination_rect(&self) -> RelativeRect {
225        self.destination_rect.get()
226    }
227
228    pub fn set_destination_rect(&self, host: &dyn ServerCompositionTileBrushHooks, value: RelativeRect) {
229        let old_value = self.destination_rect.get();
230        let mut changed = false;
231        if old_value.differs(&value) {
232            ServerCompositionTileBrushHooks::on_destination_rect_changing(host);
233            changed = true;
234        }
235        host.set_value(
236            Self::id_of_destination_rect_property().base(),
237            ServerValueChange {
238                equal: old_value.default_equals(&value),
239                old_resource: None,
240                new_resource: None,
241                assign: &mut || self.destination_rect.set(value),
242            },
243        );
244        if changed {
245            ServerCompositionTileBrushHooks::on_destination_rect_changed(host);
246        }
247    }
248
249    /// The composition property of `SourceRect`.
250    pub fn id_of_source_rect_property() -> &'static CompositionPropertyOf<RelativeRect> {
251        static PROPERTY: OnceLock<CompositionPropertyOf<RelativeRect>> = OnceLock::new();
252        PROPERTY.get_or_init(|| {
253            CompositionProperty::register::<ServerCompositionTileBrushProps, RelativeRect>(
254                "SourceRect",
255                "ServerCompositionTileBrush",
256                |obj| props_of::<ServerCompositionTileBrushProps>(obj).source_rect.get(),
257                |obj, v| props_of::<ServerCompositionTileBrushProps>(obj).source_rect.set(v),
258                None,
259                None,
260            )
261        })
262    }
263
264    /// `SourceRect`.
265    pub fn source_rect(&self) -> RelativeRect {
266        self.source_rect.get()
267    }
268
269    pub fn set_source_rect(&self, host: &dyn ServerCompositionTileBrushHooks, value: RelativeRect) {
270        let old_value = self.source_rect.get();
271        let mut changed = false;
272        if old_value.differs(&value) {
273            ServerCompositionTileBrushHooks::on_source_rect_changing(host);
274            changed = true;
275        }
276        host.set_value(
277            Self::id_of_source_rect_property().base(),
278            ServerValueChange {
279                equal: old_value.default_equals(&value),
280                old_resource: None,
281                new_resource: None,
282                assign: &mut || self.source_rect.set(value),
283            },
284        );
285        if changed {
286            ServerCompositionTileBrushHooks::on_source_rect_changed(host);
287        }
288    }
289
290    /// The composition property of `Stretch`.
291    pub fn id_of_stretch_property() -> &'static CompositionPropertyOf<Stretch> {
292        static PROPERTY: OnceLock<CompositionPropertyOf<Stretch>> = OnceLock::new();
293        PROPERTY.get_or_init(|| {
294            CompositionProperty::register::<ServerCompositionTileBrushProps, Stretch>(
295                "Stretch",
296                "ServerCompositionTileBrush",
297                |obj| props_of::<ServerCompositionTileBrushProps>(obj).stretch.get(),
298                |obj, v| props_of::<ServerCompositionTileBrushProps>(obj).stretch.set(v),
299                None,
300                None,
301            )
302        })
303    }
304
305    /// `Stretch`.
306    pub fn stretch(&self) -> Stretch {
307        self.stretch.get()
308    }
309
310    pub fn set_stretch(&self, host: &dyn ServerCompositionTileBrushHooks, value: Stretch) {
311        let old_value = self.stretch.get();
312        let mut changed = false;
313        if old_value.differs(&value) {
314            ServerCompositionTileBrushHooks::on_stretch_changing(host);
315            changed = true;
316        }
317        host.set_value(
318            Self::id_of_stretch_property().base(),
319            ServerValueChange {
320                equal: old_value.default_equals(&value),
321                old_resource: None,
322                new_resource: None,
323                assign: &mut || self.stretch.set(value),
324            },
325        );
326        if changed {
327            ServerCompositionTileBrushHooks::on_stretch_changed(host);
328        }
329    }
330
331    /// The composition property of `TileMode`.
332    pub fn id_of_tile_mode_property() -> &'static CompositionPropertyOf<TileMode> {
333        static PROPERTY: OnceLock<CompositionPropertyOf<TileMode>> = OnceLock::new();
334        PROPERTY.get_or_init(|| {
335            CompositionProperty::register::<ServerCompositionTileBrushProps, TileMode>(
336                "TileMode",
337                "ServerCompositionTileBrush",
338                |obj| props_of::<ServerCompositionTileBrushProps>(obj).tile_mode.get(),
339                |obj, v| props_of::<ServerCompositionTileBrushProps>(obj).tile_mode.set(v),
340                None,
341                None,
342            )
343        })
344    }
345
346    /// `TileMode`.
347    pub fn tile_mode(&self) -> TileMode {
348        self.tile_mode.get()
349    }
350
351    pub fn set_tile_mode(&self, host: &dyn ServerCompositionTileBrushHooks, value: TileMode) {
352        let old_value = self.tile_mode.get();
353        let mut changed = false;
354        if old_value.differs(&value) {
355            ServerCompositionTileBrushHooks::on_tile_mode_changing(host);
356            changed = true;
357        }
358        host.set_value(
359            Self::id_of_tile_mode_property().base(),
360            ServerValueChange {
361                equal: old_value.default_equals(&value),
362                old_resource: None,
363                new_resource: None,
364                assign: &mut || self.tile_mode.set(value),
365            },
366        );
367        if changed {
368            ServerCompositionTileBrushHooks::on_tile_mode_changed(host);
369        }
370    }
371
372    /// Reads the changes of the object: the base class first, then the
373    /// changed-fields mask and the changed members of this class.
374    pub fn deserialize_changes_core(
375        &self,
376        host: &dyn ServerCompositionTileBrushHooks,
377        reader: &mut BatchStreamReader<'_>,
378        committed_at: Duration,
379    ) {
380        self.base.deserialize_changes_core(host, reader, committed_at);
381        ServerCompositionTileBrushHooks::deserialize_changes_extra(host, reader);
382        let changed = reader.read::<CompositionTileBrushChangedFields>();
383        if changed.contains(CompositionTileBrushChangedFields::ALIGNMENT_X) {
384            let value = reader.read::<AlignmentX>();
385            self.set_alignment_x(host, value);
386        }
387        if changed.contains(CompositionTileBrushChangedFields::ALIGNMENT_Y) {
388            let value = reader.read::<AlignmentY>();
389            self.set_alignment_y(host, value);
390        }
391        if changed.contains(CompositionTileBrushChangedFields::DESTINATION_RECT) {
392            let value = reader.read::<RelativeRect>();
393            self.set_destination_rect(host, value);
394        }
395        if changed.contains(CompositionTileBrushChangedFields::SOURCE_RECT) {
396            let value = reader.read::<RelativeRect>();
397            self.set_source_rect(host, value);
398        }
399        if changed.contains(CompositionTileBrushChangedFields::STRETCH) {
400            let value = reader.read::<Stretch>();
401            self.set_stretch(host, value);
402        }
403        if changed.contains(CompositionTileBrushChangedFields::TILE_MODE) {
404            let value = reader.read::<TileMode>();
405            self.set_tile_mode(host, value);
406        }
407        ServerCompositionTileBrushHooks::on_fields_deserialized(host, changed);
408    }
409
410    /// Writes every property of the class, in the form
411    /// [`deserialize_changes_core`](Self::deserialize_changes_core) reads.
412    pub fn serialize_all_changes(
413        writer: &mut BatchStreamWriter<'_>,
414        alignment_x: AlignmentX,
415        alignment_y: AlignmentY,
416        destination_rect: RelativeRect,
417        source_rect: RelativeRect,
418        stretch: Stretch,
419        tile_mode: TileMode,
420    ) {
421        writer.write(CompositionTileBrushChangedFields::ALIGNMENT_X | CompositionTileBrushChangedFields::ALIGNMENT_Y | CompositionTileBrushChangedFields::DESTINATION_RECT | CompositionTileBrushChangedFields::SOURCE_RECT | CompositionTileBrushChangedFields::STRETCH | CompositionTileBrushChangedFields::TILE_MODE);
422        writer.write(alignment_x);
423        writer.write(alignment_y);
424        writer.write(destination_rect);
425        writer.write(source_rect);
426        writer.write(stretch);
427        writer.write(tile_mode);
428    }
429}