1use crate::animation::easings::*;
7use crate::animation::{
8 CompositePageTransition, CrossFade, FillMode, IPageTransition, PageSlide, Rotate3DTransition, SlideAxis, TimeSpan,
9};
10use crate::data::core::ValueTypes;
11use crate::ferro_markup_type;
12use crate::metadata::{MarkupType, MarkupTyped};
13use crate::{Ref, animation::KeySpline};
14use std::rc::Rc;
15
16macro_rules! identity_eq {
18 ($($type_:ty),*) => {
19 $(impl PartialEq for $type_ {
20 fn eq(&self, other: &Self) -> bool {
21 std::ptr::eq(self, other)
22 }
23 })*
24 };
25}
26identity_eq!(SplineEasing, SpringEasing, CrossFade, PageSlide, CompositePageTransition, Rotate3DTransition);
27
28ferro_markup_type!(class BackEaseIn {
31 namespace: "FerroUI.Animation.Easings",
32 handles: [Rc<BackEaseIn>, Option<Rc<BackEaseIn>>],
33 this: Rc<BackEaseIn>,
34 base: Easing,
35 interfaces: [Rc<dyn IEasing>],
36 constructors: [() => || Rc::new(BackEaseIn::new())],
37});
38
39ferro_markup_type!(class BackEaseInOut {
40 namespace: "FerroUI.Animation.Easings",
41 handles: [Rc<BackEaseInOut>, Option<Rc<BackEaseInOut>>],
42 this: Rc<BackEaseInOut>,
43 base: Easing,
44 interfaces: [Rc<dyn IEasing>],
45 constructors: [() => || Rc::new(BackEaseInOut::new())],
46});
47
48ferro_markup_type!(class BackEaseOut {
49 namespace: "FerroUI.Animation.Easings",
50 handles: [Rc<BackEaseOut>, Option<Rc<BackEaseOut>>],
51 this: Rc<BackEaseOut>,
52 base: Easing,
53 interfaces: [Rc<dyn IEasing>],
54 constructors: [() => || Rc::new(BackEaseOut::new())],
55});
56
57ferro_markup_type!(class BounceEaseIn {
58 namespace: "FerroUI.Animation.Easings",
59 handles: [Rc<BounceEaseIn>, Option<Rc<BounceEaseIn>>],
60 this: Rc<BounceEaseIn>,
61 base: Easing,
62 interfaces: [Rc<dyn IEasing>],
63 constructors: [() => || Rc::new(BounceEaseIn::new())],
64});
65
66ferro_markup_type!(class BounceEaseInOut {
67 namespace: "FerroUI.Animation.Easings",
68 handles: [Rc<BounceEaseInOut>, Option<Rc<BounceEaseInOut>>],
69 this: Rc<BounceEaseInOut>,
70 base: Easing,
71 interfaces: [Rc<dyn IEasing>],
72 constructors: [() => || Rc::new(BounceEaseInOut::new())],
73});
74
75ferro_markup_type!(class BounceEaseOut {
76 namespace: "FerroUI.Animation.Easings",
77 handles: [Rc<BounceEaseOut>, Option<Rc<BounceEaseOut>>],
78 this: Rc<BounceEaseOut>,
79 base: Easing,
80 interfaces: [Rc<dyn IEasing>],
81 constructors: [() => || Rc::new(BounceEaseOut::new())],
82});
83
84ferro_markup_type!(class CircularEaseIn {
85 namespace: "FerroUI.Animation.Easings",
86 handles: [Rc<CircularEaseIn>, Option<Rc<CircularEaseIn>>],
87 this: Rc<CircularEaseIn>,
88 base: Easing,
89 interfaces: [Rc<dyn IEasing>],
90 constructors: [() => || Rc::new(CircularEaseIn::new())],
91});
92
93ferro_markup_type!(class CircularEaseInOut {
94 namespace: "FerroUI.Animation.Easings",
95 handles: [Rc<CircularEaseInOut>, Option<Rc<CircularEaseInOut>>],
96 this: Rc<CircularEaseInOut>,
97 base: Easing,
98 interfaces: [Rc<dyn IEasing>],
99 constructors: [() => || Rc::new(CircularEaseInOut::new())],
100});
101
102ferro_markup_type!(class CircularEaseOut {
103 namespace: "FerroUI.Animation.Easings",
104 handles: [Rc<CircularEaseOut>, Option<Rc<CircularEaseOut>>],
105 this: Rc<CircularEaseOut>,
106 base: Easing,
107 interfaces: [Rc<dyn IEasing>],
108 constructors: [() => || Rc::new(CircularEaseOut::new())],
109});
110
111ferro_markup_type!(class CubicEaseIn {
112 namespace: "FerroUI.Animation.Easings",
113 handles: [Rc<CubicEaseIn>, Option<Rc<CubicEaseIn>>],
114 this: Rc<CubicEaseIn>,
115 base: Easing,
116 interfaces: [Rc<dyn IEasing>],
117 constructors: [() => || Rc::new(CubicEaseIn::new())],
118});
119
120ferro_markup_type!(class CubicEaseInOut {
121 namespace: "FerroUI.Animation.Easings",
122 handles: [Rc<CubicEaseInOut>, Option<Rc<CubicEaseInOut>>],
123 this: Rc<CubicEaseInOut>,
124 base: Easing,
125 interfaces: [Rc<dyn IEasing>],
126 constructors: [() => || Rc::new(CubicEaseInOut::new())],
127});
128
129ferro_markup_type!(class CubicEaseOut {
130 namespace: "FerroUI.Animation.Easings",
131 handles: [Rc<CubicEaseOut>, Option<Rc<CubicEaseOut>>],
132 this: Rc<CubicEaseOut>,
133 base: Easing,
134 interfaces: [Rc<dyn IEasing>],
135 constructors: [() => || Rc::new(CubicEaseOut::new())],
136});
137
138ferro_markup_type!(class ElasticEaseIn {
139 namespace: "FerroUI.Animation.Easings",
140 handles: [Rc<ElasticEaseIn>, Option<Rc<ElasticEaseIn>>],
141 this: Rc<ElasticEaseIn>,
142 base: Easing,
143 interfaces: [Rc<dyn IEasing>],
144 constructors: [() => || Rc::new(ElasticEaseIn::new())],
145});
146
147ferro_markup_type!(class ElasticEaseInOut {
148 namespace: "FerroUI.Animation.Easings",
149 handles: [Rc<ElasticEaseInOut>, Option<Rc<ElasticEaseInOut>>],
150 this: Rc<ElasticEaseInOut>,
151 base: Easing,
152 interfaces: [Rc<dyn IEasing>],
153 constructors: [() => || Rc::new(ElasticEaseInOut::new())],
154});
155
156ferro_markup_type!(class ElasticEaseOut {
157 namespace: "FerroUI.Animation.Easings",
158 handles: [Rc<ElasticEaseOut>, Option<Rc<ElasticEaseOut>>],
159 this: Rc<ElasticEaseOut>,
160 base: Easing,
161 interfaces: [Rc<dyn IEasing>],
162 constructors: [() => || Rc::new(ElasticEaseOut::new())],
163});
164
165ferro_markup_type!(class ExponentialEaseIn {
166 namespace: "FerroUI.Animation.Easings",
167 handles: [Rc<ExponentialEaseIn>, Option<Rc<ExponentialEaseIn>>],
168 this: Rc<ExponentialEaseIn>,
169 base: Easing,
170 interfaces: [Rc<dyn IEasing>],
171 constructors: [() => || Rc::new(ExponentialEaseIn::new())],
172});
173
174ferro_markup_type!(class ExponentialEaseInOut {
175 namespace: "FerroUI.Animation.Easings",
176 handles: [Rc<ExponentialEaseInOut>, Option<Rc<ExponentialEaseInOut>>],
177 this: Rc<ExponentialEaseInOut>,
178 base: Easing,
179 interfaces: [Rc<dyn IEasing>],
180 constructors: [() => || Rc::new(ExponentialEaseInOut::new())],
181});
182
183ferro_markup_type!(class ExponentialEaseOut {
184 namespace: "FerroUI.Animation.Easings",
185 handles: [Rc<ExponentialEaseOut>, Option<Rc<ExponentialEaseOut>>],
186 this: Rc<ExponentialEaseOut>,
187 base: Easing,
188 interfaces: [Rc<dyn IEasing>],
189 constructors: [() => || Rc::new(ExponentialEaseOut::new())],
190});
191
192ferro_markup_type!(class LinearEasing {
193 namespace: "FerroUI.Animation.Easings",
194 handles: [Rc<LinearEasing>, Option<Rc<LinearEasing>>],
195 this: Rc<LinearEasing>,
196 base: Easing,
197 interfaces: [Rc<dyn IEasing>],
198 constructors: [() => || Rc::new(LinearEasing::new())],
199});
200
201ferro_markup_type!(class QuadraticEaseIn {
202 namespace: "FerroUI.Animation.Easings",
203 handles: [Rc<QuadraticEaseIn>, Option<Rc<QuadraticEaseIn>>],
204 this: Rc<QuadraticEaseIn>,
205 base: Easing,
206 interfaces: [Rc<dyn IEasing>],
207 constructors: [() => || Rc::new(QuadraticEaseIn::new())],
208});
209
210ferro_markup_type!(class QuadraticEaseInOut {
211 namespace: "FerroUI.Animation.Easings",
212 handles: [Rc<QuadraticEaseInOut>, Option<Rc<QuadraticEaseInOut>>],
213 this: Rc<QuadraticEaseInOut>,
214 base: Easing,
215 interfaces: [Rc<dyn IEasing>],
216 constructors: [() => || Rc::new(QuadraticEaseInOut::new())],
217});
218
219ferro_markup_type!(class QuadraticEaseOut {
220 namespace: "FerroUI.Animation.Easings",
221 handles: [Rc<QuadraticEaseOut>, Option<Rc<QuadraticEaseOut>>],
222 this: Rc<QuadraticEaseOut>,
223 base: Easing,
224 interfaces: [Rc<dyn IEasing>],
225 constructors: [() => || Rc::new(QuadraticEaseOut::new())],
226});
227
228ferro_markup_type!(class QuarticEaseIn {
229 namespace: "FerroUI.Animation.Easings",
230 handles: [Rc<QuarticEaseIn>, Option<Rc<QuarticEaseIn>>],
231 this: Rc<QuarticEaseIn>,
232 base: Easing,
233 interfaces: [Rc<dyn IEasing>],
234 constructors: [() => || Rc::new(QuarticEaseIn::new())],
235});
236
237ferro_markup_type!(class QuarticEaseInOut {
238 namespace: "FerroUI.Animation.Easings",
239 handles: [Rc<QuarticEaseInOut>, Option<Rc<QuarticEaseInOut>>],
240 this: Rc<QuarticEaseInOut>,
241 base: Easing,
242 interfaces: [Rc<dyn IEasing>],
243 constructors: [() => || Rc::new(QuarticEaseInOut::new())],
244});
245
246ferro_markup_type!(class QuarticEaseOut {
247 namespace: "FerroUI.Animation.Easings",
248 handles: [Rc<QuarticEaseOut>, Option<Rc<QuarticEaseOut>>],
249 this: Rc<QuarticEaseOut>,
250 base: Easing,
251 interfaces: [Rc<dyn IEasing>],
252 constructors: [() => || Rc::new(QuarticEaseOut::new())],
253});
254
255ferro_markup_type!(class QuinticEaseIn {
256 namespace: "FerroUI.Animation.Easings",
257 handles: [Rc<QuinticEaseIn>, Option<Rc<QuinticEaseIn>>],
258 this: Rc<QuinticEaseIn>,
259 base: Easing,
260 interfaces: [Rc<dyn IEasing>],
261 constructors: [() => || Rc::new(QuinticEaseIn::new())],
262});
263
264ferro_markup_type!(class QuinticEaseInOut {
265 namespace: "FerroUI.Animation.Easings",
266 handles: [Rc<QuinticEaseInOut>, Option<Rc<QuinticEaseInOut>>],
267 this: Rc<QuinticEaseInOut>,
268 base: Easing,
269 interfaces: [Rc<dyn IEasing>],
270 constructors: [() => || Rc::new(QuinticEaseInOut::new())],
271});
272
273ferro_markup_type!(class QuinticEaseOut {
274 namespace: "FerroUI.Animation.Easings",
275 handles: [Rc<QuinticEaseOut>, Option<Rc<QuinticEaseOut>>],
276 this: Rc<QuinticEaseOut>,
277 base: Easing,
278 interfaces: [Rc<dyn IEasing>],
279 constructors: [() => || Rc::new(QuinticEaseOut::new())],
280});
281
282ferro_markup_type!(class SineEaseIn {
283 namespace: "FerroUI.Animation.Easings",
284 handles: [Rc<SineEaseIn>, Option<Rc<SineEaseIn>>],
285 this: Rc<SineEaseIn>,
286 base: Easing,
287 interfaces: [Rc<dyn IEasing>],
288 constructors: [() => || Rc::new(SineEaseIn::new())],
289});
290
291ferro_markup_type!(class SineEaseInOut {
292 namespace: "FerroUI.Animation.Easings",
293 handles: [Rc<SineEaseInOut>, Option<Rc<SineEaseInOut>>],
294 this: Rc<SineEaseInOut>,
295 base: Easing,
296 interfaces: [Rc<dyn IEasing>],
297 constructors: [() => || Rc::new(SineEaseInOut::new())],
298});
299
300ferro_markup_type!(class SineEaseOut {
301 namespace: "FerroUI.Animation.Easings",
302 handles: [Rc<SineEaseOut>, Option<Rc<SineEaseOut>>],
303 this: Rc<SineEaseOut>,
304 base: Easing,
305 interfaces: [Rc<dyn IEasing>],
306 constructors: [() => || Rc::new(SineEaseOut::new())],
307});
308
309ferro_markup_type!(class SplineEasing {
310 namespace: "FerroUI.Animation.Easings",
311 handles: [Rc<SplineEasing>, Option<Rc<SplineEasing>>],
312 this: Rc<SplineEasing>,
313 base: Easing,
314 interfaces: [Rc<dyn IEasing>],
315 constructors: [
316 () => || Rc::new(SplineEasing::new()),
317 (f64, f64, f64, f64) => |x1: f64, y1: f64, x2: f64, y2: f64| Rc::new(SplineEasing::with_points(x1, y1, x2, y2)),
318 (Ref<KeySpline>) => |key_spline: Ref<KeySpline>| Rc::new(SplineEasing::with_key_spline(key_spline)),
319 ],
320 properties: [
321 X1: f64 { get: |e: &Rc<SplineEasing>| e.x1(), set: |e: &Rc<SplineEasing>, value: f64| e.set_x1(value) },
322 Y1: f64 { get: |e: &Rc<SplineEasing>| e.y1(), set: |e: &Rc<SplineEasing>, value: f64| e.set_y1(value) },
323 X2: f64 { get: |e: &Rc<SplineEasing>| e.x2(), set: |e: &Rc<SplineEasing>, value: f64| e.set_x2(value) },
324 Y2: f64 { get: |e: &Rc<SplineEasing>| e.y2(), set: |e: &Rc<SplineEasing>, value: f64| e.set_y2(value) },
325 ],
326});
327
328ferro_markup_type!(class SpringEasing {
329 namespace: "FerroUI.Animation.Easings",
330 handles: [Rc<SpringEasing>, Option<Rc<SpringEasing>>],
331 this: Rc<SpringEasing>,
332 base: Easing,
333 interfaces: [Rc<dyn IEasing>],
334 constructors: [
335 () => || Rc::new(SpringEasing::new()),
336 (f64, f64, f64, f64) => |mass: f64, stiffness: f64, damping: f64, initial_velocity: f64| {
337 Rc::new(SpringEasing::with_values(mass, stiffness, damping, initial_velocity))
338 },
339 ],
340 properties: [
341 Mass: f64 { get: |e: &Rc<SpringEasing>| e.mass(), set: |e: &Rc<SpringEasing>, value: f64| e.set_mass(value) },
342 Stiffness: f64 {
343 get: |e: &Rc<SpringEasing>| e.stiffness(),
344 set: |e: &Rc<SpringEasing>, value: f64| e.set_stiffness(value)
345 },
346 Damping: f64 {
347 get: |e: &Rc<SpringEasing>| e.damping(),
348 set: |e: &Rc<SpringEasing>, value: f64| e.set_damping(value)
349 },
350 InitialVelocity: f64 {
351 get: |e: &Rc<SpringEasing>| e.initial_velocity(),
352 set: |e: &Rc<SpringEasing>, value: f64| e.set_initial_velocity(value)
353 },
354 ],
355});
356
357ferro_markup_type!(class CrossFade {
360 namespace: "FerroUI.Animation",
361 handles: [Rc<CrossFade>, Option<Rc<CrossFade>>],
362 this: Rc<CrossFade>,
363 interfaces: [Rc<dyn IPageTransition>],
364 constructors: [
365 () => || Rc::new(CrossFade::new()),
366 (TimeSpan) => |duration: TimeSpan| Rc::new(CrossFade::with_duration(duration)),
367 ],
368 properties: [
369 Duration: TimeSpan {
370 get: |t: &Rc<CrossFade>| t.duration(),
371 set: |t: &Rc<CrossFade>, value: TimeSpan| t.set_duration(value)
372 },
373 FadeInEasing: Easing {
374 get: |t: &Rc<CrossFade>| t.fade_in_easing(),
375 set: |t: &Rc<CrossFade>, value: Easing| t.set_fade_in_easing(value)
376 },
377 FadeOutEasing: Easing {
378 get: |t: &Rc<CrossFade>| t.fade_out_easing(),
379 set: |t: &Rc<CrossFade>, value: Easing| t.set_fade_out_easing(value)
380 },
381 FillMode: FillMode {
382 get: |t: &Rc<CrossFade>| t.fill_mode(),
383 set: |t: &Rc<CrossFade>, value: FillMode| t.set_fill_mode(value)
384 },
385 ],
386});
387
388ferro_markup_type!(class PageSlide {
389 namespace: "FerroUI.Animation",
390 handles: [Rc<PageSlide>, Option<Rc<PageSlide>>],
391 this: Rc<PageSlide>,
392 interfaces: [Rc<dyn IPageTransition>],
393 constructors: [
394 () => || Rc::new(PageSlide::new()),
395 (TimeSpan, SlideAxis) => |duration: TimeSpan, orientation: SlideAxis| {
396 Rc::new(PageSlide::with_duration(duration, orientation))
397 },
398 ],
399 properties: [
400 Duration: TimeSpan {
401 get: |t: &Rc<PageSlide>| t.duration(),
402 set: |t: &Rc<PageSlide>, value: TimeSpan| t.set_duration(value)
403 },
404 Orientation: SlideAxis {
405 get: |t: &Rc<PageSlide>| t.orientation(),
406 set: |t: &Rc<PageSlide>, value: SlideAxis| t.set_orientation(value)
407 },
408 SlideInEasing: Easing {
409 get: |t: &Rc<PageSlide>| t.slide_in_easing(),
410 set: |t: &Rc<PageSlide>, value: Easing| t.set_slide_in_easing(value)
411 },
412 SlideOutEasing: Easing {
413 get: |t: &Rc<PageSlide>| t.slide_out_easing(),
414 set: |t: &Rc<PageSlide>, value: Easing| t.set_slide_out_easing(value)
415 },
416 FillMode: FillMode {
417 get: |t: &Rc<PageSlide>| t.fill_mode(),
418 set: |t: &Rc<PageSlide>, value: FillMode| t.set_fill_mode(value)
419 },
420 ],
421});
422
423ferro_markup_type!(class Rotate3DTransition {
426 namespace: "FerroUI.Animation",
427 handles: [Rc<Rotate3DTransition>, Option<Rc<Rotate3DTransition>>],
428 this: Rc<Rotate3DTransition>,
429 interfaces: [Rc<dyn IPageTransition>],
430 constructors: [
431 () => || Rc::new(Rotate3DTransition::new()),
432 (TimeSpan, SlideAxis, Option<f64>) => |duration: TimeSpan, orientation: SlideAxis, depth: Option<f64>| {
433 Rc::new(Rotate3DTransition::with_duration(duration, orientation, depth))
434 },
435 ],
436 properties: [
437 Depth: Option<f64> {
438 get: |t: &Rc<Rotate3DTransition>| t.depth(),
439 set: |t: &Rc<Rotate3DTransition>, value: Option<f64>| t.set_depth(value)
440 },
441 Duration: TimeSpan {
442 get: |t: &Rc<Rotate3DTransition>| t.duration(),
443 set: |t: &Rc<Rotate3DTransition>, value: TimeSpan| t.set_duration(value)
444 },
445 Orientation: SlideAxis {
446 get: |t: &Rc<Rotate3DTransition>| t.orientation(),
447 set: |t: &Rc<Rotate3DTransition>, value: SlideAxis| t.set_orientation(value)
448 },
449 SlideInEasing: Easing {
450 get: |t: &Rc<Rotate3DTransition>| t.slide_in_easing(),
451 set: |t: &Rc<Rotate3DTransition>, value: Easing| t.set_slide_in_easing(value)
452 },
453 SlideOutEasing: Easing {
454 get: |t: &Rc<Rotate3DTransition>| t.slide_out_easing(),
455 set: |t: &Rc<Rotate3DTransition>, value: Easing| t.set_slide_out_easing(value)
456 },
457 FillMode: FillMode {
458 get: |t: &Rc<Rotate3DTransition>| t.fill_mode(),
459 set: |t: &Rc<Rotate3DTransition>, value: FillMode| t.set_fill_mode(value)
460 },
461 ],
462});
463
464ferro_markup_type!(class CompositePageTransition {
468 namespace: "FerroUI.Animation",
469 handles: [Rc<CompositePageTransition>, Option<Rc<CompositePageTransition>>],
470 this: Rc<CompositePageTransition>,
471 interfaces: [Rc<dyn IPageTransition>],
472 constructors: [() => || Rc::new(CompositePageTransition::new())],
473 methods: [
474 fn Add(Rc<dyn IPageTransition>) =>
475 |t: &Rc<CompositePageTransition>, transition: Rc<dyn IPageTransition>| t.add(transition),
476 ],
477});
478
479pub(super) const TYPES: &[&MarkupType] = &[
481 <BackEaseIn as MarkupTyped>::MARKUP,
482 <BackEaseInOut as MarkupTyped>::MARKUP,
483 <BackEaseOut as MarkupTyped>::MARKUP,
484 <BounceEaseIn as MarkupTyped>::MARKUP,
485 <BounceEaseInOut as MarkupTyped>::MARKUP,
486 <BounceEaseOut as MarkupTyped>::MARKUP,
487 <CircularEaseIn as MarkupTyped>::MARKUP,
488 <CircularEaseInOut as MarkupTyped>::MARKUP,
489 <CircularEaseOut as MarkupTyped>::MARKUP,
490 <CubicEaseIn as MarkupTyped>::MARKUP,
491 <CubicEaseInOut as MarkupTyped>::MARKUP,
492 <CubicEaseOut as MarkupTyped>::MARKUP,
493 <ElasticEaseIn as MarkupTyped>::MARKUP,
494 <ElasticEaseInOut as MarkupTyped>::MARKUP,
495 <ElasticEaseOut as MarkupTyped>::MARKUP,
496 <ExponentialEaseIn as MarkupTyped>::MARKUP,
497 <ExponentialEaseInOut as MarkupTyped>::MARKUP,
498 <ExponentialEaseOut as MarkupTyped>::MARKUP,
499 <LinearEasing as MarkupTyped>::MARKUP,
500 <QuadraticEaseIn as MarkupTyped>::MARKUP,
501 <QuadraticEaseInOut as MarkupTyped>::MARKUP,
502 <QuadraticEaseOut as MarkupTyped>::MARKUP,
503 <QuarticEaseIn as MarkupTyped>::MARKUP,
504 <QuarticEaseInOut as MarkupTyped>::MARKUP,
505 <QuarticEaseOut as MarkupTyped>::MARKUP,
506 <QuinticEaseIn as MarkupTyped>::MARKUP,
507 <QuinticEaseInOut as MarkupTyped>::MARKUP,
508 <QuinticEaseOut as MarkupTyped>::MARKUP,
509 <SineEaseIn as MarkupTyped>::MARKUP,
510 <SineEaseInOut as MarkupTyped>::MARKUP,
511 <SineEaseOut as MarkupTyped>::MARKUP,
512 <SplineEasing as MarkupTyped>::MARKUP,
513 <SpringEasing as MarkupTyped>::MARKUP,
514 <CrossFade as MarkupTyped>::MARKUP,
515 <PageSlide as MarkupTyped>::MARKUP,
516 <Rotate3DTransition as MarkupTyped>::MARKUP,
517 <CompositePageTransition as MarkupTyped>::MARKUP,
518];
519
520pub(super) fn register_value_types() {
525 ValueTypes::register_cast::<Easing, Rc<dyn IEasing>>(|easing| easing.as_rc().clone());
527 ValueTypes::register_cast::<Rc<dyn IEasing>, Easing>(|easing| Easing::from_rc(easing.clone()));
528 ValueTypes::register_nullable::<Rc<BackEaseIn>>();
529 ValueTypes::register_cast::<Rc<BackEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
530 ValueTypes::register_cast::<Rc<BackEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
531 ValueTypes::register_nullable::<Rc<BackEaseInOut>>();
532 ValueTypes::register_cast::<Rc<BackEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
533 ValueTypes::register_cast::<Rc<BackEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
534 ValueTypes::register_nullable::<Rc<BackEaseOut>>();
535 ValueTypes::register_cast::<Rc<BackEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
536 ValueTypes::register_cast::<Rc<BackEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
537 ValueTypes::register_nullable::<Rc<BounceEaseIn>>();
538 ValueTypes::register_cast::<Rc<BounceEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
539 ValueTypes::register_cast::<Rc<BounceEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
540 ValueTypes::register_nullable::<Rc<BounceEaseInOut>>();
541 ValueTypes::register_cast::<Rc<BounceEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
542 ValueTypes::register_cast::<Rc<BounceEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
543 ValueTypes::register_nullable::<Rc<BounceEaseOut>>();
544 ValueTypes::register_cast::<Rc<BounceEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
545 ValueTypes::register_cast::<Rc<BounceEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
546 ValueTypes::register_nullable::<Rc<CircularEaseIn>>();
547 ValueTypes::register_cast::<Rc<CircularEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
548 ValueTypes::register_cast::<Rc<CircularEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
549 ValueTypes::register_nullable::<Rc<CircularEaseInOut>>();
550 ValueTypes::register_cast::<Rc<CircularEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
551 ValueTypes::register_cast::<Rc<CircularEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
552 ValueTypes::register_nullable::<Rc<CircularEaseOut>>();
553 ValueTypes::register_cast::<Rc<CircularEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
554 ValueTypes::register_cast::<Rc<CircularEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
555 ValueTypes::register_nullable::<Rc<CubicEaseIn>>();
556 ValueTypes::register_cast::<Rc<CubicEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
557 ValueTypes::register_cast::<Rc<CubicEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
558 ValueTypes::register_nullable::<Rc<CubicEaseInOut>>();
559 ValueTypes::register_cast::<Rc<CubicEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
560 ValueTypes::register_cast::<Rc<CubicEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
561 ValueTypes::register_nullable::<Rc<CubicEaseOut>>();
562 ValueTypes::register_cast::<Rc<CubicEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
563 ValueTypes::register_cast::<Rc<CubicEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
564 ValueTypes::register_nullable::<Rc<ElasticEaseIn>>();
565 ValueTypes::register_cast::<Rc<ElasticEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
566 ValueTypes::register_cast::<Rc<ElasticEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
567 ValueTypes::register_nullable::<Rc<ElasticEaseInOut>>();
568 ValueTypes::register_cast::<Rc<ElasticEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
569 ValueTypes::register_cast::<Rc<ElasticEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
570 ValueTypes::register_nullable::<Rc<ElasticEaseOut>>();
571 ValueTypes::register_cast::<Rc<ElasticEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
572 ValueTypes::register_cast::<Rc<ElasticEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
573 ValueTypes::register_nullable::<Rc<ExponentialEaseIn>>();
574 ValueTypes::register_cast::<Rc<ExponentialEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
575 ValueTypes::register_cast::<Rc<ExponentialEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
576 ValueTypes::register_nullable::<Rc<ExponentialEaseInOut>>();
577 ValueTypes::register_cast::<Rc<ExponentialEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
578 ValueTypes::register_cast::<Rc<ExponentialEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
579 ValueTypes::register_nullable::<Rc<ExponentialEaseOut>>();
580 ValueTypes::register_cast::<Rc<ExponentialEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
581 ValueTypes::register_cast::<Rc<ExponentialEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
582 ValueTypes::register_nullable::<Rc<LinearEasing>>();
583 ValueTypes::register_cast::<Rc<LinearEasing>, Easing>(|easing| Easing::from_rc(easing.clone()));
584 ValueTypes::register_cast::<Rc<LinearEasing>, Rc<dyn IEasing>>(|easing| easing.clone());
585 ValueTypes::register_nullable::<Rc<QuadraticEaseIn>>();
586 ValueTypes::register_cast::<Rc<QuadraticEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
587 ValueTypes::register_cast::<Rc<QuadraticEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
588 ValueTypes::register_nullable::<Rc<QuadraticEaseInOut>>();
589 ValueTypes::register_cast::<Rc<QuadraticEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
590 ValueTypes::register_cast::<Rc<QuadraticEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
591 ValueTypes::register_nullable::<Rc<QuadraticEaseOut>>();
592 ValueTypes::register_cast::<Rc<QuadraticEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
593 ValueTypes::register_cast::<Rc<QuadraticEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
594 ValueTypes::register_nullable::<Rc<QuarticEaseIn>>();
595 ValueTypes::register_cast::<Rc<QuarticEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
596 ValueTypes::register_cast::<Rc<QuarticEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
597 ValueTypes::register_nullable::<Rc<QuarticEaseInOut>>();
598 ValueTypes::register_cast::<Rc<QuarticEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
599 ValueTypes::register_cast::<Rc<QuarticEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
600 ValueTypes::register_nullable::<Rc<QuarticEaseOut>>();
601 ValueTypes::register_cast::<Rc<QuarticEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
602 ValueTypes::register_cast::<Rc<QuarticEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
603 ValueTypes::register_nullable::<Rc<QuinticEaseIn>>();
604 ValueTypes::register_cast::<Rc<QuinticEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
605 ValueTypes::register_cast::<Rc<QuinticEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
606 ValueTypes::register_nullable::<Rc<QuinticEaseInOut>>();
607 ValueTypes::register_cast::<Rc<QuinticEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
608 ValueTypes::register_cast::<Rc<QuinticEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
609 ValueTypes::register_nullable::<Rc<QuinticEaseOut>>();
610 ValueTypes::register_cast::<Rc<QuinticEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
611 ValueTypes::register_cast::<Rc<QuinticEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
612 ValueTypes::register_nullable::<Rc<SineEaseIn>>();
613 ValueTypes::register_cast::<Rc<SineEaseIn>, Easing>(|easing| Easing::from_rc(easing.clone()));
614 ValueTypes::register_cast::<Rc<SineEaseIn>, Rc<dyn IEasing>>(|easing| easing.clone());
615 ValueTypes::register_nullable::<Rc<SineEaseInOut>>();
616 ValueTypes::register_cast::<Rc<SineEaseInOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
617 ValueTypes::register_cast::<Rc<SineEaseInOut>, Rc<dyn IEasing>>(|easing| easing.clone());
618 ValueTypes::register_nullable::<Rc<SineEaseOut>>();
619 ValueTypes::register_cast::<Rc<SineEaseOut>, Easing>(|easing| Easing::from_rc(easing.clone()));
620 ValueTypes::register_cast::<Rc<SineEaseOut>, Rc<dyn IEasing>>(|easing| easing.clone());
621 ValueTypes::register_nullable::<Rc<SplineEasing>>();
622 ValueTypes::register_cast::<Rc<SplineEasing>, Easing>(|easing| Easing::from_rc(easing.clone()));
623 ValueTypes::register_cast::<Rc<SplineEasing>, Rc<dyn IEasing>>(|easing| easing.clone());
624 ValueTypes::register_nullable::<Rc<SpringEasing>>();
625 ValueTypes::register_cast::<Rc<SpringEasing>, Easing>(|easing| Easing::from_rc(easing.clone()));
626 ValueTypes::register_cast::<Rc<SpringEasing>, Rc<dyn IEasing>>(|easing| easing.clone());
627 ValueTypes::register_nullable::<Rc<CrossFade>>();
628 ValueTypes::register_cast::<Rc<CrossFade>, Rc<dyn IPageTransition>>(|transition| transition.clone());
629 ValueTypes::register_nullable::<Rc<PageSlide>>();
630 ValueTypes::register_cast::<Rc<PageSlide>, Rc<dyn IPageTransition>>(|transition| transition.clone());
631 ValueTypes::register_nullable::<Rc<Rotate3DTransition>>();
632 ValueTypes::register_cast::<Rc<Rotate3DTransition>, Rc<dyn IPageTransition>>(|transition| transition.clone());
633 ValueTypes::register_nullable::<Rc<CompositePageTransition>>();
634 ValueTypes::register_cast::<Rc<CompositePageTransition>, Rc<dyn IPageTransition>>(|transition| transition.clone());
635}