pixels_graphics_lib/ui/styles/
impls.rs

1use crate::ui::prelude::*;
2use buffer_graphics_lib::prelude::*;
3
4impl ColorSet {
5    pub fn new(
6        normal: Option<Color>,
7        hover: Option<Color>,
8        error: Option<Color>,
9        disabled: Option<Color>,
10    ) -> Self {
11        Self {
12            normal,
13            hover,
14            error,
15            disabled,
16        }
17    }
18
19    pub fn new_values(normal: Color, hover: Color, error: Color, disabled: Color) -> Self {
20        Self::new(Some(normal), Some(hover), Some(error), Some(disabled))
21    }
22
23    pub fn new_same(color: Color) -> Self {
24        Self::new(Some(color), Some(color), Some(color), Some(color))
25    }
26
27    pub fn get(&self, hovering: bool, error: bool, disabled: bool) -> Option<Color> {
28        if disabled {
29            self.disabled
30        } else if error {
31            self.error
32        } else if hovering {
33            self.hover
34        } else {
35            self.normal
36        }
37    }
38}
39
40impl FocusColorSet {
41    pub fn new(
42        normal: Option<Color>,
43        hover: Option<Color>,
44        focused: Option<Color>,
45        error: Option<Color>,
46        disabled: Option<Color>,
47    ) -> Self {
48        Self {
49            normal,
50            hover,
51            focused,
52            error,
53            disabled,
54        }
55    }
56
57    pub fn new_values(
58        normal: Color,
59        hover: Color,
60        focused: Color,
61        error: Color,
62        disabled: Color,
63    ) -> Self {
64        Self::new(
65            Some(normal),
66            Some(hover),
67            Some(focused),
68            Some(error),
69            Some(disabled),
70        )
71    }
72
73    pub fn new_same(color: Color) -> Self {
74        Self::new(
75            Some(color),
76            Some(color),
77            Some(color),
78            Some(color),
79            Some(color),
80        )
81    }
82
83    pub fn menu(hover: Color, disabled: Color, others: Color) -> Self {
84        Self::new(
85            Some(others),
86            Some(hover),
87            Some(hover),
88            Some(others),
89            Some(disabled),
90        )
91    }
92
93    pub fn get(&self, hovering: bool, focused: bool, error: bool, disabled: bool) -> Option<Color> {
94        if disabled {
95            self.disabled
96        } else if error {
97            self.error
98        } else if focused {
99            self.focused
100        } else if hovering {
101            self.hover
102        } else {
103            self.normal
104        }
105    }
106}
107
108impl ToggleColorSet {
109    pub fn new(
110        normal: Option<Color>,
111        hover: Option<Color>,
112        toggled: Option<Color>,
113        hover_toggled: Option<Color>,
114        error: Option<Color>,
115        disabled: Option<Color>,
116    ) -> Self {
117        Self {
118            normal,
119            hover,
120            toggled,
121            hover_toggled,
122            error,
123            disabled,
124        }
125    }
126
127    pub fn new_values(
128        normal: Color,
129        hover: Color,
130        toggled: Color,
131        hover_toggled: Color,
132        error: Color,
133        disabled: Color,
134    ) -> Self {
135        Self::new(
136            Some(normal),
137            Some(hover),
138            Some(toggled),
139            Some(hover_toggled),
140            Some(error),
141            Some(disabled),
142        )
143    }
144
145    pub fn new_same_hover(
146        normal: Option<Color>,
147        hover: Option<Color>,
148        toggled: Option<Color>,
149        error: Option<Color>,
150        disabled: Option<Color>,
151    ) -> Self {
152        Self::new(normal, hover, toggled, hover, error, disabled)
153    }
154
155    pub fn new_same(color: Color) -> Self {
156        Self::new(
157            Some(color),
158            Some(color),
159            Some(color),
160            Some(color),
161            Some(color),
162            Some(color),
163        )
164    }
165    pub fn get(&self, hovering: bool, toggled: bool, error: bool, disabled: bool) -> Option<Color> {
166        if disabled {
167            self.disabled
168        } else if error {
169            self.error
170        } else {
171            match (hovering, toggled) {
172                (true, true) => self.hover_toggled,
173                (true, false) => self.hover,
174                (false, true) => self.toggled,
175                (false, false) => self.normal,
176            }
177        }
178    }
179}
180
181impl IconSet {
182    pub fn get(
183        &self,
184        hovering: bool,
185        focused: bool,
186        error: bool,
187        disabled: bool,
188    ) -> Option<&IndexedImage> {
189        if disabled {
190            self.disabled.as_ref()
191        } else if error {
192            self.error.as_ref()
193        } else if focused {
194            self.focused.as_ref()
195        } else if hovering {
196            self.hover.as_ref()
197        } else {
198            self.normal.as_ref()
199        }
200    }
201}
202
203impl Padding {
204    pub fn new_same(value: usize) -> Padding {
205        Self {
206            left: value,
207            top: value,
208            right: value,
209            bottom: value,
210        }
211    }
212
213    pub fn new_axis(vert: usize, horz: usize) -> Padding {
214        Self {
215            left: horz,
216            top: vert,
217            right: horz,
218            bottom: vert,
219        }
220    }
221
222    pub fn new(left: usize, top: usize, right: usize, bottom: usize) -> Self {
223        Self {
224            left,
225            top,
226            right,
227            bottom,
228        }
229    }
230
231    pub fn vert(&self) -> usize {
232        self.top + self.bottom
233    }
234
235    pub fn horz(&self) -> usize {
236        self.left + self.right
237    }
238
239    pub fn offset(&self) -> Coord {
240        coord!(self.left, self.top)
241    }
242}