oxygengine_user_interface/
component.rs

1use core::prefab::{Prefab, PrefabComponent};
2use raui_core::{widget::utils::Vec2, PrefabValue};
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct UserInterfaceView {
7    #[serde(default)]
8    app_id: String,
9    #[serde(default)]
10    root: PrefabValue,
11    #[serde(default)]
12    theme: Option<String>,
13    #[serde(default)]
14    pub deselect_when_no_button_found: bool,
15    #[serde(skip)]
16    #[serde(default = "UserInterfaceView::default_dirty")]
17    pub(crate) dirty: bool,
18    #[serde(skip)]
19    #[serde(default)]
20    pub(crate) last_pointer_pos: Vec2,
21}
22
23impl Default for UserInterfaceView {
24    fn default() -> Self {
25        Self::new(Default::default())
26    }
27}
28
29impl UserInterfaceView {
30    fn default_dirty() -> bool {
31        true
32    }
33
34    pub fn new(app_id: String) -> Self {
35        Self {
36            app_id,
37            root: Default::default(),
38            theme: None,
39            deselect_when_no_button_found: false,
40            dirty: Self::default_dirty(),
41            last_pointer_pos: Default::default(),
42        }
43    }
44
45    pub fn app_id(&self) -> &str {
46        &self.app_id
47    }
48
49    pub fn root(&self) -> &PrefabValue {
50        &self.root
51    }
52
53    pub fn set_root(&mut self, root: PrefabValue) {
54        self.root = root;
55        self.dirty = true;
56    }
57
58    pub fn theme(&self) -> Option<&str> {
59        self.theme.as_deref()
60    }
61
62    pub fn set_theme(&mut self, theme: Option<String>) {
63        self.theme = theme;
64        self.dirty = true;
65    }
66
67    pub fn make_dirty(&mut self) {
68        self.dirty = true;
69    }
70}
71
72impl Prefab for UserInterfaceView {}
73impl PrefabComponent for UserInterfaceView {}