1use std::rc::Rc;
2
3use torin::prelude::Size2D;
4
5use crate::{
6 accessibility::id::AccessibilityId,
7 prelude::{
8 State,
9 consume_root_context,
10 },
11 user_event::UserEvent,
12};
13
14#[derive(Clone, Copy, PartialEq, Eq, Default, Debug, Hash)]
15pub enum NavigationMode {
16 #[default]
17 NotKeyboard,
18 Keyboard,
19}
20
21#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
22pub enum PreferredTheme {
23 #[default]
24 Light,
25 Dark,
26}
27
28#[derive(Clone)]
33pub struct Platform {
34 pub focused_accessibility_id: State<AccessibilityId>,
36 pub focused_accessibility_node: State<accesskit::Node>,
38 pub root_size: State<Size2D>,
40 pub navigation_mode: State<NavigationMode>,
42 pub preferred_theme: State<PreferredTheme>,
44 pub sender: Rc<dyn Fn(UserEvent)>,
46}
47
48impl Platform {
49 pub fn get() -> Self {
51 consume_root_context()
52 }
53
54 pub fn send(&self, event: UserEvent) {
56 (self.sender)(event)
57 }
58}