pixels_graphics_lib/ui/styles/
impls.rs1use 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}