Skip to main content

ferroui_base/input/
focus_changed_event_args.rs

1use super::{IKeyModifiersEventArgs, InputElement, KeyModifiers, NavigationMethod};
2use crate::interactivity::{RoutedEvent, RoutedEventArgs};
3use crate::{ferro_routed_event_args, Ref};
4
5/// Holds arguments for the `GotFocus` and `LostFocus` events.
6#[derive(Clone)]
7pub struct FocusChangedEventArgs {
8    base: RoutedEventArgs,
9
10    /// The element that focus has moved to.
11    pub new_focused_element: Option<Ref<InputElement>>,
12
13    /// The element that previously had focus.
14    pub old_focused_element: Option<Ref<InputElement>>,
15
16    /// Indicates how the change in focus occurred.
17    pub navigation_method: NavigationMethod,
18
19    /// Any key modifiers active at the time of focus.
20    pub key_modifiers: KeyModifiers,
21}
22
23ferro_routed_event_args!(FocusChangedEventArgs: RoutedEventArgs);
24
25impl FocusChangedEventArgs {
26    /// Creates args for a routed event.
27    pub fn new<T: ?Sized>(routed_event: &RoutedEvent<T>) -> Self {
28        Self {
29            base: RoutedEventArgs::with_event(routed_event),
30            new_focused_element: None,
31            old_focused_element: None,
32            navigation_method: NavigationMethod::Unspecified,
33            key_modifiers: KeyModifiers::NONE,
34        }
35    }
36}
37
38impl IKeyModifiersEventArgs for FocusChangedEventArgs {
39    fn key_modifiers(&self) -> KeyModifiers {
40        self.key_modifiers
41    }
42}