ferroui_base/input/
context_requested_event_args.rs1use super::{HoldingRoutedEventArgs, InputElement, PointerEventArgs, PointerType};
2use crate::interactivity::RoutedEventArgs;
3use crate::{ferro_routed_event_args, Point};
4
5#[derive(Clone)]
7pub struct ContextRequestedEventArgs {
8 base: RoutedEventArgs,
9 pointer_event_args: Option<PointerEventArgs>,
10 is_holding: bool,
11}
12
13ferro_routed_event_args!(ContextRequestedEventArgs: RoutedEventArgs);
14
15impl Default for ContextRequestedEventArgs {
16 fn default() -> Self {
17 Self::new()
18 }
19}
20
21impl ContextRequestedEventArgs {
22 pub fn new() -> Self {
25 Self {
26 base: RoutedEventArgs::with_event(InputElement::context_requested_event()),
27 pointer_event_args: None,
28 is_holding: false,
29 }
30 }
31
32 pub fn from_pointer_event_args(pointer_event_args: &PointerEventArgs) -> Self {
34 Self { pointer_event_args: Some(pointer_event_args.clone()), ..Self::new() }
35 }
36
37 pub fn from_context_requested_event_args(context_requested_event_args: &ContextRequestedEventArgs) -> Self {
39 Self { pointer_event_args: context_requested_event_args.pointer_event_args.clone(), ..Self::new() }
40 }
41
42 pub(crate) fn from_holding(hold_routed_event_args: &HoldingRoutedEventArgs) -> Self {
43 Self {
44 pointer_event_args: Some(hold_routed_event_args.pointer_event_args().clone()),
45 is_holding: true,
46 ..Self::new()
47 }
48 }
49
50 pub fn try_get_position(&self, relative_to: Option<&InputElement>) -> Option<Point> {
56 self.pointer_event_args.as_ref().map(|e| e.get_position(relative_to.map(|element| &****element)))
57 }
58
59 pub fn is_holding(&self) -> bool {
63 self.is_holding
64 }
65
66 #[allow(dead_code)]
67 pub fn pointer_type(&self) -> Option<PointerType> {
68 self.pointer_event_args.as_ref().map(|e| e.pointer().type_())
69 }
70}