ferroui_base/rendering/composition/generated/
composition_simple_transform.rs1use 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 #[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
45pub 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
55pub 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 pub fn new() -> Self {
70 Self {
71 value: Cell::new(Default::default()),
72 }
73 }
74
75 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 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 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 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 pub fn serialize_all_changes(
145 writer: &mut BatchStreamWriter<'_>,
146 value: Matrix,
147 ) {
148 writer.write(CompositionSimpleTransformChangedFields::VALUE);
149 writer.write(value);
150 }
151}