Skip to main content

fui/controls/
appearance.rs

1use crate::{Border, Corners, EdgeInsets, FontFamily, FontStyle, FontWeight, Shadow};
2
3#[derive(Clone, Debug, Default, PartialEq)]
4pub struct SurfaceAppearance {
5    pub(crate) background: Option<u32>,
6    pub(crate) background_blur: Option<f32>,
7    pub(crate) border: Option<Border>,
8    pub(crate) corners: Option<Corners>,
9    pub(crate) shadow: Option<Shadow>,
10}
11
12impl SurfaceAppearance {
13    pub fn new() -> Self {
14        Self::default()
15    }
16    pub fn background(mut self, value: u32) -> Self {
17        self.background = Some(value);
18        self
19    }
20    pub fn background_blur(mut self, value: f32) -> Self {
21        self.background_blur = Some(value.max(0.0));
22        self
23    }
24    pub fn border(mut self, value: Border) -> Self {
25        self.border = Some(value);
26        self
27    }
28    pub fn corners(mut self, value: Corners) -> Self {
29        self.corners = Some(value);
30        self
31    }
32    pub fn shadow(mut self, value: Shadow) -> Self {
33        self.shadow = Some(value);
34        self
35    }
36
37    pub(crate) fn presenter_host_style(&self) -> crate::PresenterHostStyle {
38        let mut style = crate::PresenterHostStyle::new();
39        style.background = self.background;
40        style.border = self.border;
41        style.corners = self.corners;
42        style.shadow = self.shadow;
43        style
44    }
45}
46
47#[derive(Clone, Debug, Default, PartialEq)]
48pub struct OverlayBackdropAppearance {
49    pub(crate) color: Option<u32>,
50    pub(crate) blur: Option<f32>,
51}
52
53impl OverlayBackdropAppearance {
54    pub fn new() -> Self {
55        Self::default()
56    }
57    pub fn color(mut self, value: u32) -> Self {
58        self.color = Some(value);
59        self
60    }
61    pub fn blur(mut self, value: f32) -> Self {
62        self.blur = Some(value.max(0.0));
63        self
64    }
65}
66
67#[derive(Clone, Debug, Default, PartialEq)]
68pub struct PopupAppearance {
69    pub(crate) panel: Option<SurfaceAppearance>,
70    pub(crate) backdrop: Option<OverlayBackdropAppearance>,
71}
72
73impl PopupAppearance {
74    pub fn new() -> Self {
75        Self::default()
76    }
77    pub fn panel(mut self, value: SurfaceAppearance) -> Self {
78        self.panel = Some(value);
79        self
80    }
81    pub fn backdrop(mut self, value: OverlayBackdropAppearance) -> Self {
82        self.backdrop = Some(value);
83        self
84    }
85}
86
87#[derive(Clone, Debug, Default, PartialEq)]
88pub struct DialogAppearance {
89    pub(crate) card: Option<SurfaceAppearance>,
90    pub(crate) backdrop: Option<OverlayBackdropAppearance>,
91}
92
93impl DialogAppearance {
94    pub fn new() -> Self {
95        Self::default()
96    }
97    pub fn card(mut self, value: SurfaceAppearance) -> Self {
98        self.card = Some(value);
99        self
100    }
101    pub fn backdrop(mut self, value: OverlayBackdropAppearance) -> Self {
102        self.backdrop = Some(value);
103        self
104    }
105}
106
107#[derive(Clone, Debug, Default, PartialEq)]
108pub struct ContextMenuItemAppearance {
109    pub(crate) height: Option<f32>,
110    pub(crate) padding: Option<EdgeInsets>,
111    pub(crate) background: Option<u32>,
112    pub(crate) hover_background: Option<u32>,
113    pub(crate) text_color: Option<u32>,
114    pub(crate) corners: Option<Corners>,
115    pub(crate) font_family: Option<FontFamily>,
116    pub(crate) font_weight: Option<FontWeight>,
117    pub(crate) font_style: Option<FontStyle>,
118    pub(crate) font_size: Option<f32>,
119}
120
121impl ContextMenuItemAppearance {
122    pub fn new() -> Self {
123        Self::default()
124    }
125    pub fn height(mut self, value: f32) -> Self {
126        self.height = Some(value.max(1.0));
127        self
128    }
129    pub fn padding(mut self, value: EdgeInsets) -> Self {
130        self.padding = Some(value);
131        self
132    }
133    pub fn background(mut self, value: u32) -> Self {
134        self.background = Some(value);
135        self
136    }
137    pub fn hover_background(mut self, value: u32) -> Self {
138        self.hover_background = Some(value);
139        self
140    }
141    pub fn text_color(mut self, value: u32) -> Self {
142        self.text_color = Some(value);
143        self
144    }
145    pub fn corners(mut self, value: Corners) -> Self {
146        self.corners = Some(value);
147        self
148    }
149    pub fn font_family(mut self, value: FontFamily) -> Self {
150        self.font_family = Some(value);
151        self
152    }
153    pub fn font_weight(mut self, value: FontWeight) -> Self {
154        self.font_weight = Some(value);
155        self
156    }
157    pub fn font_style(mut self, value: FontStyle) -> Self {
158        self.font_style = Some(value);
159        self
160    }
161    pub fn font_size(mut self, value: f32) -> Self {
162        self.font_size = Some(value.max(1.0));
163        self
164    }
165}
166
167#[derive(Clone, Debug, Default, PartialEq)]
168pub struct ContextMenuAppearance {
169    pub(crate) width: Option<f32>,
170    pub(crate) panel: Option<SurfaceAppearance>,
171    pub(crate) backdrop: Option<OverlayBackdropAppearance>,
172    pub(crate) item: Option<ContextMenuItemAppearance>,
173    pub(crate) separator_color: Option<u32>,
174}
175
176impl ContextMenuAppearance {
177    pub fn new() -> Self {
178        Self::default()
179    }
180    pub fn width(mut self, value: f32) -> Self {
181        self.width = Some(value.max(1.0));
182        self
183    }
184    pub fn panel(mut self, value: SurfaceAppearance) -> Self {
185        self.panel = Some(value);
186        self
187    }
188    pub fn backdrop(mut self, value: OverlayBackdropAppearance) -> Self {
189        self.backdrop = Some(value);
190        self
191    }
192    pub fn item(mut self, value: ContextMenuItemAppearance) -> Self {
193        self.item = Some(value);
194        self
195    }
196    pub fn separator_color(mut self, value: u32) -> Self {
197        self.separator_color = Some(value);
198        self
199    }
200}