freya_core/
platform.rs

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}