Skip to main content

ferroui_base/input/
tapped_event_args.rs

1use super::{IKeyModifiersEventArgs, IPointer, KeyModifiers, PointerEventArgs};
2use crate::interactivity::{RoutedEvent, RoutedEventArgs};
3use crate::{ferro_routed_event_args, Point, Visual};
4use std::rc::Rc;
5
6/// Provides data for the tapped, double-tapped and right-tapped events.
7#[derive(Clone)]
8pub struct TappedEventArgs {
9    base: RoutedEventArgs,
10    last_pointer_event_args: PointerEventArgs,
11}
12
13ferro_routed_event_args!(TappedEventArgs: RoutedEventArgs);
14
15impl TappedEventArgs {
16    /// Creates tapped event args from the pointer event that completed the
17    /// gesture.
18    pub fn new<T: ?Sized>(routed_event: Option<&RoutedEvent<T>>, last_pointer_event_args: &PointerEventArgs) -> Self {
19        let base = RoutedEventArgs::new();
20        base.set_routed_event(routed_event);
21        Self { base, last_pointer_event_args: last_pointer_event_args.clone() }
22    }
23
24    /// The pointer that performed the gesture.
25    pub fn pointer(&self) -> &Rc<dyn IPointer> {
26        self.last_pointer_event_args.pointer()
27    }
28
29    /// The key modifiers held down when the gesture completed.
30    pub fn key_modifiers(&self) -> KeyModifiers {
31        self.last_pointer_event_args.key_modifiers()
32    }
33
34    /// The platform time stamp of the pointer event that completed the
35    /// gesture.
36    pub fn timestamp(&self) -> u64 {
37        self.last_pointer_event_args.timestamp()
38    }
39
40    /// Gets the pointer position relative to a control.
41    pub fn get_position(&self, relative_to: Option<&Visual>) -> Point {
42        self.last_pointer_event_args.get_position(relative_to)
43    }
44}
45
46impl IKeyModifiersEventArgs for TappedEventArgs {
47    fn key_modifiers(&self) -> KeyModifiers {
48        self.last_pointer_event_args.key_modifiers()
49    }
50}