Skip to main content

ferroui_base/rendering/composition/generated/
composition_simple_radial_gradient_brush.rs

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