freya_components/
keyboard_navigator.rs1use 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}