freya_core/
platform_state.rs1use accesskit::{
2 Node as AccessibilityNode,
3 NodeId as AccessibilityId,
4};
5use torin::prelude::Size2D;
6use winit::window::Window;
7
8#[derive(Clone, Debug)]
10pub struct NativePlatformState {
11 pub focused_accessibility_id: AccessibilityId,
12 pub focused_accessibility_node: AccessibilityNode,
13 pub preferred_theme: PreferredTheme,
14 pub navigation_mode: NavigationMode,
15 pub information: PlatformInformation,
16 pub scale_factor: f64,
17}
18
19#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)]
20pub enum PreferredTheme {
21 #[default]
22 Light,
24
25 Dark,
27}
28
29impl From<winit::window::Theme> for PreferredTheme {
30 fn from(value: winit::window::Theme) -> Self {
31 match value {
32 winit::window::Theme::Light => Self::Light,
33 winit::window::Theme::Dark => Self::Dark,
34 }
35 }
36}
37
38#[derive(Clone, Copy, PartialEq, Eq, Default, Debug)]
39pub enum NavigationMode {
40 #[default]
41 NotKeyboard,
42
43 Keyboard,
44}
45
46#[derive(Clone, PartialEq, Debug, Copy)]
48pub struct PlatformInformation {
49 pub viewport_size: Size2D,
50 pub is_minimized: bool,
51 pub is_maximized: bool,
52 pub is_fullscreen: bool,
53}
54
55impl PlatformInformation {
56 pub fn from_winit(winit: &Window) -> Self {
57 let window_size = winit.inner_size();
58 Self {
59 viewport_size: Size2D::new(window_size.width as f32, window_size.height as f32),
60 is_minimized: winit.is_minimized().unwrap_or_default(),
61 is_maximized: winit.is_maximized(),
62 is_fullscreen: winit.fullscreen().is_some(),
63 }
64 }
65
66 pub fn new(
67 viewport_size: Size2D,
68 is_minimized: bool,
69 is_maximized: bool,
70 is_fullscreen: bool,
71 ) -> Self {
72 Self {
73 viewport_size,
74 is_minimized,
75 is_maximized,
76 is_fullscreen,
77 }
78 }
79}