Max OS 0.3
Loading...
Searching...
No Matches
colour.cpp
Go to the documentation of this file.
1
9#include <common/colour.h>
10
11using namespace MaxOS::common;
12
13Colour::Colour() = default;
14
15
21Colour::Colour(ConsoleColour colour) {
22 parse_console_colour(colour);
23}
24
30Colour::Colour(string string) {
31
32 if (string[0] == '#')
33 parse_hex_string(string);
34 else
35 parse_ansi_string(string);
36
37}
38
46Colour::Colour(uint8_t red, uint8_t green, uint8_t blue)
47: red(red),
48 green(green),
49 blue(blue)
50{
51
52}
53
62Colour::Colour(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha)
63: red(red),
64 green(green),
65 blue(blue),
66 alpha(alpha)
67{
68
69}
70
71Colour::~Colour() = default;
72
78void Colour::parse_hex_string(string hex_string) {
79
80 // Check if the string is a valid hex string
81 if (hex_string.length() != 7 || hex_string.length() != 9)
82 return;
83
84 // Parse the red, green and blue values
85 red = (hex_string[1] - '0') * 16 + (hex_string[2] - '0');
86 green = (hex_string[3] - '0') * 16 + (hex_string[4] - '0');
87 blue = (hex_string[5] - '0') * 16 + (hex_string[6] - '0');
88
89 // Parse the alpha value
90 alpha = 255;
91 if (hex_string.length() == 9)
92 alpha = (hex_string[7] - '0') * 16 + (hex_string[8] - '0');
93
94
95}
96
102void Colour::parse_ansi_string(string ansi_string) {
103
104 // Check if the string is a valid ANSI string
105 if (ansi_string.length() != 7 || ansi_string[0] != '\033' || ansi_string[1] != '[' || ansi_string[6] != 'm')
106 return;
107
108 // Parse the colour
109 uint8_t colour = ansi_string[5] - '0';
110 switch (colour) {
111 case 0:
112 parse_console_colour(ConsoleColour::Black);
113 break;
114
115 case 1:
116 parse_console_colour(ConsoleColour::Red);
117 break;
118
119 case 2:
120 parse_console_colour(ConsoleColour::Green);
121 break;
122
123 case 3:
124 parse_console_colour(ConsoleColour::Yellow);
125 break;
126
127 case 4:
128 parse_console_colour(ConsoleColour::Blue);
129 break;
130
131 case 5:
132 parse_console_colour(ConsoleColour::Magenta);
133 break;
134
135 case 6:
136 parse_console_colour(ConsoleColour::Cyan);
137 break;
138
139 case 7:
140 parse_console_colour(ConsoleColour::White);
141 break;
142
143 default:
144 break;
145 }
146}
147
153void Colour::parse_console_colour(ConsoleColour colour) {
154 switch (colour) {
155
156 case ConsoleColour::Uninitialised:
157 case ConsoleColour::Black:
158 red = 0;
159 green = 0;
160 blue = 0;
161 break;
162
163 case ConsoleColour::Blue:
164 red = 0;
165 green = 128;
166 blue = 253;
167 break;
168
169 case ConsoleColour::Green:
170 red = 0;
171 green = 170;
172 blue = 0;
173 break;
174
175 case ConsoleColour::Cyan:
176 red = 0;
177 green = 170;
178 blue = 170;
179 break;
180
181 case ConsoleColour::Red:
182 red = 170;
183 green = 0;
184 blue = 0;
185 break;
186
187 case ConsoleColour::Magenta:
188 red = 170;
189 green = 0;
190 blue = 170;
191 break;
192
193 case ConsoleColour::Brown:
194 red = 170;
195 green = 85;
196 blue = 0;
197 break;
198
199 case ConsoleColour::LightGrey:
200 red = 170;
201 green = 170;
202 blue = 170;
203 break;
204
205 case ConsoleColour::DarkGrey:
206 red = 85;
207 green = 85;
208 blue = 85;
209 break;
210
211 case ConsoleColour::LightBlue:
212 red = 85;
213 green = 85;
214 blue = 255;
215 break;
216
217 case ConsoleColour::LightGreen:
218 red = 85;
219 green = 255;
220 blue = 85;
221 break;
222
223 case ConsoleColour::LightCyan:
224 red = 85;
225 green = 255;
226 blue = 255;
227 break;
228
229 case ConsoleColour::LightRed:
230 red = 255;
231 green = 85;
232 blue = 85;
233 break;
234
235 case ConsoleColour::LightMagenta:
236 red = 255;
237 green = 85;
238 blue = 255;
239 break;
240
241 // Same as CLION yellow
242 case ConsoleColour::Yellow:
243 red = 0x96;
244 green = 0x82;
245 blue = 0x0E;
246 break;
247
248 case ConsoleColour::White:
249 red = 255;
250 green = 255;
251 blue = 255;
252 break;
253 }
254}
255
262
263
264 if (red == 0 && green == 0 && blue == 0)
265 return ConsoleColour::Black;
266
267 if (red == 0 && green == 128 && blue == 253)
268 return ConsoleColour::Blue;
269
270 if (red == 0 && green == 170 && blue == 0)
271 return ConsoleColour::Green;
272
273 if (red == 0 && green == 170 && blue == 170)
274 return ConsoleColour::Cyan;
275
276 if (red == 170 && green == 0 && blue == 0)
277 return ConsoleColour::Red;
278
279 if (red == 170 && green == 0 && blue == 170)
280 return ConsoleColour::Magenta;
281
282 if (red == 170 && green == 85 && blue == 0)
283 return ConsoleColour::Brown;
284
285 if (red == 170 && green == 170 && blue == 170)
286 return ConsoleColour::LightGrey;
287
288 if (red == 85 && green == 85 && blue == 85)
289 return ConsoleColour::DarkGrey;
290
291 if (red == 85 && green == 85 && blue == 255)
292 return ConsoleColour::LightBlue;
293
294 if (red == 85 && green == 255 && blue == 85)
295 return ConsoleColour::LightGreen;
296
297 if (red == 85 && green == 255 && blue == 255)
298 return ConsoleColour::LightCyan;
299
300 if (red == 255 && green == 85 && blue == 85)
301 return ConsoleColour::LightRed;
302
303 if (red == 255 && green == 85 && blue == 255)
304 return ConsoleColour::LightMagenta;
305
306 if (red == 0x96 && green == 0x82 && blue == 0x0E)
307 return ConsoleColour::Yellow;
308
309 if (red == 255 && green == 255 && blue == 255)
310 return ConsoleColour::White;
311
312 // Return a default value in case no match is found
313 return ConsoleColour::Black;
314}
ConsoleColour to_console_colour() const
Converts the colour to a console colour.
Definition colour.cpp:261
uint8_t alpha
The amount of alpha 0-255 (0 is visible, 255 is invisible) todo: confirm.
Definition colour.h:102
uint8_t green
The amount of green 0-255.
Definition colour.h:100
uint8_t blue
The amount of blue 0-255.
Definition colour.h:101
uint8_t red
The amount of red 0-255.
Definition colour.h:99
Stores the left, top, width and height of a rectangle.
Definition rectangle.h:22
Defines a Colour class for representing colours in RGBA format, along with ANSI and console colour en...
ConsoleColour
Enumeration of console colour codes.
Definition colour.h:67