1#![allow(deprecated)]
16
17use super::plain::{new_resource_key, property_value};
18use crate::animation::*;
19use crate::collections::*;
20use crate::controls::*;
21use crate::data::core::ValueTypes;
22use crate::data::{BindingBase, BindingExpressionBase, BindingPriority};
23use crate::input::gesture_recognizers::*;
24use crate::input::text_input::*;
25use crate::input::*;
26use crate::interactivity::*;
27use crate::layout::*;
28use crate::logical_tree::*;
29use crate::media::effects::*;
30use crate::media::imaging::*;
31use crate::media::*;
32use crate::ferro_class_info;
33use crate::metadata::{into_markup_value, MarkupDelegate, MarkupType};
34use crate::reactive::IDisposable;
35use crate::styling::*;
36use crate::utilities::EventArgs;
37use crate::*;
38use std::rc::Rc;
39use crate::ferro_markup_type;
40use crate::metadata::MarkupTyped;
41
42ferro_class_info!(FerroObject {
45 markup: {
46 namespace: "FerroUI",
47 methods: [
48 fn Bind(&'static FerroProperty, Rc<dyn BindingBase>) -> Rc<dyn BindingExpressionBase> =>
49 |this: &Ref<FerroObject>, property: &'static FerroProperty, binding: Rc<dyn BindingBase>| {
50 this.bind_binding(property, &*binding)
51 },
52 try fn SetValue(&'static FerroProperty, Option<BoxedValue>, BindingPriority) -> Option<Rc<dyn IDisposable>> =>
53 |this: &Ref<FerroObject>, property: &'static FerroProperty, value: Option<BoxedValue>, priority: BindingPriority| {
54 property_value(property, value).map(|value| this.set_value_untyped(property, value.as_any(), priority))
56 },
57 ],
58 events: [
59 PropertyChanged(Option<BoxedValue>, OwnedFerroPropertyChangedEventArgs) => |this: &Ref<FerroObject>, handler: MarkupDelegate| {
61 let sender = this.downgrade();
62 this.property_changed(move |e: &FerroPropertyChangedEventArgs<'_>| {
63 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.to_owned_args())]);
64 })
65 },
66 ],
67 },
68});
69
70ferro_class_info!(StyledElement {
71 markup: {
72 namespace: "FerroUI",
73 properties: [
74 Classes: Classes { get: StyledElement::classes },
75 Styles: Ref<Styles> { get: StyledElement::styles },
76 Resources: Rc<dyn IResourceDictionary> {
77 get: |this: &Ref<StyledElement>| -> Rc<dyn IResourceDictionary> { this.resources().into() },
78 try_set: |this: &Ref<StyledElement>, value: Rc<dyn IResourceDictionary>| {
79 match value.as_object().and_then(|object| object.to_ref().cast::<ResourceDictionary>()) {
80 Some(dictionary) => Ok(this.set_resources(dictionary)),
81 None => Err("The resource dictionary is not a ResourceDictionary."),
82 }
83 }
84 },
85 ],
86 events: [
87 AttachedToLogicalTree(Option<BoxedValue>, LogicalTreeAttachmentEventArgs) => |this: &Ref<StyledElement>, handler: MarkupDelegate| {
88 let sender = this.downgrade();
89 this.attached_to_logical_tree(move |e: &LogicalTreeAttachmentEventArgs| {
90 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.clone())]);
91 })
92 },
93 DetachedFromLogicalTree(Option<BoxedValue>, LogicalTreeAttachmentEventArgs) => |this: &Ref<StyledElement>, handler: MarkupDelegate| {
94 let sender = this.downgrade();
95 this.detached_from_logical_tree(move |e: &LogicalTreeAttachmentEventArgs| {
96 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.clone())]);
97 })
98 },
99 DataContextChanged(Option<BoxedValue>, EventArgs) => |this: &Ref<StyledElement>, handler: MarkupDelegate| {
100 let sender = this.downgrade();
101 this.data_context_changed(move || {
102 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
103 })
104 },
105 Initialized(Option<BoxedValue>, EventArgs) => |this: &Ref<StyledElement>, handler: MarkupDelegate| {
106 let sender = this.downgrade();
107 this.initialized(move || {
108 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
109 })
110 },
111 ResourcesChanged(Option<BoxedValue>, ResourcesChangedEventArgs) => |this: &Ref<StyledElement>, handler: MarkupDelegate| {
112 let sender = this.downgrade();
113 this.resources_changed(move |e: &ResourcesChangedEventArgs| {
114 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.clone())]);
115 })
116 },
117 ActualThemeVariantChanged(Option<BoxedValue>, EventArgs) => |this: &Ref<StyledElement>, handler: MarkupDelegate| {
118 let sender = this.downgrade();
119 this.actual_theme_variant_changed(move || {
120 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
121 })
122 },
123 ],
124 },
125});
126
127ferro_class_info!(Visual {
128 markup: {
129 namespace: "FerroUI",
130 properties: [
131 FlowDirection: FlowDirection {
132 get: |this: &Ref<Visual>| this.get_value(Visual::flow_direction_property()),
133 set: |this: &Ref<Visual>, value: FlowDirection| this.set_value(Visual::flow_direction_property(), value)
134 },
135 ],
136 events: [
137 AttachedToVisualTree(Option<BoxedValue>, VisualTreeAttachmentEventArgs) => |this: &Ref<Visual>, handler: MarkupDelegate| {
138 let sender = this.downgrade();
139 this.attached_to_visual_tree(move |e: &VisualTreeAttachmentEventArgs| {
140 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.clone())]);
141 })
142 },
143 DetachedFromVisualTree(Option<BoxedValue>, VisualTreeAttachmentEventArgs) => |this: &Ref<Visual>, handler: MarkupDelegate| {
144 let sender = this.downgrade();
145 this.detached_from_visual_tree(move |e: &VisualTreeAttachmentEventArgs| {
146 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.clone())]);
147 })
148 },
149 ],
150 attributes: [UsableDuringInitialization],
151 },
152});
153
154ferro_class_info!(Animation {
157 markup: {
158 namespace: "FerroUI.Animation",
159 content: Children,
160 properties: [
161 Children: KeyFrames { get: Animation::children },
162 ],
163 methods: [
164 static fn SetAnimator(Rc<dyn IAnimationSetter>, Rc<dyn ICustomAnimator>) =>
165 |setter: Rc<dyn IAnimationSetter>, value: Rc<dyn ICustomAnimator>| Animation::set_animator(&setter, value),
166 ],
167 },
168});
169
170ferro_class_info!(AnimatorKeyFrame {
171 markup: {
172 namespace: "FerroUI.Animation",
173 properties: [
174 FillBefore: bool { get: AnimatorKeyFrame::fill_before, set: AnimatorKeyFrame::set_fill_before },
175 FillAfter: bool { get: AnimatorKeyFrame::fill_after, set: AnimatorKeyFrame::set_fill_after },
176 ],
177 },
178});
179
180ferro_class_info!(KeyFrame {
181 markup: {
182 namespace: "FerroUI.Animation",
183 content: Setters,
184 properties: [
185 Setters: FerroList<Rc<dyn IAnimationSetter>> { get: KeyFrame::setters },
186 KeyTime: TimeSpan { get: KeyFrame::key_time, set: KeyFrame::set_key_time },
187 Cue: Cue { get: KeyFrame::cue, set: KeyFrame::set_cue },
188 KeySpline: Option<Ref<KeySpline>> { get: KeyFrame::key_spline, set: KeyFrame::set_key_spline },
189 ],
190 },
191});
192
193ferro_class_info!(KeySpline {
194 markup: {
195 namespace: "FerroUI.Animation",
196 parse: KeySpline::parse,
197 constructors: [
198 (f64, f64, f64, f64) => KeySpline::with_points,
199 ],
200 properties: [
201 ControlPointX1: f64 { get: KeySpline::control_point_x1, set: KeySpline::set_control_point_x1 },
202 ControlPointY1: f64 { get: KeySpline::control_point_y1, set: KeySpline::set_control_point_y1 },
203 ControlPointX2: f64 { get: KeySpline::control_point_x2, set: KeySpline::set_control_point_x2 },
204 ControlPointY2: f64 { get: KeySpline::control_point_y2, set: KeySpline::set_control_point_y2 },
205 ],
206 },
207});
208
209ferro_markup_type!(static NameScope {
212 namespace: "FerroUI.Controls",
213 type_info: NameScope,
214 methods: [
215 static fn GetNameScope(Ref<StyledElement>) -> Option<NameScopeRef> =>
216 |styled: Ref<StyledElement>| NameScope::get_name_scope(&styled),
217 static fn SetNameScope(Ref<StyledElement>, Option<NameScopeRef>) =>
218 |styled: Ref<StyledElement>, scope: Option<NameScopeRef>| NameScope::set_name_scope(&styled, scope),
219 ],
220});
221
222ferro_class_info!(ResourceDictionary {
225 markup: {
226 namespace: "FerroUI.Controls",
227 properties: [
228 Count: i32 { get: |this: &Ref<ResourceDictionary>| this.count() as i32 },
229 MergedDictionaries: FerroList<Rc<dyn IResourceProvider>> { get: ResourceDictionary::merged_dictionaries },
230 ThemeDictionaries: FerroDictionary<ThemeVariant, Rc<dyn IThemeVariantProvider>> { get: ResourceDictionary::theme_dictionaries },
231 ],
232 methods: [
233 try fn Add(Option<BoxedValue>, Option<BoxedValue>) =>
234 |this: &Ref<ResourceDictionary>, key: Option<BoxedValue>, value: Option<BoxedValue>| {
235 new_resource_key(this, key).map(|key| this.add(key, value))
236 },
237 try fn AddDeferred(Option<BoxedValue>, Rc<dyn IDeferredContent>) =>
238 |this: &Ref<ResourceDictionary>, key: Option<BoxedValue>, content: Rc<dyn IDeferredContent>| {
239 new_resource_key(this, key).map(|key| this.add_deferred(key, content))
240 },
241 try fn AddNotSharedDeferred(Option<BoxedValue>, Rc<dyn IDeferredContent>) =>
242 |this: &Ref<ResourceDictionary>, key: Option<BoxedValue>, content: Rc<dyn IDeferredContent>| {
243 new_resource_key(this, key).map(|key| this.add_not_shared_deferred(key, content))
244 },
245 fn EnsureCapacity(i32) =>
246 |this: &Ref<ResourceDictionary>, capacity: i32| this.ensure_capacity(capacity.max(0) as usize),
247 ],
248 },
249});
250
251ferro_class_info!(ResourceProvider {
252 markup: {
253 namespace: "FerroUI.Controls",
254 events: [
255 OwnerChanged(Option<BoxedValue>, EventArgs) => |this: &Ref<ResourceProvider>, handler: MarkupDelegate| {
256 let sender = this.downgrade();
257 this.owner_changed(move || {
258 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
259 })
260 },
261 ],
262 },
263});
264
265ferro_markup_type!(static AccessKeyHandler {
268 namespace: "FerroUI.Input",
269 type_info: AccessKeyHandler,
270 fields: [
271 AccessKeyEvent: RoutedEvent<AccessKeyEventArgs> => || *AccessKeyHandler::access_key_event(),
272 AccessKeyPressedEvent: RoutedEvent<AccessKeyPressedEventArgs> => || *AccessKeyHandler::access_key_pressed_event(),
273 ],
274});
275
276ferro_markup_type!(static DragDrop {
277 namespace: "FerroUI.Input",
278 type_info: DragDrop,
279 fields: [
280 DragEnterEvent: RoutedEvent<DragEventArgs> => || *DragDrop::drag_enter_event(),
281 DragLeaveEvent: RoutedEvent<DragEventArgs> => || *DragDrop::drag_leave_event(),
282 DragOverEvent: RoutedEvent<DragEventArgs> => || *DragDrop::drag_over_event(),
283 DropEvent: RoutedEvent<DragEventArgs> => || *DragDrop::drop_event(),
284 ],
285});
286
287ferro_class_info!(InputElement {
288 markup: {
289 namespace: "FerroUI.Input",
290 properties: [
291 KeyBindings: FerroList<Ref<KeyBinding>> { get: InputElement::key_bindings },
292 GestureRecognizers: GestureRecognizerCollection { get: InputElement::gesture_recognizers },
293 ],
294 fields: [
295 PinchEvent: RoutedEvent<PinchEventArgs> => || *InputElement::pinch_event(),
296 PinchEndedEvent: RoutedEvent<PinchEndedEventArgs> => || *InputElement::pinch_ended_event(),
297 PullGestureEvent: RoutedEvent<PullGestureEventArgs> => || *InputElement::pull_gesture_event(),
298 PullGestureEndedEvent: RoutedEvent<PullGestureEndedEventArgs> => || *InputElement::pull_gesture_ended_event(),
299 SwipeGestureEvent: RoutedEvent<SwipeGestureEventArgs> => || *InputElement::swipe_gesture_event(),
300 SwipeGestureEndedEvent: RoutedEvent<SwipeGestureEndedEventArgs> => || *InputElement::swipe_gesture_ended_event(),
301 ScrollGestureEvent: RoutedEvent<ScrollGestureEventArgs> => || *InputElement::scroll_gesture_event(),
302 ScrollGestureInertiaStartingEvent: RoutedEvent<ScrollGestureInertiaStartingEventArgs> => || *InputElement::scroll_gesture_inertia_starting_event(),
303 ScrollGestureEndedEvent: RoutedEvent<ScrollGestureEndedEventArgs> => || *InputElement::scroll_gesture_ended_event(),
304 PointerTouchPadGestureMagnifyEvent: RoutedEvent<PointerDeltaEventArgs> => || *InputElement::pointer_touch_pad_gesture_magnify_event(),
305 PointerTouchPadGestureRotateEvent: RoutedEvent<PointerDeltaEventArgs> => || *InputElement::pointer_touch_pad_gesture_rotate_event(),
306 PointerTouchPadGestureSwipeEvent: RoutedEvent<PointerDeltaEventArgs> => || *InputElement::pointer_touch_pad_gesture_swipe_event(),
307 TappedEvent: RoutedEvent<TappedEventArgs> => || *InputElement::tapped_event(),
308 RightTappedEvent: RoutedEvent<TappedEventArgs> => || *InputElement::right_tapped_event(),
309 HoldingEvent: RoutedEvent<HoldingRoutedEventArgs> => || *InputElement::holding_event(),
310 DoubleTappedEvent: RoutedEvent<TappedEventArgs> => || *InputElement::double_tapped_event(),
311 GotFocusEvent: RoutedEvent<FocusChangedEventArgs> => || *InputElement::got_focus_event(),
312 GettingFocusEvent: RoutedEvent<FocusChangingEventArgs> => || *InputElement::getting_focus_event(),
313 LostFocusEvent: RoutedEvent<FocusChangedEventArgs> => || *InputElement::lost_focus_event(),
314 LosingFocusEvent: RoutedEvent<FocusChangingEventArgs> => || *InputElement::losing_focus_event(),
315 KeyDownEvent: RoutedEvent<KeyEventArgs> => || *InputElement::key_down_event(),
316 KeyUpEvent: RoutedEvent<KeyEventArgs> => || *InputElement::key_up_event(),
317 TextInputEvent: RoutedEvent<TextInputEventArgs> => || *InputElement::text_input_event(),
318 TextInputMethodClientRequestedEvent: RoutedEvent<TextInputMethodClientRequestedEventArgs> => || *InputElement::text_input_method_client_requested_event(),
319 PointerEnteredEvent: RoutedEvent<PointerEventArgs> => || *InputElement::pointer_entered_event(),
320 PointerExitedEvent: RoutedEvent<PointerEventArgs> => || *InputElement::pointer_exited_event(),
321 PointerMovedEvent: RoutedEvent<PointerEventArgs> => || *InputElement::pointer_moved_event(),
322 PointerPressedEvent: RoutedEvent<PointerPressedEventArgs> => || *InputElement::pointer_pressed_event(),
323 PointerReleasedEvent: RoutedEvent<PointerReleasedEventArgs> => || *InputElement::pointer_released_event(),
324 PointerCaptureLostEvent: RoutedEvent<PointerCaptureLostEventArgs> => || *InputElement::pointer_capture_lost_event(),
325 PointerWheelChangedEvent: RoutedEvent<PointerWheelEventArgs> => || *InputElement::pointer_wheel_changed_event(),
326 ContextRequestedEvent: RoutedEvent<ContextRequestedEventArgs> => || *InputElement::context_requested_event(),
327 ContextCanceledEvent: RoutedEvent<RoutedEventArgs> => || *InputElement::context_canceled_event(),
328 ],
329 attributes: [PseudoClasses(":disabled", ":focus", ":focus-visible", ":focus-within", ":pointerover")],
330 },
331});
332
333ferro_markup_type!(static InputMethod {
334 namespace: "FerroUI.Input",
335 type_info: InputMethod,
336 fields: [
337 TextInputMethodClientRequeryRequestedEvent: RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs> => || *InputMethod::text_input_method_client_requery_requested_event(),
338 ],
339});
340
341ferro_class_info!(PullGestureRecognizer {
344 markup: {
345 namespace: "FerroUI.Input.GestureRecognizers",
346 constructors: [
347 (PullDirection) => PullGestureRecognizer::with_direction,
348 ],
349 },
350});
351
352ferro_class_info!(Layoutable {
355 markup: {
356 namespace: "FerroUI.Layout",
357 events: [
358 EffectiveViewportChanged(Option<BoxedValue>, EffectiveViewportChangedEventArgs) => |this: &Ref<Layoutable>, handler: MarkupDelegate| {
359 let sender = this.downgrade();
360 this.effective_viewport_changed(move |e: &EffectiveViewportChangedEventArgs| {
361 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(e.clone())]);
362 })
363 },
364 LayoutUpdated(Option<BoxedValue>, EventArgs) => |this: &Ref<Layoutable>, handler: MarkupDelegate| {
365 let sender = this.downgrade();
366 this.layout_updated(move || {
367 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
368 })
369 },
370 ],
371 },
372});
373
374ferro_class_info!(CacheMode {
377 markup: {
378 namespace: "FerroUI.Media",
379 parse: CacheMode::parse,
380 },
381});
382
383ferro_class_info!(CombinedGeometry {
384 markup: {
385 namespace: "FerroUI.Media",
386 constructors: [
387 (Ref<Geometry>, Ref<Geometry>) => CombinedGeometry::with_geometries,
388 (GeometryCombineMode, Option<Ref<Geometry>>, Option<Ref<Geometry>>) => CombinedGeometry::with_mode,
389 (GeometryCombineMode, Option<Ref<Geometry>>, Option<Ref<Geometry>>, Option<Ref<Transform>>) =>
390 |mode: GeometryCombineMode, a: Option<Ref<Geometry>>, b: Option<Ref<Geometry>>, t: Option<Ref<Transform>>| {
391 CombinedGeometry::with_mode_and_transform(mode, a, b, t)
392 },
393 ],
394 },
395});
396
397ferro_class_info!(DashStyle {
398 markup: {
399 namespace: "FerroUI.Media",
400 constructors: [
401 (Option<MediaCollection<f64>>, f64) => |dashes: Option<MediaCollection<f64>>, offset: f64| {
402 DashStyle::with_dash_list(dashes.unwrap_or_default(), offset)
403 },
404 ],
405 static_properties: [
406 Dash: Rc<dyn IDashStyle> { get: || -> Rc<dyn IDashStyle> { DashStyle::dash() } },
407 Dot: Rc<dyn IDashStyle> { get: || -> Rc<dyn IDashStyle> { DashStyle::dot() } },
408 DashDot: Rc<dyn IDashStyle> { get: || -> Rc<dyn IDashStyle> { DashStyle::dash_dot() } },
409 DashDotDot: Rc<dyn IDashStyle> { get: || -> Rc<dyn IDashStyle> { DashStyle::dash_dot_dot() } },
410 ],
411 },
412});
413
414ferro_class_info!(DrawingBrush {
415 markup: {
416 namespace: "FerroUI.Media",
417 constructors: [
418 (Ref<Drawing>) => |drawing: Ref<Drawing>| DrawingBrush::with_drawing(drawing),
419 ],
420 },
421});
422
423ferro_class_info!(DrawingGroup {
424 markup: {
425 namespace: "FerroUI.Media",
426 content: Children,
427 },
428});
429
430ferro_class_info!(DrawingImage {
431 markup: {
432 namespace: "FerroUI.Media",
433 content: Drawing,
434 constructors: [
435 (Ref<Drawing>) => |drawing: Ref<Drawing>| DrawingImage::with_drawing(drawing),
436 ],
437 events: [
438 Invalidated(Option<BoxedValue>, EventArgs) => |this: &Ref<DrawingImage>, handler: MarkupDelegate| {
439 let sender = this.downgrade();
440 this.invalidated(move || {
441 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
442 })
443 },
444 ],
445 },
446});
447
448ferro_class_info!(Effect {
449 markup: {
450 namespace: "FerroUI.Media",
451 events: [
452 Invalidated(Option<BoxedValue>, EventArgs) => |this: &Ref<Effect>, handler: MarkupDelegate| {
453 let sender = this.downgrade();
454 this.invalidated(move || {
455 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
456 })
457 },
458 ],
459 },
460});
461
462ferro_class_info!(EllipseGeometry {
463 markup: {
464 namespace: "FerroUI.Media",
465 constructors: [
466 (Rect) => EllipseGeometry::with_rect,
467 ],
468 },
469});
470
471ferro_class_info!(ExperimentalAcrylicMaterial {
472 markup: {
473 namespace: "FerroUI.Media",
474 events: [
475 Invalidated(Option<BoxedValue>, EventArgs) => |this: &Ref<ExperimentalAcrylicMaterial>, handler: MarkupDelegate| {
476 let sender = this.downgrade();
477 this.invalidated(move || {
478 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
479 })
480 },
481 ],
482 },
483});
484
485ferro_class_info!(Geometry {
486 markup: {
487 namespace: "FerroUI.Media",
488 parse: Geometry::parse,
489 events: [
490 Changed(Option<BoxedValue>, EventArgs) => |this: &Ref<Geometry>, handler: MarkupDelegate| {
491 let sender = this.downgrade();
492 this.changed(move || {
493 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
494 })
495 },
496 ],
497 },
498});
499
500ferro_class_info!(GeometryDrawing {
501 markup: {
502 namespace: "FerroUI.Media",
503 content: Geometry,
504 },
505});
506
507ferro_class_info!(GeometryGroup {
508 markup: {
509 namespace: "FerroUI.Media",
510 content: Children,
511 },
512});
513
514ferro_class_info!(GradientBrush {
515 markup: {
516 namespace: "FerroUI.Media",
517 content: GradientStops,
518 },
519});
520
521ferro_class_info!(GradientStop {
522 markup: {
523 namespace: "FerroUI.Media",
524 constructors: [
525 (Color, f64) => GradientStop::with_color_and_offset,
526 ],
527 },
528});
529
530ferro_class_info!(ImageBrush {
531 markup: {
532 namespace: "FerroUI.Media",
533 constructors: [
534 (Option<Rc<dyn IImageBrushSource>>) => ImageBrush::with_source,
535 ],
536 },
537});
538
539ferro_class_info!(LineGeometry {
540 markup: {
541 namespace: "FerroUI.Media",
542 constructors: [
543 (Point, Point) => LineGeometry::with_points,
544 ],
545 },
546});
547
548ferro_class_info!(MatrixTransform {
549 markup: {
550 namespace: "FerroUI.Media",
551 constructors: [
552 (Matrix) => MatrixTransform::with_matrix,
553 ],
554 },
555});
556
557ferro_class_info!(PathFigure {
558 markup: {
559 namespace: "FerroUI.Media",
560 content: Segments,
561 },
562});
563
564ferro_class_info!(PathGeometry {
565 markup: {
566 namespace: "FerroUI.Media",
567 content: Figures,
568 parse: PathGeometry::parse,
569 },
570});
571
572ferro_class_info!(Pen {
573 markup: {
574 namespace: "FerroUI.Media",
575 constructors: [
576 (Option<Rc<dyn IBrush>>, f64, Option<Rc<dyn IDashStyle>>, PenLineCap, PenLineJoin, f64) => Pen::with_all,
577 ],
578 },
579});
580
581ferro_class_info!(PolyBezierSegment {
582 markup: {
583 namespace: "FerroUI.Media",
584 content: Points,
585 constructors: [
586 (Points, bool) => |points: Points, is_stroked: bool| PolyBezierSegment::with_points(points.iter(), is_stroked),
587 ],
588 },
589});
590
591ferro_class_info!(PolyLineSegment {
592 markup: {
593 namespace: "FerroUI.Media",
594 constructors: [
595 (Points) => |points: Points| PolyLineSegment::with_points(points.iter()),
596 ],
597 },
598});
599
600ferro_class_info!(PolylineGeometry {
601 markup: {
602 namespace: "FerroUI.Media",
603 content: Points,
604 constructors: [
605 (Points, bool) => |points: Points, is_filled: bool| PolylineGeometry::with_points(points.iter(), is_filled),
606 (Points, bool, FillRule) => |points: Points, is_filled: bool, fill_rule: FillRule| {
607 PolylineGeometry::with_points_and_fill_rule(points.iter(), is_filled, fill_rule)
608 },
609 ],
610 },
611});
612
613ferro_class_info!(RectangleGeometry {
614 markup: {
615 namespace: "FerroUI.Media",
616 constructors: [
617 (Rect) => RectangleGeometry::with_rect,
618 (Rect, f64, f64) => RectangleGeometry::with_rect_and_radii,
619 ],
620 },
621});
622
623ferro_class_info!(Rotate3DTransform {
624 markup: {
625 namespace: "FerroUI.Media",
626 constructors: [
627 (f64, f64, f64, f64, f64, f64, f64) => Rotate3DTransform::with_values,
628 ],
629 },
630});
631
632ferro_class_info!(RotateTransform {
633 markup: {
634 namespace: "FerroUI.Media",
635 constructors: [
636 (f64) => RotateTransform::with_angle,
637 (f64, f64, f64) => RotateTransform::with_angle_and_center,
638 ],
639 },
640});
641
642ferro_class_info!(ScaleTransform {
643 markup: {
644 namespace: "FerroUI.Media",
645 constructors: [
646 (f64, f64) => ScaleTransform::with_scale,
647 ],
648 },
649});
650
651ferro_class_info!(SkewTransform {
652 markup: {
653 namespace: "FerroUI.Media",
654 constructors: [
655 (f64, f64) => SkewTransform::with_angles,
656 ],
657 },
658});
659
660ferro_class_info!(SolidColorBrush {
661 markup: {
662 namespace: "FerroUI.Media",
663 constructors: [
664 (Color) => SolidColorBrush::with_color,
665 (Color, f64) => SolidColorBrush::with_color_and_opacity,
666 (u32) => SolidColorBrush::from_uint32,
667 ],
668 },
669});
670
671ferro_class_info!(StreamGeometry {
672 markup: {
673 namespace: "FerroUI.Media",
674 parse: StreamGeometry::parse,
675 },
676});
677
678ferro_class_info!(Transform {
679 markup: {
680 namespace: "FerroUI.Media",
681 parse: Transform::parse,
682 events: [
683 Changed(Option<BoxedValue>, EventArgs) => |this: &Ref<Transform>, handler: MarkupDelegate| {
684 let sender = this.downgrade();
685 this.changed(move || {
686 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
687 })
688 },
689 ],
690 },
691});
692
693ferro_class_info!(TransformGroup {
694 markup: {
695 namespace: "FerroUI.Media",
696 content: Children,
697 },
698});
699
700ferro_class_info!(TranslateTransform {
701 markup: {
702 namespace: "FerroUI.Media",
703 constructors: [
704 (f64, f64) => TranslateTransform::with_offset,
705 ],
706 },
707});
708
709ferro_class_info!(VisualBrush {
710 markup: {
711 namespace: "FerroUI.Media",
712 constructors: [
713 (Ref<Visual>) => |visual: Ref<Visual>| VisualBrush::with_visual(visual),
714 ],
715 },
716});
717
718ferro_class_info!(CroppedBitmap {
721 markup: {
722 namespace: "FerroUI.Media.Imaging",
723 constructors: [
724 (Rc<dyn IImage>, PixelRect) => CroppedBitmap::with_source,
725 ],
726 events: [
727 Invalidated(Option<BoxedValue>, EventArgs) => |this: &Ref<CroppedBitmap>, handler: MarkupDelegate| {
728 let sender = this.downgrade();
729 this.invalidated(move || {
730 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
731 })
732 },
733 ],
734 },
735});
736
737ferro_class_info!(ContainerQuery {
740 markup: {
741 namespace: "FerroUI.Styling",
742 properties: [
743 Query: Option<StyleQuery> { get: ContainerQuery::query, set: ContainerQuery::set_query },
744 Name: Option<String> { get: ContainerQuery::name, set: ContainerQuery::set_name },
745 ],
746 },
747});
748
749ferro_class_info!(ControlTheme {
750 markup: {
751 namespace: "FerroUI.Styling",
752 constructors: [
753 (&'static TypeInfo) => ControlTheme::with_target_type,
754 ],
755 properties: [
756 TargetType: Option<&'static TypeInfo> { get: ControlTheme::target_type, set: ControlTheme::set_target_type },
757 BasedOn: Option<Ref<ControlTheme>> { get: ControlTheme::based_on, set: ControlTheme::set_based_on },
758 ],
759 },
760});
761
762ferro_class_info!(Style {
763 markup: {
764 namespace: "FerroUI.Styling",
765 properties: [
766 Selector: Option<Selector> { get: Style::selector, set: Style::set_selector },
767 ],
768 },
769});
770
771ferro_class_info!(StyleBase {
772 markup: {
773 namespace: "FerroUI.Styling",
774 properties: [
775 Children: StyleChildren { get: StyleBase::children },
776 Resources: Rc<dyn IResourceDictionary> {
777 get: |this: &Ref<StyleBase>| -> Rc<dyn IResourceDictionary> { this.resources().into() },
778 try_set: |this: &Ref<StyleBase>, value: Rc<dyn IResourceDictionary>| {
779 match value.as_object().and_then(|object| object.to_ref().cast::<ResourceDictionary>()) {
780 Some(dictionary) => Ok(this.set_resources(dictionary)),
781 None => Err("The resource dictionary is not a ResourceDictionary."),
782 }
783 }
784 },
785 Setters: FerroList<Rc<dyn SetterBase>> { get: StyleBase::setters },
786 Animations: FerroList<Rc<dyn IAnimation>> { get: StyleBase::animations },
787 ],
788 methods: [
789 fn Add(Rc<dyn SetterBase>) => |this: &Ref<StyleBase>, setter: Rc<dyn SetterBase>| this.add(setter),
790 fn Add(Rc<dyn IStyle>) => |this: &Ref<StyleBase>, style: Rc<dyn IStyle>| this.add_style(style),
791 ],
792 events: [
793 OwnerChanged(Option<BoxedValue>, EventArgs) => |this: &Ref<StyleBase>, handler: MarkupDelegate| {
794 let sender = this.downgrade();
795 this.owner_changed(move || {
796 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
797 })
798 },
799 ],
800 },
801});
802
803ferro_class_info!(Styles {
804 markup: {
805 namespace: "FerroUI.Styling",
806 properties: [
807 Resources: Rc<dyn IResourceDictionary> {
808 get: |this: &Ref<Styles>| -> Rc<dyn IResourceDictionary> { this.resources().into() },
809 try_set: |this: &Ref<Styles>, value: Rc<dyn IResourceDictionary>| {
810 match value.as_object().and_then(|object| object.to_ref().cast::<ResourceDictionary>()) {
811 Some(dictionary) => Ok(this.set_resources(dictionary)),
812 None => Err("The resource dictionary is not a ResourceDictionary."),
813 }
814 }
815 },
816 ],
817 methods: [
818 try fn Add(Rc<dyn IStyle>) => |this: &Ref<Styles>, style: Rc<dyn IStyle>| {
819 let owned = style.as_object().and_then(|o| o.to_ref().cast::<StyleBase>()).is_some_and(|s| s.owner().is_some());
821 if owned && this.owner().is_some() {
822 return Err("The Style already has a parent.");
823 }
824 Ok(this.add(style))
825 },
826 ],
827 events: [
828 OwnerChanged(Option<BoxedValue>, EventArgs) => |this: &Ref<Styles>, handler: MarkupDelegate| {
829 let sender = this.downgrade();
830 this.owner_changed(move || {
831 handler.invoke(&[into_markup_value(sender.upgrade()), into_markup_value(EventArgs::EMPTY)]);
832 })
833 },
834 ],
835 },
836});
837
838ferro_markup_type!(class RoutedEvent<AccessKeyEventArgs> as "RoutedEvent`1" {
841 namespace: "FerroUI.Interactivity",
842 handles: [RoutedEvent<AccessKeyEventArgs>, Option<RoutedEvent<AccessKeyEventArgs>>],
843 base: RoutedEvent,
844 generic: "RoutedEvent`1" [AccessKeyEventArgs],
845});
846
847ferro_markup_type!(class RoutedEvent<AccessKeyPressedEventArgs> as "RoutedEvent`1" {
848 namespace: "FerroUI.Interactivity",
849 handles: [RoutedEvent<AccessKeyPressedEventArgs>, Option<RoutedEvent<AccessKeyPressedEventArgs>>],
850 base: RoutedEvent,
851 generic: "RoutedEvent`1" [AccessKeyPressedEventArgs],
852});
853
854ferro_markup_type!(class RoutedEvent<ContextRequestedEventArgs> as "RoutedEvent`1" {
855 namespace: "FerroUI.Interactivity",
856 handles: [RoutedEvent<ContextRequestedEventArgs>, Option<RoutedEvent<ContextRequestedEventArgs>>],
857 base: RoutedEvent,
858 generic: "RoutedEvent`1" [ContextRequestedEventArgs],
859});
860
861ferro_markup_type!(class RoutedEvent<DragEventArgs> as "RoutedEvent`1" {
862 namespace: "FerroUI.Interactivity",
863 handles: [RoutedEvent<DragEventArgs>, Option<RoutedEvent<DragEventArgs>>],
864 base: RoutedEvent,
865 generic: "RoutedEvent`1" [DragEventArgs],
866});
867
868ferro_markup_type!(class RoutedEvent<FocusChangedEventArgs> as "RoutedEvent`1" {
869 namespace: "FerroUI.Interactivity",
870 handles: [RoutedEvent<FocusChangedEventArgs>, Option<RoutedEvent<FocusChangedEventArgs>>],
871 base: RoutedEvent,
872 generic: "RoutedEvent`1" [FocusChangedEventArgs],
873});
874
875ferro_markup_type!(class RoutedEvent<FocusChangingEventArgs> as "RoutedEvent`1" {
876 namespace: "FerroUI.Interactivity",
877 handles: [RoutedEvent<FocusChangingEventArgs>, Option<RoutedEvent<FocusChangingEventArgs>>],
878 base: RoutedEvent,
879 generic: "RoutedEvent`1" [FocusChangingEventArgs],
880});
881
882ferro_markup_type!(class RoutedEvent<HoldingRoutedEventArgs> as "RoutedEvent`1" {
883 namespace: "FerroUI.Interactivity",
884 handles: [RoutedEvent<HoldingRoutedEventArgs>, Option<RoutedEvent<HoldingRoutedEventArgs>>],
885 base: RoutedEvent,
886 generic: "RoutedEvent`1" [HoldingRoutedEventArgs],
887});
888
889ferro_markup_type!(class RoutedEvent<KeyEventArgs> as "RoutedEvent`1" {
890 namespace: "FerroUI.Interactivity",
891 handles: [RoutedEvent<KeyEventArgs>, Option<RoutedEvent<KeyEventArgs>>],
892 base: RoutedEvent,
893 generic: "RoutedEvent`1" [KeyEventArgs],
894});
895
896ferro_markup_type!(class RoutedEvent<PinchEndedEventArgs> as "RoutedEvent`1" {
897 namespace: "FerroUI.Interactivity",
898 handles: [RoutedEvent<PinchEndedEventArgs>, Option<RoutedEvent<PinchEndedEventArgs>>],
899 base: RoutedEvent,
900 generic: "RoutedEvent`1" [PinchEndedEventArgs],
901});
902
903ferro_markup_type!(class RoutedEvent<PinchEventArgs> as "RoutedEvent`1" {
904 namespace: "FerroUI.Interactivity",
905 handles: [RoutedEvent<PinchEventArgs>, Option<RoutedEvent<PinchEventArgs>>],
906 base: RoutedEvent,
907 generic: "RoutedEvent`1" [PinchEventArgs],
908});
909
910ferro_markup_type!(class RoutedEvent<PointerCaptureLostEventArgs> as "RoutedEvent`1" {
911 namespace: "FerroUI.Interactivity",
912 handles: [RoutedEvent<PointerCaptureLostEventArgs>, Option<RoutedEvent<PointerCaptureLostEventArgs>>],
913 base: RoutedEvent,
914 generic: "RoutedEvent`1" [PointerCaptureLostEventArgs],
915});
916
917ferro_markup_type!(class RoutedEvent<PointerDeltaEventArgs> as "RoutedEvent`1" {
918 namespace: "FerroUI.Interactivity",
919 handles: [RoutedEvent<PointerDeltaEventArgs>, Option<RoutedEvent<PointerDeltaEventArgs>>],
920 base: RoutedEvent,
921 generic: "RoutedEvent`1" [PointerDeltaEventArgs],
922});
923
924ferro_markup_type!(class RoutedEvent<PointerEventArgs> as "RoutedEvent`1" {
925 namespace: "FerroUI.Interactivity",
926 handles: [RoutedEvent<PointerEventArgs>, Option<RoutedEvent<PointerEventArgs>>],
927 base: RoutedEvent,
928 generic: "RoutedEvent`1" [PointerEventArgs],
929});
930
931ferro_markup_type!(class RoutedEvent<PointerPressedEventArgs> as "RoutedEvent`1" {
932 namespace: "FerroUI.Interactivity",
933 handles: [RoutedEvent<PointerPressedEventArgs>, Option<RoutedEvent<PointerPressedEventArgs>>],
934 base: RoutedEvent,
935 generic: "RoutedEvent`1" [PointerPressedEventArgs],
936});
937
938ferro_markup_type!(class RoutedEvent<PointerReleasedEventArgs> as "RoutedEvent`1" {
939 namespace: "FerroUI.Interactivity",
940 handles: [RoutedEvent<PointerReleasedEventArgs>, Option<RoutedEvent<PointerReleasedEventArgs>>],
941 base: RoutedEvent,
942 generic: "RoutedEvent`1" [PointerReleasedEventArgs],
943});
944
945ferro_markup_type!(class RoutedEvent<PointerWheelEventArgs> as "RoutedEvent`1" {
946 namespace: "FerroUI.Interactivity",
947 handles: [RoutedEvent<PointerWheelEventArgs>, Option<RoutedEvent<PointerWheelEventArgs>>],
948 base: RoutedEvent,
949 generic: "RoutedEvent`1" [PointerWheelEventArgs],
950});
951
952ferro_markup_type!(class RoutedEvent<PullGestureEndedEventArgs> as "RoutedEvent`1" {
953 namespace: "FerroUI.Interactivity",
954 handles: [RoutedEvent<PullGestureEndedEventArgs>, Option<RoutedEvent<PullGestureEndedEventArgs>>],
955 base: RoutedEvent,
956 generic: "RoutedEvent`1" [PullGestureEndedEventArgs],
957});
958
959ferro_markup_type!(class RoutedEvent<PullGestureEventArgs> as "RoutedEvent`1" {
960 namespace: "FerroUI.Interactivity",
961 handles: [RoutedEvent<PullGestureEventArgs>, Option<RoutedEvent<PullGestureEventArgs>>],
962 base: RoutedEvent,
963 generic: "RoutedEvent`1" [PullGestureEventArgs],
964});
965
966ferro_markup_type!(class RoutedEvent<RoutedEventArgs> as "RoutedEvent`1" {
967 namespace: "FerroUI.Interactivity",
968 handles: [RoutedEvent<RoutedEventArgs>, Option<RoutedEvent<RoutedEventArgs>>],
969 base: RoutedEvent,
970 generic: "RoutedEvent`1" [RoutedEventArgs],
971});
972
973ferro_markup_type!(class RoutedEvent<ScrollGestureEndedEventArgs> as "RoutedEvent`1" {
974 namespace: "FerroUI.Interactivity",
975 handles: [RoutedEvent<ScrollGestureEndedEventArgs>, Option<RoutedEvent<ScrollGestureEndedEventArgs>>],
976 base: RoutedEvent,
977 generic: "RoutedEvent`1" [ScrollGestureEndedEventArgs],
978});
979
980ferro_markup_type!(class RoutedEvent<ScrollGestureEventArgs> as "RoutedEvent`1" {
981 namespace: "FerroUI.Interactivity",
982 handles: [RoutedEvent<ScrollGestureEventArgs>, Option<RoutedEvent<ScrollGestureEventArgs>>],
983 base: RoutedEvent,
984 generic: "RoutedEvent`1" [ScrollGestureEventArgs],
985});
986
987ferro_markup_type!(class RoutedEvent<ScrollGestureInertiaStartingEventArgs> as "RoutedEvent`1" {
988 namespace: "FerroUI.Interactivity",
989 handles: [RoutedEvent<ScrollGestureInertiaStartingEventArgs>, Option<RoutedEvent<ScrollGestureInertiaStartingEventArgs>>],
990 base: RoutedEvent,
991 generic: "RoutedEvent`1" [ScrollGestureInertiaStartingEventArgs],
992});
993
994ferro_markup_type!(class RoutedEvent<SwipeGestureEndedEventArgs> as "RoutedEvent`1" {
995 namespace: "FerroUI.Interactivity",
996 handles: [RoutedEvent<SwipeGestureEndedEventArgs>, Option<RoutedEvent<SwipeGestureEndedEventArgs>>],
997 base: RoutedEvent,
998 generic: "RoutedEvent`1" [SwipeGestureEndedEventArgs],
999});
1000
1001ferro_markup_type!(class RoutedEvent<SwipeGestureEventArgs> as "RoutedEvent`1" {
1002 namespace: "FerroUI.Interactivity",
1003 handles: [RoutedEvent<SwipeGestureEventArgs>, Option<RoutedEvent<SwipeGestureEventArgs>>],
1004 base: RoutedEvent,
1005 generic: "RoutedEvent`1" [SwipeGestureEventArgs],
1006});
1007
1008ferro_markup_type!(class RoutedEvent<TappedEventArgs> as "RoutedEvent`1" {
1009 namespace: "FerroUI.Interactivity",
1010 handles: [RoutedEvent<TappedEventArgs>, Option<RoutedEvent<TappedEventArgs>>],
1011 base: RoutedEvent,
1012 generic: "RoutedEvent`1" [TappedEventArgs],
1013});
1014
1015ferro_markup_type!(class RoutedEvent<TextInputEventArgs> as "RoutedEvent`1" {
1016 namespace: "FerroUI.Interactivity",
1017 handles: [RoutedEvent<TextInputEventArgs>, Option<RoutedEvent<TextInputEventArgs>>],
1018 base: RoutedEvent,
1019 generic: "RoutedEvent`1" [TextInputEventArgs],
1020});
1021
1022ferro_markup_type!(class RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs> as "RoutedEvent`1" {
1023 namespace: "FerroUI.Interactivity",
1024 handles: [RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs>, Option<RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs>>],
1025 base: RoutedEvent,
1026 generic: "RoutedEvent`1" [TextInputMethodClientRequeryRequestedEventArgs],
1027});
1028
1029ferro_markup_type!(class RoutedEvent<TextInputMethodClientRequestedEventArgs> as "RoutedEvent`1" {
1030 namespace: "FerroUI.Interactivity",
1031 handles: [RoutedEvent<TextInputMethodClientRequestedEventArgs>, Option<RoutedEvent<TextInputMethodClientRequestedEventArgs>>],
1032 base: RoutedEvent,
1033 generic: "RoutedEvent`1" [TextInputMethodClientRequestedEventArgs],
1034});
1035
1036fn typed_event_args<T: 'static, R>(e: &Rc<dyn IRoutedEventArgs>, f: impl FnOnce(&T) -> R) -> Result<R, String> {
1040 match e.query_args(std::any::TypeId::of::<T>()).and_then(|args| args.downcast_ref::<T>()) {
1041 Some(args) => Ok(f(args)),
1042 None => Err(format!("The arguments are not {}.", std::any::type_name::<T>())),
1043 }
1044}
1045
1046ferro_markup_type!(class AccessKeyEventArgs {
1047 namespace: "FerroUI.Input",
1048 handles: [AccessKeyEventArgs],
1049 this: Rc<dyn IRoutedEventArgs>,
1050 base: Rc<dyn IRoutedEventArgs>,
1051 properties: [
1052 IsMultiple: bool {
1053 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<AccessKeyEventArgs, _>(e, |e| e.is_multiple())
1054 },
1055 ],
1056});
1057
1058ferro_markup_type!(class AccessKeyPressedEventArgs {
1059 namespace: "FerroUI.Input",
1060 handles: [AccessKeyPressedEventArgs],
1061 this: Rc<dyn IRoutedEventArgs>,
1062 base: Rc<dyn IRoutedEventArgs>,
1063});
1064
1065ferro_markup_type!(class ContextRequestedEventArgs {
1066 namespace: "FerroUI.Input",
1067 handles: [ContextRequestedEventArgs],
1068 this: Rc<dyn IRoutedEventArgs>,
1069 base: Rc<dyn IRoutedEventArgs>,
1070});
1071
1072ferro_markup_type!(class DragEventArgs {
1073 namespace: "FerroUI.Input",
1074 handles: [DragEventArgs],
1075 this: Rc<dyn IRoutedEventArgs>,
1076 base: Rc<dyn IRoutedEventArgs>,
1077 properties: [
1078 DragEffects: DragDropEffects {
1079 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<DragEventArgs, _>(e, |e| e.drag_effects()),
1080 try_set: |e: &Rc<dyn IRoutedEventArgs>, value: DragDropEffects| typed_event_args::<DragEventArgs, _>(e, |e| e.set_drag_effects(value))
1081 },
1082 KeyModifiers: KeyModifiers {
1083 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<DragEventArgs, _>(e, |e| e.key_modifiers())
1084 },
1085 ],
1086});
1087
1088ferro_markup_type!(class FocusChangedEventArgs {
1089 namespace: "FerroUI.Input",
1090 handles: [FocusChangedEventArgs],
1091 this: Rc<dyn IRoutedEventArgs>,
1092 base: Rc<dyn IRoutedEventArgs>,
1093});
1094
1095ferro_markup_type!(class FocusChangingEventArgs {
1096 namespace: "FerroUI.Input",
1097 handles: [FocusChangingEventArgs],
1098 this: Rc<dyn IRoutedEventArgs>,
1099 base: Rc<dyn IRoutedEventArgs>,
1100 properties: [
1101 NewFocusedElement: Option<Ref<InputElement>> {
1102 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<FocusChangingEventArgs, _>(e, |e| e.new_focused_element())
1103 },
1104 Canceled: bool {
1105 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<FocusChangingEventArgs, _>(e, |e| e.canceled())
1106 },
1107 ],
1108});
1109
1110ferro_markup_type!(class HoldingRoutedEventArgs {
1111 namespace: "FerroUI.Input",
1112 handles: [HoldingRoutedEventArgs],
1113 this: Rc<dyn IRoutedEventArgs>,
1114 base: Rc<dyn IRoutedEventArgs>,
1115 properties: [
1116 HoldingState: HoldingState {
1117 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<HoldingRoutedEventArgs, _>(e, |e| e.holding_state())
1118 },
1119 Position: Point {
1120 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<HoldingRoutedEventArgs, _>(e, |e| e.position())
1121 },
1122 PointerType: PointerType {
1123 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<HoldingRoutedEventArgs, _>(e, |e| e.pointer_type())
1124 },
1125 ],
1126});
1127
1128ferro_markup_type!(class KeyEventArgs {
1129 namespace: "FerroUI.Input",
1130 handles: [KeyEventArgs],
1131 this: Rc<dyn IRoutedEventArgs>,
1132 base: Rc<dyn IRoutedEventArgs>,
1133});
1134
1135ferro_markup_type!(class PinchEndedEventArgs {
1136 namespace: "FerroUI.Input",
1137 handles: [PinchEndedEventArgs],
1138 this: Rc<dyn IRoutedEventArgs>,
1139 base: Rc<dyn IRoutedEventArgs>,
1140});
1141
1142ferro_markup_type!(class PinchEventArgs {
1143 namespace: "FerroUI.Input",
1144 handles: [PinchEventArgs],
1145 this: Rc<dyn IRoutedEventArgs>,
1146 base: Rc<dyn IRoutedEventArgs>,
1147 properties: [
1148 Scale: f64 {
1149 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PinchEventArgs, _>(e, |e| e.scale())
1150 },
1151 ScaleOrigin: Point {
1152 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PinchEventArgs, _>(e, |e| e.scale_origin())
1153 },
1154 Angle: f64 {
1155 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PinchEventArgs, _>(e, |e| e.angle())
1156 },
1157 AngleDelta: f64 {
1158 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PinchEventArgs, _>(e, |e| e.angle_delta())
1159 },
1160 ],
1161});
1162
1163ferro_markup_type!(class PointerCaptureLostEventArgs {
1164 namespace: "FerroUI.Input",
1165 handles: [PointerCaptureLostEventArgs],
1166 this: Rc<dyn IRoutedEventArgs>,
1167 base: Rc<dyn IRoutedEventArgs>,
1168});
1169
1170ferro_markup_type!(class PointerDeltaEventArgs {
1171 namespace: "FerroUI.Input",
1172 handles: [PointerDeltaEventArgs],
1173 this: Rc<dyn IRoutedEventArgs>,
1174 base: PointerEventArgs,
1175 properties: [
1176 Delta: Vector {
1177 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PointerDeltaEventArgs, _>(e, |e| e.delta())
1178 },
1179 ],
1180});
1181
1182ferro_markup_type!(class PointerEventArgs {
1183 namespace: "FerroUI.Input",
1184 handles: [PointerEventArgs],
1185 this: Rc<dyn IRoutedEventArgs>,
1186 base: Rc<dyn IRoutedEventArgs>,
1187 properties: [
1188 Timestamp: u64 {
1189 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PointerEventArgs, _>(e, |e| e.timestamp())
1190 },
1191 KeyModifiers: KeyModifiers {
1192 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PointerEventArgs, _>(e, |e| e.key_modifiers())
1193 },
1194 ],
1195});
1196
1197ferro_markup_type!(class PointerPressedEventArgs {
1198 namespace: "FerroUI.Input",
1199 handles: [PointerPressedEventArgs],
1200 this: Rc<dyn IRoutedEventArgs>,
1201 base: PointerEventArgs,
1202 properties: [
1203 ClickCount: i32 {
1204 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PointerPressedEventArgs, _>(e, |e| e.click_count())
1205 },
1206 ],
1207});
1208
1209ferro_markup_type!(class PointerReleasedEventArgs {
1210 namespace: "FerroUI.Input",
1211 handles: [PointerReleasedEventArgs],
1212 this: Rc<dyn IRoutedEventArgs>,
1213 base: PointerEventArgs,
1214});
1215
1216ferro_markup_type!(class PointerWheelEventArgs {
1217 namespace: "FerroUI.Input",
1218 handles: [PointerWheelEventArgs],
1219 this: Rc<dyn IRoutedEventArgs>,
1220 base: PointerEventArgs,
1221 properties: [
1222 Delta: Vector {
1223 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PointerWheelEventArgs, _>(e, |e| e.delta())
1224 },
1225 ],
1226});
1227
1228ferro_markup_type!(class PullGestureEndedEventArgs {
1229 namespace: "FerroUI.Input",
1230 handles: [PullGestureEndedEventArgs],
1231 this: Rc<dyn IRoutedEventArgs>,
1232 base: Rc<dyn IRoutedEventArgs>,
1233 properties: [
1234 Id: i32 {
1235 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PullGestureEndedEventArgs, _>(e, |e| e.id())
1236 },
1237 PullDirection: PullDirection {
1238 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PullGestureEndedEventArgs, _>(e, |e| e.pull_direction())
1239 },
1240 ],
1241});
1242
1243ferro_markup_type!(class PullGestureEventArgs {
1244 namespace: "FerroUI.Input",
1245 handles: [PullGestureEventArgs],
1246 this: Rc<dyn IRoutedEventArgs>,
1247 base: Rc<dyn IRoutedEventArgs>,
1248 properties: [
1249 Id: i32 {
1250 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PullGestureEventArgs, _>(e, |e| e.id())
1251 },
1252 Delta: Vector {
1253 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PullGestureEventArgs, _>(e, |e| e.delta())
1254 },
1255 PullDirection: PullDirection {
1256 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<PullGestureEventArgs, _>(e, |e| e.pull_direction())
1257 },
1258 ],
1259});
1260
1261ferro_markup_type!(class ScrollGestureEndedEventArgs {
1262 namespace: "FerroUI.Input",
1263 handles: [ScrollGestureEndedEventArgs],
1264 this: Rc<dyn IRoutedEventArgs>,
1265 base: Rc<dyn IRoutedEventArgs>,
1266 properties: [
1267 Id: i32 {
1268 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<ScrollGestureEndedEventArgs, _>(e, |e| e.id())
1269 },
1270 ],
1271});
1272
1273ferro_markup_type!(class ScrollGestureEventArgs {
1274 namespace: "FerroUI.Input",
1275 handles: [ScrollGestureEventArgs],
1276 this: Rc<dyn IRoutedEventArgs>,
1277 base: Rc<dyn IRoutedEventArgs>,
1278 properties: [
1279 Id: i32 {
1280 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<ScrollGestureEventArgs, _>(e, |e| e.id())
1281 },
1282 Delta: Vector {
1283 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<ScrollGestureEventArgs, _>(e, |e| e.delta())
1284 },
1285 ShouldEndScrollGesture: bool {
1286 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<ScrollGestureEventArgs, _>(e, |e| e.should_end_scroll_gesture()),
1287 try_set: |e: &Rc<dyn IRoutedEventArgs>, value: bool| typed_event_args::<ScrollGestureEventArgs, _>(e, |e| e.set_should_end_scroll_gesture(value))
1288 },
1289 ],
1290});
1291
1292ferro_markup_type!(class ScrollGestureInertiaStartingEventArgs {
1293 namespace: "FerroUI.Input",
1294 handles: [ScrollGestureInertiaStartingEventArgs],
1295 this: Rc<dyn IRoutedEventArgs>,
1296 base: Rc<dyn IRoutedEventArgs>,
1297 properties: [
1298 Id: i32 {
1299 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<ScrollGestureInertiaStartingEventArgs, _>(e, |e| e.id())
1300 },
1301 Inertia: Vector {
1302 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<ScrollGestureInertiaStartingEventArgs, _>(e, |e| e.inertia())
1303 },
1304 ],
1305});
1306
1307ferro_markup_type!(class SwipeGestureEndedEventArgs {
1308 namespace: "FerroUI.Input",
1309 handles: [SwipeGestureEndedEventArgs],
1310 this: Rc<dyn IRoutedEventArgs>,
1311 base: Rc<dyn IRoutedEventArgs>,
1312 properties: [
1313 Id: i32 {
1314 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<SwipeGestureEndedEventArgs, _>(e, |e| e.id())
1315 },
1316 Velocity: Vector {
1317 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<SwipeGestureEndedEventArgs, _>(e, |e| e.velocity())
1318 },
1319 ],
1320});
1321
1322ferro_markup_type!(class SwipeGestureEventArgs {
1323 namespace: "FerroUI.Input",
1324 handles: [SwipeGestureEventArgs],
1325 this: Rc<dyn IRoutedEventArgs>,
1326 base: Rc<dyn IRoutedEventArgs>,
1327 properties: [
1328 Id: i32 {
1329 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<SwipeGestureEventArgs, _>(e, |e| e.id())
1330 },
1331 Delta: Vector {
1332 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<SwipeGestureEventArgs, _>(e, |e| e.delta())
1333 },
1334 Velocity: Vector {
1335 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<SwipeGestureEventArgs, _>(e, |e| e.velocity())
1336 },
1337 SwipeDirection: SwipeDirection {
1338 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<SwipeGestureEventArgs, _>(e, |e| e.swipe_direction())
1339 },
1340 ],
1341});
1342
1343ferro_markup_type!(class TappedEventArgs {
1344 namespace: "FerroUI.Input",
1345 handles: [TappedEventArgs],
1346 this: Rc<dyn IRoutedEventArgs>,
1347 base: Rc<dyn IRoutedEventArgs>,
1348 properties: [
1349 KeyModifiers: KeyModifiers {
1350 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<TappedEventArgs, _>(e, |e| e.key_modifiers())
1351 },
1352 Timestamp: u64 {
1353 try_get: |e: &Rc<dyn IRoutedEventArgs>| typed_event_args::<TappedEventArgs, _>(e, |e| e.timestamp())
1354 },
1355 ],
1356});
1357
1358ferro_markup_type!(class TextInputEventArgs {
1359 namespace: "FerroUI.Input",
1360 handles: [TextInputEventArgs],
1361 this: Rc<dyn IRoutedEventArgs>,
1362 base: Rc<dyn IRoutedEventArgs>,
1363});
1364
1365ferro_markup_type!(class TextInputMethodClientRequeryRequestedEventArgs {
1366 namespace: "FerroUI.Input.TextInput",
1367 handles: [TextInputMethodClientRequeryRequestedEventArgs],
1368 this: Rc<dyn IRoutedEventArgs>,
1369 base: Rc<dyn IRoutedEventArgs>,
1370});
1371
1372ferro_markup_type!(class TextInputMethodClientRequestedEventArgs {
1373 namespace: "FerroUI.Input.TextInput",
1374 handles: [TextInputMethodClientRequestedEventArgs],
1375 this: Rc<dyn IRoutedEventArgs>,
1376 base: Rc<dyn IRoutedEventArgs>,
1377});
1378
1379pub(super) fn register_value_types() {
1382 ValueTypes::register_cast::<RoutedEvent<AccessKeyEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1383 ValueTypes::register_cast::<RoutedEvent<AccessKeyPressedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1384 ValueTypes::register_cast::<RoutedEvent<ContextRequestedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1385 ValueTypes::register_cast::<RoutedEvent<DragEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1386 ValueTypes::register_cast::<RoutedEvent<FocusChangedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1387 ValueTypes::register_cast::<RoutedEvent<FocusChangingEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1388 ValueTypes::register_cast::<RoutedEvent<HoldingRoutedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1389 ValueTypes::register_cast::<RoutedEvent<KeyEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1390 ValueTypes::register_cast::<RoutedEvent<PinchEndedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1391 ValueTypes::register_cast::<RoutedEvent<PinchEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1392 ValueTypes::register_cast::<RoutedEvent<PointerCaptureLostEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1393 ValueTypes::register_cast::<RoutedEvent<PointerDeltaEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1394 ValueTypes::register_cast::<RoutedEvent<PointerEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1395 ValueTypes::register_cast::<RoutedEvent<PointerPressedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1396 ValueTypes::register_cast::<RoutedEvent<PointerReleasedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1397 ValueTypes::register_cast::<RoutedEvent<PointerWheelEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1398 ValueTypes::register_cast::<RoutedEvent<PullGestureEndedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1399 ValueTypes::register_cast::<RoutedEvent<PullGestureEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1400 ValueTypes::register_cast::<RoutedEvent<RoutedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1401 ValueTypes::register_cast::<RoutedEvent<ScrollGestureEndedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1402 ValueTypes::register_cast::<RoutedEvent<ScrollGestureEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1403 ValueTypes::register_cast::<RoutedEvent<ScrollGestureInertiaStartingEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1404 ValueTypes::register_cast::<RoutedEvent<SwipeGestureEndedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1405 ValueTypes::register_cast::<RoutedEvent<SwipeGestureEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1406 ValueTypes::register_cast::<RoutedEvent<TappedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1407 ValueTypes::register_cast::<RoutedEvent<TextInputEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1408 ValueTypes::register_cast::<RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1409 ValueTypes::register_cast::<RoutedEvent<TextInputMethodClientRequestedEventArgs>, RoutedEvent>(|event| event.as_routed_event());
1410}
1411
1412pub(super) const TYPES: &[&MarkupType] = &[
1416 <AccessKeyHandler as MarkupTyped>::MARKUP,
1417 <DragDrop as MarkupTyped>::MARKUP,
1418 <InputMethod as MarkupTyped>::MARKUP,
1419 <NameScope as MarkupTyped>::MARKUP,
1420 <RoutedEvent<AccessKeyEventArgs> as MarkupTyped>::MARKUP,
1421 <RoutedEvent<AccessKeyPressedEventArgs> as MarkupTyped>::MARKUP,
1422 <RoutedEvent<ContextRequestedEventArgs> as MarkupTyped>::MARKUP,
1423 <RoutedEvent<DragEventArgs> as MarkupTyped>::MARKUP,
1424 <RoutedEvent<FocusChangedEventArgs> as MarkupTyped>::MARKUP,
1425 <RoutedEvent<FocusChangingEventArgs> as MarkupTyped>::MARKUP,
1426 <RoutedEvent<HoldingRoutedEventArgs> as MarkupTyped>::MARKUP,
1427 <RoutedEvent<KeyEventArgs> as MarkupTyped>::MARKUP,
1428 <RoutedEvent<PinchEndedEventArgs> as MarkupTyped>::MARKUP,
1429 <RoutedEvent<PinchEventArgs> as MarkupTyped>::MARKUP,
1430 <RoutedEvent<PointerCaptureLostEventArgs> as MarkupTyped>::MARKUP,
1431 <RoutedEvent<PointerDeltaEventArgs> as MarkupTyped>::MARKUP,
1432 <RoutedEvent<PointerEventArgs> as MarkupTyped>::MARKUP,
1433 <RoutedEvent<PointerPressedEventArgs> as MarkupTyped>::MARKUP,
1434 <RoutedEvent<PointerReleasedEventArgs> as MarkupTyped>::MARKUP,
1435 <RoutedEvent<PointerWheelEventArgs> as MarkupTyped>::MARKUP,
1436 <RoutedEvent<PullGestureEndedEventArgs> as MarkupTyped>::MARKUP,
1437 <RoutedEvent<PullGestureEventArgs> as MarkupTyped>::MARKUP,
1438 <RoutedEvent<RoutedEventArgs> as MarkupTyped>::MARKUP,
1439 <RoutedEvent<ScrollGestureEndedEventArgs> as MarkupTyped>::MARKUP,
1440 <RoutedEvent<ScrollGestureEventArgs> as MarkupTyped>::MARKUP,
1441 <RoutedEvent<ScrollGestureInertiaStartingEventArgs> as MarkupTyped>::MARKUP,
1442 <RoutedEvent<SwipeGestureEndedEventArgs> as MarkupTyped>::MARKUP,
1443 <RoutedEvent<SwipeGestureEventArgs> as MarkupTyped>::MARKUP,
1444 <RoutedEvent<TappedEventArgs> as MarkupTyped>::MARKUP,
1445 <RoutedEvent<TextInputEventArgs> as MarkupTyped>::MARKUP,
1446 <RoutedEvent<TextInputMethodClientRequeryRequestedEventArgs> as MarkupTyped>::MARKUP,
1447 <RoutedEvent<TextInputMethodClientRequestedEventArgs> as MarkupTyped>::MARKUP,
1448 <AccessKeyEventArgs as MarkupTyped>::MARKUP,
1449 <AccessKeyPressedEventArgs as MarkupTyped>::MARKUP,
1450 <ContextRequestedEventArgs as MarkupTyped>::MARKUP,
1451 <DragEventArgs as MarkupTyped>::MARKUP,
1452 <FocusChangedEventArgs as MarkupTyped>::MARKUP,
1453 <FocusChangingEventArgs as MarkupTyped>::MARKUP,
1454 <HoldingRoutedEventArgs as MarkupTyped>::MARKUP,
1455 <KeyEventArgs as MarkupTyped>::MARKUP,
1456 <PinchEndedEventArgs as MarkupTyped>::MARKUP,
1457 <PinchEventArgs as MarkupTyped>::MARKUP,
1458 <PointerCaptureLostEventArgs as MarkupTyped>::MARKUP,
1459 <PointerDeltaEventArgs as MarkupTyped>::MARKUP,
1460 <PointerEventArgs as MarkupTyped>::MARKUP,
1461 <PointerPressedEventArgs as MarkupTyped>::MARKUP,
1462 <PointerReleasedEventArgs as MarkupTyped>::MARKUP,
1463 <PointerWheelEventArgs as MarkupTyped>::MARKUP,
1464 <PullGestureEndedEventArgs as MarkupTyped>::MARKUP,
1465 <PullGestureEventArgs as MarkupTyped>::MARKUP,
1466 <ScrollGestureEndedEventArgs as MarkupTyped>::MARKUP,
1467 <ScrollGestureEventArgs as MarkupTyped>::MARKUP,
1468 <ScrollGestureInertiaStartingEventArgs as MarkupTyped>::MARKUP,
1469 <SwipeGestureEndedEventArgs as MarkupTyped>::MARKUP,
1470 <SwipeGestureEventArgs as MarkupTyped>::MARKUP,
1471 <TappedEventArgs as MarkupTyped>::MARKUP,
1472 <TextInputEventArgs as MarkupTyped>::MARKUP,
1473 <TextInputMethodClientRequeryRequestedEventArgs as MarkupTyped>::MARKUP,
1474 <TextInputMethodClientRequestedEventArgs as MarkupTyped>::MARKUP,
1475];