freya_components/
keyboard_navigator.rs

1use freya_core::{
2    element::FpRender,
3    prelude::*,
4};
5
6pub fn keyboard_navigator(app: FpRender) -> impl IntoElement {
7    let platform = Platform::get();
8    let on_global_key_down = move |e: Event<KeyboardEventData>| match e.key {
9        Key::Tab if e.modifiers.contains(Modifiers::SHIFT) => {
10            platform.send(UserEvent::FocusAccessibilityNode(
11                AccessibilityFocusStrategy::Backward(AccessibilityFocusMovement::OutsideGroup),
12            ));
13        }
14        Key::Tab => {
15            platform.send(UserEvent::FocusAccessibilityNode(
16                AccessibilityFocusStrategy::Forward(AccessibilityFocusMovement::OutsideGroup),
17            ));
18        }
19        Key::ArrowUp => {
20            platform.send(UserEvent::FocusAccessibilityNode(
21                AccessibilityFocusStrategy::Backward(AccessibilityFocusMovement::InsideGroup),
22            ));
23        }
24        Key::ArrowDown => {
25            platform.send(UserEvent::FocusAccessibilityNode(
26                AccessibilityFocusStrategy::Forward(AccessibilityFocusMovement::InsideGroup),
27            ));
28        }
29        _ => {}
30    };
31
32    rect().on_global_key_down(on_global_key_down).child(app)
33}