oxygengine_user_interface/
component.rs1use 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 {}