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};
12
13#[derive(Clone, Copy, PartialEq, Eq, Default, Debug, Hash)]
14pub enum NavigationMode {
15 #[default]
16 NotKeyboard,
17 Keyboard,
18}
19
20#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
21pub enum PreferredTheme {
22 #[default]
23 Light,
24 Dark,
25}
26
27use crate::user_event::UserEvent;
28
29#[derive(Clone)]
30pub struct Platform {
31 pub focused_accessibility_id: State<AccessibilityId>,
32 pub focused_accessibility_node: State<accesskit::Node>,
33 pub root_size: State<Size2D>,
34 pub navigation_mode: State<NavigationMode>,
35 pub preferred_theme: State<PreferredTheme>,
36 pub sender: Rc<dyn Fn(UserEvent)>,
37}
38
39impl Platform {
40 pub fn get() -> Self {
41 consume_root_context()
42 }
43
44 pub fn send(&self, event: UserEvent) {
45 (self.sender)(event)
46 }
47}