ferroui_base/rendering/composition/generated/
composition_experimental_acrylic_visual.rs1use 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 #[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
48pub trait CompositionExperimentalAcrylicVisualHooks: ICompositionObjectHost {
51 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
66pub 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 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 pub fn initialize_defaults(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks) {
94 self.initialize_own_defaults(host);
95 }
96
97 pub fn initialize_own_defaults(&self, host: &dyn CompositionExperimentalAcrylicVisualHooks) {
99 CompositionExperimentalAcrylicVisualHooks::initialize_defaults_extra(host);
100 }
101
102 pub fn material(&self) -> ImmutableExperimentalAcrylicMaterial {
104 self.material.get()
105 }
106
107 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 self.material.set(value);
117 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 pub fn corner_radius(&self) -> CornerRadius {
129 self.corner_radius.get()
130 }
131
132 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 self.corner_radius.set(value);
142 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 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
168pub trait ServerCompositionExperimentalAcrylicVisualHooks: IServerAnimatedPropertyHost {
171 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
185pub 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 pub fn new() -> Self {
201 Self {
202 material: Cell::new(Default::default()),
203 corner_radius: Cell::new(Default::default()),
204 }
205 }
206
207 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 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 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 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 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 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}