ObjectivelyMVC 0.1.0
Object oriented MVC framework for OpenGL, SDL2 and GNU C
Colors.c
Go to the documentation of this file.
1/*
2 * ObjectivelyMVC: Object oriented MVC framework for OpenGL, SDL2 and GNU C.
3 * Copyright (C) 2014 Jay Dolan <jay@jaydolan.com>
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely, subject to the following restrictions:
10 * 1. The origin of this software must not be misrepresented, you must not
11 * claim that you wrote the original software. If you use this software
12 * in a product, an acknowledgment in the product documentation would be
13 * appreciated but is not required.
14 * 2. Altered source versions must be plainly marked as such, and must not be
15 * misrepresented as being the original software.
16 * 3. This notice may not be removed or altered from any source distribution.
17 */
18
19#include <assert.h>
20#include <math.h>
21#include <string.h>
22
23#include <SDL_endian.h>
24
25#include "Colors.h"
26
27const struct Colors Colors = {
28 .AliceBlue = { 240, 248, 255, 255 },
29 .AntiqueWhite = { 250, 235, 215, 255 },
30 .Aqua = { 0, 255, 255, 255 },
31 .Aquamarine = { 127, 255, 212, 255 },
32 .Azure = { 240, 255, 255, 255 },
33 .Beige = { 245, 245, 220, 255 },
34 .Bisque = { 255, 228, 196, 255 },
35 .Black = { 0, 0, 0, 255 },
36 .BlanchedAlmond = { 255, 235, 205, 255 },
37 .Blue = { 0, 0, 255, 255 },
38 .BlueViolet = { 138, 43, 226, 255 },
39 .Brown = { 165, 42, 42, 255 },
40 .BurlyWood = { 222, 184, 135, 255 },
41 .CadetBlue = { 95, 158, 160, 255 },
42 .Charcoal = { 48, 48, 48, 255 },
43 .Chartreuse = { 127, 255, 0, 255 },
44 .Chocolate = { 210, 105, 30, 255 },
45 .Coral = { 255, 127, 80, 255 },
46 .CornflowerBlue = { 100, 149, 237, 255 },
47 .Cornsilk = { 255, 248, 220, 255 },
48 .Crimson = { 220, 20, 60, 255 },
49 .Cyan = { 0, 255, 255, 255 },
50 .DarkBlue = { 0, 0, 139, 255 },
51 .DarkCyan = { 139, 139, 255, 255 },
52 .DarkGoldenRod = { 184, 134, 11, 255 },
53 .DarkGray = { 169, 169, 169, 255 },
54 .DarkGrey = { 169, 169, 169, 255 },
55 .DarkGreen = { 0, 100, 0, 255 },
56 .DarkKhaki = { 189, 183, 107, 255 },
57 .DarkMagenta = { 139, 0, 139, 255 },
58 .DarkOliveGreen = { 85, 107, 47, 255 },
59 .DarkOrange = { 255, 140, 0, 255 },
60 .DarkOrchid = { 153, 50, 204, 255 },
61 .DarkRed = { 139, 0, 0, 255 },
62 .DarkSalmon = { 233, 150, 122, 255 },
63 .DarkSeaGreen = { 143, 188, 143, 255 },
64 .DarkSlateBlue = { 72, 61, 139, 255 },
65 .DarkSlateGray = { 47, 79, 79, 255 },
66 .DarkSlateGrey = { 47, 79, 79, 255 },
67 .DarkTurquoise = { 206, 209, 255, 255 },
68 .DarkViolet = { 148, 0, 211, 255 },
69 .DeepPink = { 255, 20, 147, 255 },
70 .DeepSkyBlue = { 191, 255, 255, 255 },
71 .DimGray = { 105, 105, 105, 255 },
72 .DimGrey = { 105, 105, 105, 255 },
73 .DodgerBlue = { 30, 144, 255, 255 },
74 .FireBrick = { 178, 34, 34, 255 },
75 .FloralWhite = { 255, 250, 240, 255 },
76 .ForestGreen = { 34, 139, 34, 255 },
77 .Fuchsia = { 255, 0, 255, 255 },
78 .Gainsboro = { 220, 220, 220, 255 },
79 .GhostWhite = { 248, 248, 255, 255 },
80 .Gold = { 255, 215, 0, 255 },
81 .GoldenRod = { 218, 165, 32, 255 },
82 .Gray = { 128, 128, 128, 255 },
83 .Grey = { 128, 128, 128, 255 },
84 .Green = { 0, 128, 0, 255 },
85 .GreenYellow = { 173, 255, 47, 255 },
86 .HoneyDew = { 240, 255, 240, 255 },
87 .HotPink = { 255, 105, 180, 255 },
88 .IndianRed = { 205, 92, 92, 255 },
89 .Indigo = { 75, 0, 130, 255 },
90 .Ivory = { 255, 255, 240, 255 },
91 .Khaki = { 240, 230, 140, 255 },
92 .Lavender = { 230, 230, 250, 255 },
93 .LavenderBlush = { 255, 240, 245, 255 },
94 .LawnGreen = { 124, 252, 0, 255 },
95 .LemonChiffon = { 255, 250, 205, 255 },
96 .LightBlue = { 173, 216, 230, 255 },
97 .LightCoral = { 240, 128, 128, 255 },
98 .LightCyan = { 224, 255, 255, 255 },
99 .LightGoldenRodYellow = { 250, 250, 210, 255 },
100 .LightGray = { 211, 211, 211, 255 },
101 .LightGrey = { 211, 211, 211, 255 },
102 .LightGreen = { 144, 238, 144, 255 },
103 .LightPink = { 255, 182, 193, 255 },
104 .LightSalmon = { 255, 160, 122, 255 },
105 .LightSeaGreen = { 32, 178, 170, 255 },
106 .LightSkyBlue = { 135, 206, 250, 255 },
107 .LightSlateGray = { 119, 136, 153, 255 },
108 .LightSlateGrey = { 119, 136, 153, 255 },
109 .LightSteelBlue = { 176, 196, 222, 255 },
110 .LightYellow = { 255, 255, 224, 255 },
111 .Lime = { 0, 255, 0, 255 },
112 .LimeGreen = { 50, 205, 50, 255 },
113 .Linen = { 250, 240, 230, 255 },
114 .Magenta = { 255, 0, 255, 255 },
115 .Maroon = { 128, 0, 0, 255 },
116 .MediumAquaMarine = { 102, 205, 170, 255 },
117 .MediumBlue = { 0, 0, 205, 255 },
118 .MediumOrchid = { 186, 85, 211, 255 },
119 .MediumPurple = { 147, 112, 219, 255 },
120 .MediumSeaGreen = { 60, 179, 113, 255 },
121 .MediumSlateBlue = { 123, 104, 238, 255 },
122 .MediumSpringGreen = { 250, 154, 255, 255 },
123 .MediumTurquoise = { 72, 209, 204, 255 },
124 .MediumVioletRed = { 199, 21, 133, 255 },
125 .MidnightBlue = { 25, 25, 112, 255 },
126 .MintCream = { 245, 255, 250, 255 },
127 .MistyRose = { 255, 228, 225, 255 },
128 .Moccasin = { 255, 228, 181, 255 },
129 .NavajoWhite = { 255, 222, 173, 255 },
130 .Navy = { 0, 0, 128, 255 },
131 .OldLace = { 253, 245, 230, 255 },
132 .Olive = { 128, 128, 0, 255 },
133 .OliveDrab = { 107, 142, 35, 255 },
134 .Orange = { 255, 165, 0, 255 },
135 .OrangeRed = { 255, 69, 0, 255 },
136 .Orchid = { 218, 112, 214, 255 },
137 .PaleGoldenRod = { 238, 232, 170, 255 },
138 .PaleGreen = { 152, 251, 152, 255 },
139 .PaleTurquoise = { 175, 238, 238, 255 },
140 .PaleVioletRed = { 219, 112, 147, 255 },
141 .PapayaWhip = { 255, 239, 213, 255 },
142 .PeachPuff = { 255, 218, 185, 255 },
143 .Peru = { 205, 133, 63, 255 },
144 .Pink = { 255, 192, 203, 255 },
145 .Plum = { 221, 160, 221, 255 },
146 .PowderBlue = { 176, 224, 230, 255 },
147 .Purple = { 128, 0, 128, 255 },
148 .RebeccaPurple = { 102, 51, 153, 255 },
149 .Red = { 255, 0, 0, 255 },
150 .RosyBrown = { 188, 143, 143, 255 },
151 .RoyalBlue = { 65, 105, 225, 255 },
152 .SaddleBrown = { 139, 69, 19, 255 },
153 .Salmon = { 250, 128, 114, 255 },
154 .SandyBrown = { 244, 164, 96, 255 },
155 .SeaGreen = { 46, 139, 87, 255 },
156 .SeaShell = { 255, 245, 238, 255 },
157 .Sienna = { 160, 82, 45, 255 },
158 .Silver = { 192, 192, 192, 255 },
159 .SkyBlue = { 135, 206, 235, 255 },
160 .SlateBlue = { 106, 90, 205, 255 },
161 .SlateGray = { 112, 128, 144, 255 },
162 .SlateGrey = { 112, 128, 144, 255 },
163 .Snow = { 255, 250, 250, 255 },
164 .SpringGreen = { 0, 255, 127, 255 },
165 .SteelBlue = { 70, 130, 180, 255 },
166 .Tan = { 210, 180, 140, 255 },
167 .Teal = { 0, 128, 128, 255 },
168 .Thistle = { 216, 191, 216, 255 },
169 .Tomato = { 255, 99, 71, 255 },
170 .Transparent = { 255, 255, 255, 0 },
171 .Turquoise = { 64, 224, 208, 255 },
172 .Violet = { 238, 130, 238, 255 },
173 .Wheat = { 245, 222, 179, 255 },
174 .White = { 255, 255, 255, 255 },
175 .WhiteSmoke = { 245, 245, 245, 255 },
176 .Yellow = { 255, 255, 0, 255 },
177 .YellowGreen = { 154, 205, 50, 255 },
178};
179
180SDL_Color MVC_ColorForName(const char *name) {
181
182 if (name) {
183 if (strcasecmp(name, "AliceBlue") == 0) {
184 return Colors.AliceBlue;
185 }
186 if (strcasecmp(name, "AntiqueWhite") == 0) {
187 return Colors.AntiqueWhite;
188 }
189 if (strcasecmp(name, "Aqua") == 0) {
190 return Colors.Aqua;
191 }
192 if (strcasecmp(name, "Aquamarine") == 0) {
193 return Colors.Aquamarine;
194 }
195 if (strcasecmp(name, "Azure") == 0) {
196 return Colors.Azure;
197 }
198 if (strcasecmp(name, "Beige") == 0) {
199 return Colors.Beige;
200 }
201 if (strcasecmp(name, "Bisque") == 0) {
202 return Colors.Bisque;
203 }
204 if (strcasecmp(name, "Black") == 0) {
205 return Colors.Black;
206 }
207 if (strcasecmp(name, "BlanchedAlmond") == 0) {
208 return Colors.BlanchedAlmond;
209 }
210 if (strcasecmp(name, "Blue") == 0) {
211 return Colors.Blue;
212 }
213 if (strcasecmp(name, "BlueViolet") == 0) {
214 return Colors.BlueViolet;
215 }
216 if (strcasecmp(name, "Brown") == 0) {
217 return Colors.Brown;
218 }
219 if (strcasecmp(name, "BurlyWood") == 0) {
220 return Colors.BurlyWood;
221 }
222 if (strcasecmp(name, "CadetBlue") == 0) {
223 return Colors.CadetBlue;
224 }
225 if (strcasecmp(name, "Charcoal") == 0) {
226 return Colors.Charcoal;
227 }
228 if (strcasecmp(name, "Chartreuse") == 0) {
229 return Colors.Chartreuse;
230 }
231 if (strcasecmp(name, "Chocolate") == 0) {
232 return Colors.Chocolate;
233 }
234 if (strcasecmp(name, "Coral") == 0) {
235 return Colors.Coral;
236 }
237 if (strcasecmp(name, "CornflowerBlue") == 0) {
238 return Colors.CornflowerBlue;
239 }
240 if (strcasecmp(name, "Cornsilk") == 0) {
241 return Colors.Cornsilk;
242 }
243 if (strcasecmp(name, "Crimson") == 0) {
244 return Colors.Crimson;
245 }
246 if (strcasecmp(name, "Cyan") == 0) {
247 return Colors.Cyan;
248 }
249 if (strcasecmp(name, "DarkBlue") == 0) {
250 return Colors.DarkBlue;
251 }
252 if (strcasecmp(name, "DarkCyan") == 0) {
253 return Colors.DarkCyan;
254 }
255 if (strcasecmp(name, "DarkGoldenRod") == 0) {
256 return Colors.DarkGoldenRod;
257 }
258 if (strcasecmp(name, "DarkGray") == 0) {
259 return Colors.DarkGray;
260 }
261 if (strcasecmp(name, "DarkGrey") == 0) {
262 return Colors.DarkGrey;
263 }
264 if (strcasecmp(name, "DarkGreen") == 0) {
265 return Colors.DarkGreen;
266 }
267 if (strcasecmp(name, "DarkKhaki") == 0) {
268 return Colors.DarkKhaki;
269 }
270 if (strcasecmp(name, "DarkMagenta") == 0) {
271 return Colors.DarkMagenta;
272 }
273 if (strcasecmp(name, "DarkOliveGreen") == 0) {
274 return Colors.DarkOliveGreen;
275 }
276 if (strcasecmp(name, "DarkOrange") == 0) {
277 return Colors.DarkOrange;
278 }
279 if (strcasecmp(name, "DarkOrchid") == 0) {
280 return Colors.DarkOrchid;
281 }
282 if (strcasecmp(name, "DarkRed") == 0) {
283 return Colors.DarkRed;
284 }
285 if (strcasecmp(name, "DarkSalmon") == 0) {
286 return Colors.DarkSalmon;
287 }
288 if (strcasecmp(name, "DarkSeaGreen") == 0) {
289 return Colors.DarkSeaGreen;
290 }
291 if (strcasecmp(name, "DarkSlateBlue") == 0) {
292 return Colors.DarkSlateBlue;
293 }
294 if (strcasecmp(name, "DarkSlateGray") == 0) {
295 return Colors.DarkSlateGray;
296 }
297 if (strcasecmp(name, "DarkSlateGrey") == 0) {
298 return Colors.DarkSlateGrey;
299 }
300 if (strcasecmp(name, "DarkTurquoise") == 0) {
301 return Colors.DarkTurquoise;
302 }
303 if (strcasecmp(name, "DarkViolet") == 0) {
304 return Colors.DarkViolet;
305 }
306 if (strcasecmp(name, "DeepPink") == 0) {
307 return Colors.DeepPink;
308 }
309 if (strcasecmp(name, "DeepSkyBlue") == 0) {
310 return Colors.DeepSkyBlue;
311 }
312 if (strcasecmp(name, "DimGray") == 0) {
313 return Colors.DimGray;
314 }
315 if (strcasecmp(name, "DimGrey") == 0) {
316 return Colors.DimGrey;
317 }
318 if (strcasecmp(name, "DodgerBlue") == 0) {
319 return Colors.DodgerBlue;
320 }
321 if (strcasecmp(name, "FireBrick") == 0) {
322 return Colors.FireBrick;
323 }
324 if (strcasecmp(name, "FloralWhite") == 0) {
325 return Colors.FloralWhite;
326 }
327 if (strcasecmp(name, "ForestGreen") == 0) {
328 return Colors.ForestGreen;
329 }
330 if (strcasecmp(name, "Fuchsia") == 0) {
331 return Colors.Fuchsia;
332 }
333 if (strcasecmp(name, "Gainsboro") == 0) {
334 return Colors.Gainsboro;
335 }
336 if (strcasecmp(name, "GhostWhite") == 0) {
337 return Colors.GhostWhite;
338 }
339 if (strcasecmp(name, "Gold") == 0) {
340 return Colors.Gold;
341 }
342 if (strcasecmp(name, "GoldenRod") == 0) {
343 return Colors.GoldenRod;
344 }
345 if (strcasecmp(name, "Gray") == 0) {
346 return Colors.Gray;
347 }
348 if (strcasecmp(name, "Grey") == 0) {
349 return Colors.Grey;
350 }
351 if (strcasecmp(name, "Green") == 0) {
352 return Colors.Green;
353 }
354 if (strcasecmp(name, "GreenYellow") == 0) {
355 return Colors.GreenYellow;
356 }
357 if (strcasecmp(name, "HoneyDew") == 0) {
358 return Colors.HoneyDew;
359 }
360 if (strcasecmp(name, "HotPink") == 0) {
361 return Colors.HotPink;
362 }
363 if (strcasecmp(name, "IndianRed") == 0) {
364 return Colors.IndianRed;
365 }
366 if (strcasecmp(name, "Indigo") == 0) {
367 return Colors.Indigo;
368 }
369 if (strcasecmp(name, "Ivory") == 0) {
370 return Colors.Ivory;
371 }
372 if (strcasecmp(name, "Khaki") == 0) {
373 return Colors.Khaki;
374 }
375 if (strcasecmp(name, "Lavender") == 0) {
376 return Colors.Lavender;
377 }
378 if (strcasecmp(name, "LavenderBlush") == 0) {
379 return Colors.LavenderBlush;
380 }
381 if (strcasecmp(name, "LawnGreen") == 0) {
382 return Colors.LawnGreen;
383 }
384 if (strcasecmp(name, "LemonChiffon") == 0) {
385 return Colors.LemonChiffon;
386 }
387 if (strcasecmp(name, "LightBlue") == 0) {
388 return Colors.LightBlue;
389 }
390 if (strcasecmp(name, "LightCoral") == 0) {
391 return Colors.LightCoral;
392 }
393 if (strcasecmp(name, "LightCyan") == 0) {
394 return Colors.LightCyan;
395 }
396 if (strcasecmp(name, "LightGoldenRodYellow") == 0) {
398 }
399 if (strcasecmp(name, "LightGray") == 0) {
400 return Colors.LightGray;
401 }
402 if (strcasecmp(name, "LightGrey") == 0) {
403 return Colors.LightGrey;
404 }
405 if (strcasecmp(name, "LightGreen") == 0) {
406 return Colors.LightGreen;
407 }
408 if (strcasecmp(name, "LightPink") == 0) {
409 return Colors.LightPink;
410 }
411 if (strcasecmp(name, "LightSalmon") == 0) {
412 return Colors.LightSalmon;
413 }
414 if (strcasecmp(name, "LightSeaGreen") == 0) {
415 return Colors.LightSeaGreen;
416 }
417 if (strcasecmp(name, "LightSkyBlue") == 0) {
418 return Colors.LightSkyBlue;
419 }
420 if (strcasecmp(name, "LightSlateGray") == 0) {
421 return Colors.LightSlateGray;
422 }
423 if (strcasecmp(name, "LightSlateGrey") == 0) {
424 return Colors.LightSlateGrey;
425 }
426 if (strcasecmp(name, "LightSteelBlue") == 0) {
427 return Colors.LightSteelBlue;
428 }
429 if (strcasecmp(name, "LightYellow") == 0) {
430 return Colors.LightYellow;
431 }
432 if (strcasecmp(name, "Lime") == 0) {
433 return Colors.Lime;
434 }
435 if (strcasecmp(name, "LimeGreen") == 0) {
436 return Colors.LimeGreen;
437 }
438 if (strcasecmp(name, "Linen") == 0) {
439 return Colors.Linen;
440 }
441 if (strcasecmp(name, "Magenta") == 0) {
442 return Colors.Magenta;
443 }
444 if (strcasecmp(name, "Maroon") == 0) {
445 return Colors.Maroon;
446 }
447 if (strcasecmp(name, "MediumAquaMarine") == 0) {
449 }
450 if (strcasecmp(name, "MediumBlue") == 0) {
451 return Colors.MediumBlue;
452 }
453 if (strcasecmp(name, "MediumOrchid") == 0) {
454 return Colors.MediumOrchid;
455 }
456 if (strcasecmp(name, "MediumPurple") == 0) {
457 return Colors.MediumPurple;
458 }
459 if (strcasecmp(name, "MediumSeaGreen") == 0) {
460 return Colors.MediumSeaGreen;
461 }
462 if (strcasecmp(name, "MediumSlateBlue") == 0) {
463 return Colors.MediumSlateBlue;
464 }
465 if (strcasecmp(name, "MediumSpringGreen") == 0) {
467 }
468 if (strcasecmp(name, "MediumTurquoise") == 0) {
469 return Colors.MediumTurquoise;
470 }
471 if (strcasecmp(name, "MediumVioletRed") == 0) {
472 return Colors.MediumVioletRed;
473 }
474 if (strcasecmp(name, "MidnightBlue") == 0) {
475 return Colors.MidnightBlue;
476 }
477 if (strcasecmp(name, "MintCream") == 0) {
478 return Colors.MintCream;
479 }
480 if (strcasecmp(name, "MistyRose") == 0) {
481 return Colors.MistyRose;
482 }
483 if (strcasecmp(name, "Moccasin") == 0) {
484 return Colors.Moccasin;
485 }
486 if (strcasecmp(name, "NavajoWhite") == 0) {
487 return Colors.NavajoWhite;
488 }
489 if (strcasecmp(name, "Navy") == 0) {
490 return Colors.Navy;
491 }
492 if (strcasecmp(name, "OldLace") == 0) {
493 return Colors.OldLace;
494 }
495 if (strcasecmp(name, "Olive") == 0) {
496 return Colors.Olive;
497 }
498 if (strcasecmp(name, "OliveDrab") == 0) {
499 return Colors.OliveDrab;
500 }
501 if (strcasecmp(name, "Orange") == 0) {
502 return Colors.Orange;
503 }
504 if (strcasecmp(name, "OrangeRed") == 0) {
505 return Colors.OrangeRed;
506 }
507 if (strcasecmp(name, "Orchid") == 0) {
508 return Colors.Orchid;
509 }
510 if (strcasecmp(name, "PaleGoldenRod") == 0) {
511 return Colors.PaleGoldenRod;
512 }
513 if (strcasecmp(name, "PaleGreen") == 0) {
514 return Colors.PaleGreen;
515 }
516 if (strcasecmp(name, "PaleTurquoise") == 0) {
517 return Colors.PaleTurquoise;
518 }
519 if (strcasecmp(name, "PaleVioletRed") == 0) {
520 return Colors.PaleVioletRed;
521 }
522 if (strcasecmp(name, "PapayaWhip") == 0) {
523 return Colors.PapayaWhip;
524 }
525 if (strcasecmp(name, "PeachPuff") == 0) {
526 return Colors.PeachPuff;
527 }
528 if (strcasecmp(name, "Peru") == 0) {
529 return Colors.Peru;
530 }
531 if (strcasecmp(name, "Pink") == 0) {
532 return Colors.Pink;
533 }
534 if (strcasecmp(name, "Plum") == 0) {
535 return Colors.Plum;
536 }
537 if (strcasecmp(name, "PowderBlue") == 0) {
538 return Colors.PowderBlue;
539 }
540 if (strcasecmp(name, "Purple") == 0) {
541 return Colors.Purple;
542 }
543 if (strcasecmp(name, "RebeccaPurple") == 0) {
544 return Colors.RebeccaPurple;
545 }
546 if (strcasecmp(name, "Red") == 0) {
547 return Colors.Red;
548 }
549 if (strcasecmp(name, "RosyBrown") == 0) {
550 return Colors.RosyBrown;
551 }
552 if (strcasecmp(name, "RoyalBlue") == 0) {
553 return Colors.RoyalBlue;
554 }
555 if (strcasecmp(name, "SaddleBrown") == 0) {
556 return Colors.SaddleBrown;
557 }
558 if (strcasecmp(name, "Salmon") == 0) {
559 return Colors.Salmon;
560 }
561 if (strcasecmp(name, "SandyBrown") == 0) {
562 return Colors.SandyBrown;
563 }
564 if (strcasecmp(name, "SeaGreen") == 0) {
565 return Colors.SeaGreen;
566 }
567 if (strcasecmp(name, "SeaShell") == 0) {
568 return Colors.SeaShell;
569 }
570 if (strcasecmp(name, "Sienna") == 0) {
571 return Colors.Sienna;
572 }
573 if (strcasecmp(name, "Silver") == 0) {
574 return Colors.Silver;
575 }
576 if (strcasecmp(name, "SkyBlue") == 0) {
577 return Colors.SkyBlue;
578 }
579 if (strcasecmp(name, "SlateBlue") == 0) {
580 return Colors.SlateBlue;
581 }
582 if (strcasecmp(name, "SlateGray") == 0) {
583 return Colors.SlateGray;
584 }
585 if (strcasecmp(name, "SlateGrey") == 0) {
586 return Colors.SlateGrey;
587 }
588 if (strcasecmp(name, "Snow") == 0) {
589 return Colors.Snow;
590 }
591 if (strcasecmp(name, "SpringGreen") == 0) {
592 return Colors.SpringGreen;
593 }
594 if (strcasecmp(name, "SteelBlue") == 0) {
595 return Colors.SteelBlue;
596 }
597 if (strcasecmp(name, "Tan") == 0) {
598 return Colors.Tan;
599 }
600 if (strcasecmp(name, "Teal") == 0) {
601 return Colors.Teal;
602 }
603 if (strcasecmp(name, "Thistle") == 0) {
604 return Colors.Thistle;
605 }
606 if (strcasecmp(name, "Tomato") == 0) {
607 return Colors.Tomato;
608 }
609 if (strcasecmp(name, "Transparent") == 0) {
610 return Colors.Transparent;
611 }
612 if (strcasecmp(name, "Turquoise") == 0) {
613 return Colors.Turquoise;
614 }
615 if (strcasecmp(name, "Violet") == 0) {
616 return Colors.Violet;
617 }
618 if (strcasecmp(name, "Wheat") == 0) {
619 return Colors.Wheat;
620 }
621 if (strcasecmp(name, "White") == 0) {
622 return Colors.White;
623 }
624 if (strcasecmp(name, "WhiteSmoke") == 0) {
625 return Colors.WhiteSmoke;
626 }
627 if (strcasecmp(name, "Yellow") == 0) {
628 return Colors.Yellow;
629 }
630 if (strcasecmp(name, "YellowGreen") == 0) {
631 return Colors.YellowGreen;
632 }
633 }
634
635 return Colors.Black;
636}
637
638SDL_Color MVC_HexToRGBA(const char *hex) {
639 static char buffer[9];
640
641 union {
642 SDL_Color c;
643 unsigned int u;
644 } color;
645
646 color.u = 0;
647
648 const size_t length = strlen(hex);
649 if (length != 6 && length != 8) {
650 return color.c;
651 }
652
653 strcpy(buffer, hex);
654
655 if (length == 6) {
656 strcat(buffer, "ff");
657 }
658
659 if (sscanf(buffer, "%x", &color.u) != 1) {
660 return color.c;
661 }
662
663#if SDL_BYTEORDER == SDL_LIL_ENDIAN
664 color.u = (((color.u & 0xff000000) >> 24) | ((color.u & 0x00ff0000) >> 8) | ((color.u & 0x0000ff00) << 8) | ((color.u & 0x000000ff) << 24));
665#endif
666
667 return color.c;
668}
669
670char *MVC_RGBToHex(const SDL_Color *color) {
671 return MVC_RGBAToHex(&(const SDL_Color) { .r = color->r, .g = color->g, .b = color->b, .a = 255 });
672}
673
674char *MVC_RGBAToHex(const SDL_Color *color) {
675 static char hex[9];
676
677 assert(color);
678
679 snprintf(hex, sizeof(hex), "%02x%02x%02x%02x", color->r, color->g, color->b, color->a);
680
681 return hex;
682}
683
684SDL_Color MVC_HSVToRGB(double hue, double saturation, double value) {
685
686 SDL_Color color = { .a = 255 };
687
688 const double h = fabs(fmod(hue, 360.0)) / 60.0;
689 const int i = (int) h;
690 const double f = h - i;
691 const double v = value * 255;
692 const double p = v * (1.0 - saturation);
693 const double q = v * (1.0 - (saturation * f));
694 const double t = v * (1.0 - (saturation * (1.0 - f)));
695
696 switch (i) {
697 case 0:
698 color.r = v;
699 color.g = t;
700 color.b = p;
701 break;
702 case 1:
703 color.r = q;
704 color.g = v;
705 color.b = p;
706 break;
707 case 2:
708 color.r = p;
709 color.g = v;
710 color.b = t;
711 break;
712 case 3:
713 color.r = p;
714 color.g = q;
715 color.b = v;
716 break;
717 case 4:
718 color.r = t;
719 color.g = p;
720 color.b = v;
721 break;
722 default:
723 color.r = v;
724 color.g = p;
725 color.b = q;
726 break;
727 }
728
729 return color;
730}
731
732void MVC_RGBToHSV(const SDL_Color *color, double *hue, double *saturation, double *value) {
733
734 assert(color);
735
736 const double r = color->r / 255.0;
737 const double g = color->g / 255.0;
738 const double b = color->b / 255.0;
739
740 const double rgbMax = max(max(r, g), b);
741 const double rgbMin = min(min(r, g), b);
742 const double rgbDelta = rgbMax - rgbMin;
743
744 if (rgbDelta > 0.0) {
745
746 if (hue) {
747 if (rgbMax == r) {
748 *hue = 60.0 * fmod(((g - b) / rgbDelta), 6.0);
749 } else if (rgbMax == g) {
750 *hue = 60.0 * (((b - r) / rgbDelta) + 2.0);
751 } else if (rgbMax == b) {
752 *hue = 60.0 * (((r - g) / rgbDelta) + 4.0);
753 }
754
755 while (*hue < 0.0) {
756 *hue += 360.0;
757 }
758 }
759
760 if (saturation) {
761 if (rgbMax > 0.0) {
762 *saturation = rgbDelta / rgbMax;
763 } else {
764 *saturation = 0.0;
765 }
766 }
767
768 if (value) {
769 *value = rgbMax;
770 }
771
772 } else {
773 if (hue) {
774 *hue = 0.0;
775 }
776
777 if (saturation) {
778 *saturation = 0.0;
779 }
780
781 if (value) {
782 *value = rgbMax;
783 }
784 }
785}
W3C Color constants.
W3C Color constants.
Definition: Colors.h:37
SDL_Color LightGrey
Definition: Colors.h:112
SDL_Color WhiteSmoke
Definition: Colors.h:186
SDL_Color LightBlue
Definition: Colors.h:107
SDL_Color DarkOrange
Definition: Colors.h:70
SDL_Color Gold
Definition: Colors.h:91
SDL_Color MediumBlue
Definition: Colors.h:128
SDL_Color DarkGoldenRod
Definition: Colors.h:63
SDL_Color Brown
Definition: Colors.h:50
SDL_Color LightSalmon
Definition: Colors.h:115
SDL_Color MediumSlateBlue
Definition: Colors.h:132
SDL_Color Pink
Definition: Colors.h:155
SDL_Color Lime
Definition: Colors.h:122
SDL_Color Turquoise
Definition: Colors.h:182
SDL_Color DarkTurquoise
Definition: Colors.h:78
SDL_Color Thistle
Definition: Colors.h:179
SDL_Color SlateGray
Definition: Colors.h:172
SDL_Color AliceBlue
Definition: Colors.h:39
SDL_Color Magenta
Definition: Colors.h:125
SDL_Color Fuchsia
Definition: Colors.h:88
SDL_Color SlateBlue
Definition: Colors.h:171
SDL_Color Plum
Definition: Colors.h:156
SDL_Color LavenderBlush
Definition: Colors.h:104
SDL_Color DimGray
Definition: Colors.h:82
SDL_Color DarkRed
Definition: Colors.h:72
SDL_Color LightSteelBlue
Definition: Colors.h:120
SDL_Color FloralWhite
Definition: Colors.h:86
SDL_Color SlateGrey
Definition: Colors.h:173
SDL_Color MidnightBlue
Definition: Colors.h:136
SDL_Color ForestGreen
Definition: Colors.h:87
SDL_Color DarkViolet
Definition: Colors.h:79
SDL_Color DarkCyan
Definition: Colors.h:62
SDL_Color White
Definition: Colors.h:185
SDL_Color Crimson
Definition: Colors.h:59
SDL_Color Aquamarine
Definition: Colors.h:42
SDL_Color PowderBlue
Definition: Colors.h:157
SDL_Color SteelBlue
Definition: Colors.h:176
SDL_Color BlanchedAlmond
Definition: Colors.h:47
SDL_Color Azure
Definition: Colors.h:43
SDL_Color Tan
Definition: Colors.h:177
SDL_Color Green
Definition: Colors.h:95
SDL_Color Wheat
Definition: Colors.h:184
SDL_Color Coral
Definition: Colors.h:56
SDL_Color Tomato
Definition: Colors.h:180
SDL_Color MintCream
Definition: Colors.h:137
OBJECTIVELYMVC_EXPORT void MVC_RGBToHSV(const SDL_Color *color, double *hue, double *saturation, double *value)
Converts the given RGB color to HSV components.
Definition: Colors.c:732
SDL_Color Navy
Definition: Colors.h:141
SDL_Color NavajoWhite
Definition: Colors.h:140
SDL_Color LightSlateGray
Definition: Colors.h:118
SDL_Color Snow
Definition: Colors.h:174
SDL_Color Gainsboro
Definition: Colors.h:89
SDL_Color PaleTurquoise
Definition: Colors.h:150
SDL_Color Lavender
Definition: Colors.h:103
SDL_Color RosyBrown
Definition: Colors.h:161
SDL_Color DeepSkyBlue
Definition: Colors.h:81
SDL_Color Maroon
Definition: Colors.h:126
SDL_Color LightPink
Definition: Colors.h:114
SDL_Color CadetBlue
Definition: Colors.h:52
SDL_Color RebeccaPurple
Definition: Colors.h:159
SDL_Color DarkSeaGreen
Definition: Colors.h:74
SDL_Color DarkGray
Definition: Colors.h:64
SDL_Color Cornsilk
Definition: Colors.h:58
OBJECTIVELYMVC_EXPORT SDL_Color MVC_HexToRGBA(const char *hexString)
Converts the given hexadecimal color string to an RGBA color.
Definition: Colors.c:638
SDL_Color RoyalBlue
Definition: Colors.h:162
SDL_Color LightSkyBlue
Definition: Colors.h:117
SDL_Color Ivory
Definition: Colors.h:101
SDL_Color Cyan
Definition: Colors.h:60
SDL_Color DodgerBlue
Definition: Colors.h:84
SDL_Color PeachPuff
Definition: Colors.h:153
SDL_Color DarkGrey
Definition: Colors.h:65
SDL_Color Linen
Definition: Colors.h:124
SDL_Color Salmon
Definition: Colors.h:164
SDL_Color DarkSlateGray
Definition: Colors.h:76
SDL_Color GreenYellow
Definition: Colors.h:96
SDL_Color DarkKhaki
Definition: Colors.h:67
OBJECTIVELYMVC_EXPORT char * MVC_RGBAToHex(const SDL_Color *color)
Definition: Colors.c:674
SDL_Color LightSlateGrey
Definition: Colors.h:119
SDL_Color Charcoal
Definition: Colors.h:53
SDL_Color Yellow
Definition: Colors.h:187
SDL_Color Blue
Definition: Colors.h:48
SDL_Color MediumOrchid
Definition: Colors.h:129
SDL_Color DimGrey
Definition: Colors.h:83
SDL_Color PaleGoldenRod
Definition: Colors.h:148
SDL_Color Violet
Definition: Colors.h:183
SDL_Color GhostWhite
Definition: Colors.h:90
SDL_Color Sienna
Definition: Colors.h:168
SDL_Color DarkSlateGrey
Definition: Colors.h:77
SDL_Color GoldenRod
Definition: Colors.h:92
SDL_Color LightGreen
Definition: Colors.h:113
SDL_Color SaddleBrown
Definition: Colors.h:163
SDL_Color CornflowerBlue
Definition: Colors.h:57
SDL_Color Chartreuse
Definition: Colors.h:54
SDL_Color FireBrick
Definition: Colors.h:85
SDL_Color Transparent
Definition: Colors.h:181
SDL_Color LawnGreen
Definition: Colors.h:105
SDL_Color Indigo
Definition: Colors.h:100
SDL_Color MediumTurquoise
Definition: Colors.h:134
SDL_Color Olive
Definition: Colors.h:143
SDL_Color MediumSpringGreen
Definition: Colors.h:133
SDL_Color Purple
Definition: Colors.h:158
SDL_Color DarkSalmon
Definition: Colors.h:73
SDL_Color DeepPink
Definition: Colors.h:80
SDL_Color OliveDrab
Definition: Colors.h:144
SDL_Color LightCoral
Definition: Colors.h:108
SDL_Color LightGray
Definition: Colors.h:111
SDL_Color Black
Definition: Colors.h:46
SDL_Color Orange
Definition: Colors.h:145
SDL_Color SeaShell
Definition: Colors.h:167
SDL_Color Peru
Definition: Colors.h:154
SDL_Color LightSeaGreen
Definition: Colors.h:116
SDL_Color MediumVioletRed
Definition: Colors.h:135
SDL_Color SpringGreen
Definition: Colors.h:175
SDL_Color PapayaWhip
Definition: Colors.h:152
SDL_Color LightGoldenRodYellow
Definition: Colors.h:110
SDL_Color Aqua
Definition: Colors.h:41
SDL_Color DarkSlateBlue
Definition: Colors.h:75
SDL_Color Beige
Definition: Colors.h:44
SDL_Color MediumPurple
Definition: Colors.h:130
SDL_Color LightYellow
Definition: Colors.h:121
SDL_Color DarkOliveGreen
Definition: Colors.h:69
SDL_Color HotPink
Definition: Colors.h:98
SDL_Color LimeGreen
Definition: Colors.h:123
SDL_Color MediumSeaGreen
Definition: Colors.h:131
SDL_Color Gray
Definition: Colors.h:93
SDL_Color PaleVioletRed
Definition: Colors.h:151
SDL_Color SandyBrown
Definition: Colors.h:165
SDL_Color DarkOrchid
Definition: Colors.h:71
SDL_Color AntiqueWhite
Definition: Colors.h:40
OBJECTIVELYMVC_EXPORT SDL_Color MVC_ColorForName(const char *name)
Definition: Colors.c:180
SDL_Color Silver
Definition: Colors.h:169
SDL_Color Teal
Definition: Colors.h:178
SDL_Color DarkGreen
Definition: Colors.h:66
SDL_Color BlueViolet
Definition: Colors.h:49
SDL_Color OldLace
Definition: Colors.h:142
SDL_Color Khaki
Definition: Colors.h:102
SDL_Color Chocolate
Definition: Colors.h:55
SDL_Color Moccasin
Definition: Colors.h:139
SDL_Color IndianRed
Definition: Colors.h:99
SDL_Color MediumAquaMarine
Definition: Colors.h:127
SDL_Color LemonChiffon
Definition: Colors.h:106
SDL_Color HoneyDew
Definition: Colors.h:97
OBJECTIVELYMVC_EXPORT char * MVC_RGBToHex(const SDL_Color *color)
Definition: Colors.c:670
SDL_Color Orchid
Definition: Colors.h:147
SDL_Color Bisque
Definition: Colors.h:45
SDL_Color LightCyan
Definition: Colors.h:109
SDL_Color YellowGreen
Definition: Colors.h:188
SDL_Color PaleGreen
Definition: Colors.h:149
SDL_Color OrangeRed
Definition: Colors.h:146
SDL_Color BurlyWood
Definition: Colors.h:51
OBJECTIVELYMVC_EXPORT SDL_Color MVC_HSVToRGB(double hue, double saturation, double value)
Converts the given HSV components to an RGB color.
Definition: Colors.c:684
SDL_Color DarkMagenta
Definition: Colors.h:68
SDL_Color SeaGreen
Definition: Colors.h:166
SDL_Color DarkBlue
Definition: Colors.h:61
SDL_Color Grey
Definition: Colors.h:94
SDL_Color MistyRose
Definition: Colors.h:138
SDL_Color SkyBlue
Definition: Colors.h:170
SDL_Color Red
Definition: Colors.h:160