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)]
34pub struct Platform {
35 pub focused_accessibility_id: State<AccessibilityId>,
37 pub focused_accessibility_node: State<accesskit::Node>,
39 pub root_size: State<Size2D>,
41 pub navigation_mode: State<NavigationMode>,
43 pub preferred_theme: State<PreferredTheme>,
45 pub sender: Rc<dyn Fn(UserEvent)>,
47}
48
49impl Platform {
50 pub fn get() -> Self {
52 consume_root_context()
53 }
54
55 pub fn send(&self, event: UserEvent) {
57 (self.sender)(event)
58 }
59}