fui/controls/
appearance.rs1use 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}