Skip to main content

ferroui_base/rendering/composition/generated/
composition_simple_transform.rs

1// @generated by scripts/generate_composition.py — do not edit
2
3//! `CompositionSimpleTransform` (server only).
4//!
5//! Schema attributes: internal.
6
7use bitflags::bitflags;
8use crate::Matrix;
9use crate::rendering::composition::server::CompositionProperty;
10use crate::rendering::composition::server::CompositionPropertyOf;
11use crate::rendering::composition::server::IServerPropertyHost;
12use crate::rendering::composition::server::ServerPropertyValue;
13use crate::rendering::composition::server::ServerValueChange;
14use crate::rendering::composition::server::props_of;
15use crate::rendering::composition::transport::BatchStreamReader;
16use crate::rendering::composition::transport::BatchStreamWriter;
17use crate::rendering::composition::transport::BatchValue;
18use crate::rendering::composition::transport::BatchValueReader;
19use std::any::Any;
20use std::any::TypeId;
21use std::cell::Cell;
22use std::sync::OnceLock;
23use std::time::Duration;
24
25bitflags! {
26    /// The fields of `CompositionSimpleTransform` that changed since its last serialization.
27    #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
28    pub struct CompositionSimpleTransformChangedFields: u8 {
29        const VALUE = 1;
30    }
31}
32
33impl BatchValue for CompositionSimpleTransformChangedFields {
34    #[inline]
35    fn write_to(&self, out: &mut Vec<u8>) {
36        self.bits().write_to(out);
37    }
38
39    #[inline]
40    fn read_from(input: &mut BatchValueReader<'_>) -> Self {
41        CompositionSimpleTransformChangedFields::from_bits_retain(u8::read_from(input))
42    }
43}
44
45/// The partial methods of `ServerCompositionSimpleTransform`: implemented by the class that embeds
46/// [`ServerCompositionSimpleTransformProps`]. Every hook defaults to doing nothing.
47pub trait ServerCompositionSimpleTransformHooks: IServerPropertyHost {
48    fn deserialize_changes_extra(&self, _reader: &mut BatchStreamReader<'_>) {}
49    fn on_fields_deserialized(&self, _changed: CompositionSimpleTransformChangedFields) {}
50
51    fn on_value_changed(&self) {}
52    fn on_value_changing(&self) {}
53}
54
55/// The server-side properties of `ServerCompositionSimpleTransform`.
56pub struct ServerCompositionSimpleTransformProps {
57    value: Cell<Matrix>,
58}
59
60impl Default for ServerCompositionSimpleTransformProps {
61    fn default() -> Self {
62        Self::new()
63    }
64}
65
66impl ServerCompositionSimpleTransformProps {
67    /// Creates the properties with every field at the default of its type; the
68    /// values of the UI thread arrive with the first batch.
69    pub fn new() -> Self {
70        Self {
71            value: Cell::new(Default::default()),
72        }
73    }
74
75    /// This block or the block of a base class, by type: what
76    /// `IServerObject::get_props` of the embedding class returns.
77    pub fn find_props(&self, type_id: TypeId) -> Option<&dyn Any> {
78        if type_id == TypeId::of::<Self>() {
79            return Some(self);
80        }
81        None
82    }
83
84    /// The composition property of `Value`.
85    pub fn id_of_value_property() -> &'static CompositionPropertyOf<Matrix> {
86        static PROPERTY: OnceLock<CompositionPropertyOf<Matrix>> = OnceLock::new();
87        PROPERTY.get_or_init(|| {
88            CompositionProperty::register::<ServerCompositionSimpleTransformProps, Matrix>(
89                "Value",
90                "ServerCompositionSimpleTransform",
91                |obj| props_of::<ServerCompositionSimpleTransformProps>(obj).value.get(),
92                |obj, v| props_of::<ServerCompositionSimpleTransformProps>(obj).value.set(v),
93                None,
94                None,
95            )
96        })
97    }
98
99    /// `Value`.
100    pub fn value(&self) -> Matrix {
101        self.value.get()
102    }
103
104    pub fn set_value(&self, host: &dyn ServerCompositionSimpleTransformHooks, value: Matrix) {
105        let old_value = self.value.get();
106        let mut changed = false;
107        if old_value.differs(&value) {
108            ServerCompositionSimpleTransformHooks::on_value_changing(host);
109            changed = true;
110        }
111        host.set_value(
112            Self::id_of_value_property().base(),
113            ServerValueChange {
114                equal: old_value.default_equals(&value),
115                old_resource: None,
116                new_resource: None,
117                assign: &mut || self.value.set(value),
118            },
119        );
120        if changed {
121            ServerCompositionSimpleTransformHooks::on_value_changed(host);
122        }
123    }
124
125    /// Reads the changes of the object: the base class first, then the
126    /// changed-fields mask and the changed members of this class.
127    pub fn deserialize_changes_core(
128        &self,
129        host: &dyn ServerCompositionSimpleTransformHooks,
130        reader: &mut BatchStreamReader<'_>,
131        _committed_at: Duration,
132    ) {
133        ServerCompositionSimpleTransformHooks::deserialize_changes_extra(host, reader);
134        let changed = reader.read::<CompositionSimpleTransformChangedFields>();
135        if changed.contains(CompositionSimpleTransformChangedFields::VALUE) {
136            let value = reader.read::<Matrix>();
137            self.set_value(host, value);
138        }
139        ServerCompositionSimpleTransformHooks::on_fields_deserialized(host, changed);
140    }
141
142    /// Writes every property of the class, in the form
143    /// [`deserialize_changes_core`](Self::deserialize_changes_core) reads.
144    pub fn serialize_all_changes(
145        writer: &mut BatchStreamWriter<'_>,
146        value: Matrix,
147    ) {
148        writer.write(CompositionSimpleTransformChangedFields::VALUE);
149        writer.write(value);
150    }
151}