Skip to main content

ferroui_base/rendering/composition/generated/
composition_experimental_acrylic_visual.rs

1// @generated by scripts/generate_composition.py — do not edit
2
3//! `CompositionExperimentalAcrylicVisual`.
4//!
5//! Schema attributes: internal, custom constructor on the UI thread, custom constructor on the server.
6
7use bitflags::bitflags;
8use crate::CornerRadius;
9use crate::media::ImmutableExperimentalAcrylicMaterial;
10use crate::rendering::composition::ICompositionObjectHost;
11use crate::rendering::composition::server::CompositionProperty;
12use crate::rendering::composition::server::CompositionPropertyOf;
13use crate::rendering::composition::server::IServerAnimatedPropertyHost;
14use crate::rendering::composition::server::ServerPropertyValue;
15use crate::rendering::composition::server::ServerValueChange;
16use crate::rendering::composition::server::props_of;
17use crate::rendering::composition::transport::BatchStreamReader;
18use crate::rendering::composition::transport::BatchStreamWriter;
19use crate::rendering::composition::transport::BatchValue;
20use crate::rendering::composition::transport::BatchValueReader;
21use std::any::Any;
22use std::any::TypeId;
23use std::cell::Cell;
24use std::sync::OnceLock;
25use std::time::Duration;
26
27bitflags! {
28    /// The fields of `CompositionExperimentalAcrylicVisual` that changed since its last serialization.
29    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
30    pub struct CompositionExperimentalAcrylicVisualChangedFields: u8 {
31        const MATERIAL = 1;
32        const CORNER_RADIUS = 2;
33    }
34}
35
36impl BatchValue for CompositionExperimentalAcrylicVisualChangedFields {
37    #[inline]
38    fn write_to(&self, out: &mut Vec<u8>) {
39        self.bits().write_to(out);
40    }
41
42    #[inline]
43    fn read_from(input: &mut BatchValueReader<'_>) -> Self {
44        CompositionExperimentalAcrylicVisualChangedFields::from_bits_retain(u8::read_from(input))
45    }
46}
47
48/// The partial methods of `CompositionExperimentalAcrylicVisual`: implemented by the class that embeds
49/// [`CompositionExperimentalAcrylicVisualProps`]. Every hook defaults to doing nothing.
50pub trait CompositionExperimentalAcrylicVisualHooks: ICompositionObjectHost {
51    /// `base.SerializeChangesCore(writer)`: serializes the changes of the
52    /// hand-written base class `CompositionDrawListVisual`.
53    fn base_serialize_changes_core(&self, writer: &mut BatchStreamWriter<'_>);
54
55    fn initialize_defaults_extra(&self) {}
56
57    fn validate_material_change(&self, _old_value: ImmutableExperimentalAcrylicMaterial, _new_value: ImmutableExperimentalAcrylicMaterial) {}
58    fn on_material_changed(&self) {}
59    fn on_material_changing(&self) {}
60
61    fn validate_corner_radius_change(&self, _old_value: CornerRadius, _new_value: CornerRadius) {}
62    fn on_corner_radius_changed(&self) {}
63    fn on_corner_radius_changing(&self) {}
64}
65
66/// The UI-thread properties of `CompositionExperimentalAcrylicVisual`.
67pub struct CompositionExperimentalAcrylicVisualProps {
68    changed_fields_of_composition_experimental_acrylic_visual: Cell<CompositionExperimentalAcrylicVisualChangedFields>,
69    material: Cell<ImmutableExperimentalAcrylicMaterial>,
70    corner_radius: Cell<CornerRadius>,
71}
72
73impl Default for CompositionExperimentalAcrylicVisualProps {
74    fn default() -> Self {
75        Self::new()
76    }
77}
78
79impl CompositionExperimentalAcrylicVisualProps {
80    /// Creates the properties with every field at the default of its type.
81    /// The defaults of the schema are applied by
82    /// [`initialize_defaults`](Self::initialize_defaults).
83    pub fn new() -> Self {
84        Self {
85            changed_fields_of_composition_experimental_acrylic_visual: Cell::new(CompositionExperimentalAcrylicVisualChangedFields::empty()),
86            material: Cell::new(Default::default()),
87            corner_radius: Cell::new(Default::default()),
88        }
89    }
90
91    /// The `InitializeDefaults` calls of the constructor chain: the base
92    /// classes first, then this class.
93    pub fn initialize_defaults(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks) {
94        self.initialize_own_defaults(host);
95    }
96
97    /// `InitializeDefaults` of this class alone.
98    pub fn initialize_own_defaults(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks) {
99        CompositionExperimentalAcrylicVisualHooks::initialize_defaults_extra(host);
100    }
101
102    /// `Material`.
103    pub fn material(&self) -> ImmutableExperimentalAcrylicMaterial {
104        self.material.get()
105    }
106
107    /// Sets `Material`.
108    pub fn set_material(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks, value: ImmutableExperimentalAcrylicMaterial) {
109        let mut changed = false;
110        let old_value = self.material.get();
111        if old_value.differs(&value) {
112            CompositionExperimentalAcrylicVisualHooks::validate_material_change(host, old_value, value);
113            CompositionExperimentalAcrylicVisualHooks::on_material_changing(host);
114            changed = true;
115            // Update the backing value
116            self.material.set(value);
117            // Register object for serialization in the next batch
118            self.changed_fields_of_composition_experimental_acrylic_visual.set(self.changed_fields_of_composition_experimental_acrylic_visual.get() | CompositionExperimentalAcrylicVisualChangedFields::MATERIAL);
119            host.register_for_serialization();
120        }
121        self.material.set(value);
122        if changed {
123            CompositionExperimentalAcrylicVisualHooks::on_material_changed(host);
124        }
125    }
126
127    /// `CornerRadius`.
128    pub fn corner_radius(&self) -> CornerRadius {
129        self.corner_radius.get()
130    }
131
132    /// Sets `CornerRadius`.
133    pub fn set_corner_radius(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks, value: CornerRadius) {
134        let mut changed = false;
135        let old_value = self.corner_radius.get();
136        if old_value.differs(&value) {
137            CompositionExperimentalAcrylicVisualHooks::validate_corner_radius_change(host, old_value, value);
138            CompositionExperimentalAcrylicVisualHooks::on_corner_radius_changing(host);
139            changed = true;
140            // Update the backing value
141            self.corner_radius.set(value);
142            // Register object for serialization in the next batch
143            self.changed_fields_of_composition_experimental_acrylic_visual.set(self.changed_fields_of_composition_experimental_acrylic_visual.get() | CompositionExperimentalAcrylicVisualChangedFields::CORNER_RADIUS);
144            host.register_for_serialization();
145        }
146        self.corner_radius.set(value);
147        if changed {
148            CompositionExperimentalAcrylicVisualHooks::on_corner_radius_changed(host);
149        }
150    }
151
152    /// Writes the changes of the object: the base class first, then the
153    /// changed-fields mask and the changed members of this class.
154    pub fn serialize_changes_core(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks, writer: &mut BatchStreamWriter<'_>) {
155        CompositionExperimentalAcrylicVisualHooks::base_serialize_changes_core(host, writer);
156        let changed = self.changed_fields_of_composition_experimental_acrylic_visual.get();
157        writer.write(changed);
158        if changed.contains(CompositionExperimentalAcrylicVisualChangedFields::MATERIAL) {
159            writer.write_value(Some(self.material.get()));
160        }
161        if changed.contains(CompositionExperimentalAcrylicVisualChangedFields::CORNER_RADIUS) {
162            writer.write(self.corner_radius.get());
163        }
164        self.changed_fields_of_composition_experimental_acrylic_visual.set(CompositionExperimentalAcrylicVisualChangedFields::empty());
165    }
166}
167
168/// The partial methods of `ServerCompositionExperimentalAcrylicVisual`: implemented by the class that embeds
169/// [`ServerCompositionExperimentalAcrylicVisualProps`]. Every hook defaults to doing nothing.
170pub trait ServerCompositionExperimentalAcrylicVisualHooks: IServerAnimatedPropertyHost {
171    /// `base.DeserializeChangesCore(reader, committedAt)`: reads the changes of
172    /// the hand-written base class `ServerCompositionDrawListVisual`.
173    fn base_deserialize_changes_core(&self, reader: &mut BatchStreamReader<'_>, committed_at: Duration);
174
175    fn deserialize_changes_extra(&self, _reader: &mut BatchStreamReader<'_>) {}
176    fn on_fields_deserialized(&self, _changed: CompositionExperimentalAcrylicVisualChangedFields) {}
177
178    fn on_material_changed(&self) {}
179    fn on_material_changing(&self) {}
180
181    fn on_corner_radius_changed(&self) {}
182    fn on_corner_radius_changing(&self) {}
183}
184
185/// The server-side properties of `ServerCompositionExperimentalAcrylicVisual`.
186pub struct ServerCompositionExperimentalAcrylicVisualProps {
187    material: Cell<ImmutableExperimentalAcrylicMaterial>,
188    corner_radius: Cell<CornerRadius>,
189}
190
191impl Default for ServerCompositionExperimentalAcrylicVisualProps {
192    fn default() -> Self {
193        Self::new()
194    }
195}
196
197impl ServerCompositionExperimentalAcrylicVisualProps {
198    /// Creates the properties with every field at the default of its type; the
199    /// values of the UI thread arrive with the first batch.
200    pub fn new() -> Self {
201        Self {
202            material: Cell::new(Default::default()),
203            corner_radius: Cell::new(Default::default()),
204        }
205    }
206
207    /// This block or the block of a base class, by type: what
208    /// `IServerObject::get_props` of the embedding class returns.
209    pub fn find_props(&self, type_id: TypeId) -> Option<&dyn Any> {
210        if type_id == TypeId::of::<Self>() {
211            return Some(self);
212        }
213        None
214    }
215
216    /// The composition property of `Material`.
217    pub fn id_of_material_property() -> &'static CompositionPropertyOf<ImmutableExperimentalAcrylicMaterial> {
218        static PROPERTY: OnceLock<CompositionPropertyOf<ImmutableExperimentalAcrylicMaterial>> = OnceLock::new();
219        PROPERTY.get_or_init(|| {
220            CompositionProperty::register::<ServerCompositionExperimentalAcrylicVisualProps, ImmutableExperimentalAcrylicMaterial>(
221                "Material",
222                "ServerCompositionExperimentalAcrylicVisual",
223                |obj| props_of::<ServerCompositionExperimentalAcrylicVisualProps>(obj).material.get(),
224                |obj, v| props_of::<ServerCompositionExperimentalAcrylicVisualProps>(obj).material.set(v),
225                None,
226                None,
227            )
228        })
229    }
230
231    /// `Material`.
232    pub fn material(&self) -> ImmutableExperimentalAcrylicMaterial {
233        self.material.get()
234    }
235
236    pub fn set_material(&self, host: &dyn ServerCompositionExperimentalAcrylicVisualHooks, value: ImmutableExperimentalAcrylicMaterial) {
237        let old_value = self.material.get();
238        let mut changed = false;
239        if old_value.differs(&value) {
240            ServerCompositionExperimentalAcrylicVisualHooks::on_material_changing(host);
241            changed = true;
242        }
243        host.set_value(
244            Self::id_of_material_property().base(),
245            ServerValueChange {
246                equal: old_value.default_equals(&value),
247                old_resource: None,
248                new_resource: None,
249                assign: &mut || self.material.set(value),
250            },
251        );
252        if changed {
253            ServerCompositionExperimentalAcrylicVisualHooks::on_material_changed(host);
254        }
255    }
256
257    /// The composition property of `CornerRadius`.
258    pub fn id_of_corner_radius_property() -> &'static CompositionPropertyOf<CornerRadius> {
259        static PROPERTY: OnceLock<CompositionPropertyOf<CornerRadius>> = OnceLock::new();
260        PROPERTY.get_or_init(|| {
261            CompositionProperty::register::<ServerCompositionExperimentalAcrylicVisualProps, CornerRadius>(
262                "CornerRadius",
263                "ServerCompositionExperimentalAcrylicVisual",
264                |obj| props_of::<ServerCompositionExperimentalAcrylicVisualProps>(obj).corner_radius.get(),
265                |obj, v| props_of::<ServerCompositionExperimentalAcrylicVisualProps>(obj).corner_radius.set(v),
266                None,
267                None,
268            )
269        })
270    }
271
272    /// `CornerRadius`.
273    pub fn corner_radius(&self) -> CornerRadius {
274        self.corner_radius.get()
275    }
276
277    pub fn set_corner_radius(&self, host: &dyn ServerCompositionExperimentalAcrylicVisualHooks, value: CornerRadius) {
278        let old_value = self.corner_radius.get();
279        let mut changed = false;
280        if old_value.differs(&value) {
281            ServerCompositionExperimentalAcrylicVisualHooks::on_corner_radius_changing(host);
282            changed = true;
283        }
284        host.set_value(
285            Self::id_of_corner_radius_property().base(),
286            ServerValueChange {
287                equal: old_value.default_equals(&value),
288                old_resource: None,
289                new_resource: None,
290                assign: &mut || self.corner_radius.set(value),
291            },
292        );
293        if changed {
294            ServerCompositionExperimentalAcrylicVisualHooks::on_corner_radius_changed(host);
295        }
296    }
297
298    /// Reads the changes of the object: the base class first, then the
299    /// changed-fields mask and the changed members of this class.
300    pub fn deserialize_changes_core(
301        &self,
302        host: &dyn ServerCompositionExperimentalAcrylicVisualHooks,
303        reader: &mut BatchStreamReader<'_>,
304        committed_at: Duration,
305    ) {
306        ServerCompositionExperimentalAcrylicVisualHooks::base_deserialize_changes_core(host, reader, committed_at);
307        ServerCompositionExperimentalAcrylicVisualHooks::deserialize_changes_extra(host, reader);
308        let changed = reader.read::<CompositionExperimentalAcrylicVisualChangedFields>();
309        if changed.contains(CompositionExperimentalAcrylicVisualChangedFields::MATERIAL) {
310            let value = match reader.read_value::<ImmutableExperimentalAcrylicMaterial>() {
311                Some(value) => value,
312                None => panic!("a batch holds no value for a property that is not nullable"),
313            };
314            self.set_material(host, value);
315        }
316        if changed.contains(CompositionExperimentalAcrylicVisualChangedFields::CORNER_RADIUS) {
317            let value = reader.read::<CornerRadius>();
318            self.set_corner_radius(host, value);
319        }
320        ServerCompositionExperimentalAcrylicVisualHooks::on_fields_deserialized(host, changed);
321    }
322}