23#include <SDL_endian.h>
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 },
183 if (strcasecmp(name,
"AliceBlue") == 0) {
186 if (strcasecmp(name,
"AntiqueWhite") == 0) {
189 if (strcasecmp(name,
"Aqua") == 0) {
192 if (strcasecmp(name,
"Aquamarine") == 0) {
195 if (strcasecmp(name,
"Azure") == 0) {
198 if (strcasecmp(name,
"Beige") == 0) {
201 if (strcasecmp(name,
"Bisque") == 0) {
204 if (strcasecmp(name,
"Black") == 0) {
207 if (strcasecmp(name,
"BlanchedAlmond") == 0) {
210 if (strcasecmp(name,
"Blue") == 0) {
213 if (strcasecmp(name,
"BlueViolet") == 0) {
216 if (strcasecmp(name,
"Brown") == 0) {
219 if (strcasecmp(name,
"BurlyWood") == 0) {
222 if (strcasecmp(name,
"CadetBlue") == 0) {
225 if (strcasecmp(name,
"Charcoal") == 0) {
228 if (strcasecmp(name,
"Chartreuse") == 0) {
231 if (strcasecmp(name,
"Chocolate") == 0) {
234 if (strcasecmp(name,
"Coral") == 0) {
237 if (strcasecmp(name,
"CornflowerBlue") == 0) {
240 if (strcasecmp(name,
"Cornsilk") == 0) {
243 if (strcasecmp(name,
"Crimson") == 0) {
246 if (strcasecmp(name,
"Cyan") == 0) {
249 if (strcasecmp(name,
"DarkBlue") == 0) {
252 if (strcasecmp(name,
"DarkCyan") == 0) {
255 if (strcasecmp(name,
"DarkGoldenRod") == 0) {
258 if (strcasecmp(name,
"DarkGray") == 0) {
261 if (strcasecmp(name,
"DarkGrey") == 0) {
264 if (strcasecmp(name,
"DarkGreen") == 0) {
267 if (strcasecmp(name,
"DarkKhaki") == 0) {
270 if (strcasecmp(name,
"DarkMagenta") == 0) {
273 if (strcasecmp(name,
"DarkOliveGreen") == 0) {
276 if (strcasecmp(name,
"DarkOrange") == 0) {
279 if (strcasecmp(name,
"DarkOrchid") == 0) {
282 if (strcasecmp(name,
"DarkRed") == 0) {
285 if (strcasecmp(name,
"DarkSalmon") == 0) {
288 if (strcasecmp(name,
"DarkSeaGreen") == 0) {
291 if (strcasecmp(name,
"DarkSlateBlue") == 0) {
294 if (strcasecmp(name,
"DarkSlateGray") == 0) {
297 if (strcasecmp(name,
"DarkSlateGrey") == 0) {
300 if (strcasecmp(name,
"DarkTurquoise") == 0) {
303 if (strcasecmp(name,
"DarkViolet") == 0) {
306 if (strcasecmp(name,
"DeepPink") == 0) {
309 if (strcasecmp(name,
"DeepSkyBlue") == 0) {
312 if (strcasecmp(name,
"DimGray") == 0) {
315 if (strcasecmp(name,
"DimGrey") == 0) {
318 if (strcasecmp(name,
"DodgerBlue") == 0) {
321 if (strcasecmp(name,
"FireBrick") == 0) {
324 if (strcasecmp(name,
"FloralWhite") == 0) {
327 if (strcasecmp(name,
"ForestGreen") == 0) {
330 if (strcasecmp(name,
"Fuchsia") == 0) {
333 if (strcasecmp(name,
"Gainsboro") == 0) {
336 if (strcasecmp(name,
"GhostWhite") == 0) {
339 if (strcasecmp(name,
"Gold") == 0) {
342 if (strcasecmp(name,
"GoldenRod") == 0) {
345 if (strcasecmp(name,
"Gray") == 0) {
348 if (strcasecmp(name,
"Grey") == 0) {
351 if (strcasecmp(name,
"Green") == 0) {
354 if (strcasecmp(name,
"GreenYellow") == 0) {
357 if (strcasecmp(name,
"HoneyDew") == 0) {
360 if (strcasecmp(name,
"HotPink") == 0) {
363 if (strcasecmp(name,
"IndianRed") == 0) {
366 if (strcasecmp(name,
"Indigo") == 0) {
369 if (strcasecmp(name,
"Ivory") == 0) {
372 if (strcasecmp(name,
"Khaki") == 0) {
375 if (strcasecmp(name,
"Lavender") == 0) {
378 if (strcasecmp(name,
"LavenderBlush") == 0) {
381 if (strcasecmp(name,
"LawnGreen") == 0) {
384 if (strcasecmp(name,
"LemonChiffon") == 0) {
387 if (strcasecmp(name,
"LightBlue") == 0) {
390 if (strcasecmp(name,
"LightCoral") == 0) {
393 if (strcasecmp(name,
"LightCyan") == 0) {
396 if (strcasecmp(name,
"LightGoldenRodYellow") == 0) {
399 if (strcasecmp(name,
"LightGray") == 0) {
402 if (strcasecmp(name,
"LightGrey") == 0) {
405 if (strcasecmp(name,
"LightGreen") == 0) {
408 if (strcasecmp(name,
"LightPink") == 0) {
411 if (strcasecmp(name,
"LightSalmon") == 0) {
414 if (strcasecmp(name,
"LightSeaGreen") == 0) {
417 if (strcasecmp(name,
"LightSkyBlue") == 0) {
420 if (strcasecmp(name,
"LightSlateGray") == 0) {
423 if (strcasecmp(name,
"LightSlateGrey") == 0) {
426 if (strcasecmp(name,
"LightSteelBlue") == 0) {
429 if (strcasecmp(name,
"LightYellow") == 0) {
432 if (strcasecmp(name,
"Lime") == 0) {
435 if (strcasecmp(name,
"LimeGreen") == 0) {
438 if (strcasecmp(name,
"Linen") == 0) {
441 if (strcasecmp(name,
"Magenta") == 0) {
444 if (strcasecmp(name,
"Maroon") == 0) {
447 if (strcasecmp(name,
"MediumAquaMarine") == 0) {
450 if (strcasecmp(name,
"MediumBlue") == 0) {
453 if (strcasecmp(name,
"MediumOrchid") == 0) {
456 if (strcasecmp(name,
"MediumPurple") == 0) {
459 if (strcasecmp(name,
"MediumSeaGreen") == 0) {
462 if (strcasecmp(name,
"MediumSlateBlue") == 0) {
465 if (strcasecmp(name,
"MediumSpringGreen") == 0) {
468 if (strcasecmp(name,
"MediumTurquoise") == 0) {
471 if (strcasecmp(name,
"MediumVioletRed") == 0) {
474 if (strcasecmp(name,
"MidnightBlue") == 0) {
477 if (strcasecmp(name,
"MintCream") == 0) {
480 if (strcasecmp(name,
"MistyRose") == 0) {
483 if (strcasecmp(name,
"Moccasin") == 0) {
486 if (strcasecmp(name,
"NavajoWhite") == 0) {
489 if (strcasecmp(name,
"Navy") == 0) {
492 if (strcasecmp(name,
"OldLace") == 0) {
495 if (strcasecmp(name,
"Olive") == 0) {
498 if (strcasecmp(name,
"OliveDrab") == 0) {
501 if (strcasecmp(name,
"Orange") == 0) {
504 if (strcasecmp(name,
"OrangeRed") == 0) {
507 if (strcasecmp(name,
"Orchid") == 0) {
510 if (strcasecmp(name,
"PaleGoldenRod") == 0) {
513 if (strcasecmp(name,
"PaleGreen") == 0) {
516 if (strcasecmp(name,
"PaleTurquoise") == 0) {
519 if (strcasecmp(name,
"PaleVioletRed") == 0) {
522 if (strcasecmp(name,
"PapayaWhip") == 0) {
525 if (strcasecmp(name,
"PeachPuff") == 0) {
528 if (strcasecmp(name,
"Peru") == 0) {
531 if (strcasecmp(name,
"Pink") == 0) {
534 if (strcasecmp(name,
"Plum") == 0) {
537 if (strcasecmp(name,
"PowderBlue") == 0) {
540 if (strcasecmp(name,
"Purple") == 0) {
543 if (strcasecmp(name,
"RebeccaPurple") == 0) {
546 if (strcasecmp(name,
"Red") == 0) {
549 if (strcasecmp(name,
"RosyBrown") == 0) {
552 if (strcasecmp(name,
"RoyalBlue") == 0) {
555 if (strcasecmp(name,
"SaddleBrown") == 0) {
558 if (strcasecmp(name,
"Salmon") == 0) {
561 if (strcasecmp(name,
"SandyBrown") == 0) {
564 if (strcasecmp(name,
"SeaGreen") == 0) {
567 if (strcasecmp(name,
"SeaShell") == 0) {
570 if (strcasecmp(name,
"Sienna") == 0) {
573 if (strcasecmp(name,
"Silver") == 0) {
576 if (strcasecmp(name,
"SkyBlue") == 0) {
579 if (strcasecmp(name,
"SlateBlue") == 0) {
582 if (strcasecmp(name,
"SlateGray") == 0) {
585 if (strcasecmp(name,
"SlateGrey") == 0) {
588 if (strcasecmp(name,
"Snow") == 0) {
591 if (strcasecmp(name,
"SpringGreen") == 0) {
594 if (strcasecmp(name,
"SteelBlue") == 0) {
597 if (strcasecmp(name,
"Tan") == 0) {
600 if (strcasecmp(name,
"Teal") == 0) {
603 if (strcasecmp(name,
"Thistle") == 0) {
606 if (strcasecmp(name,
"Tomato") == 0) {
609 if (strcasecmp(name,
"Transparent") == 0) {
612 if (strcasecmp(name,
"Turquoise") == 0) {
615 if (strcasecmp(name,
"Violet") == 0) {
618 if (strcasecmp(name,
"Wheat") == 0) {
621 if (strcasecmp(name,
"White") == 0) {
624 if (strcasecmp(name,
"WhiteSmoke") == 0) {
627 if (strcasecmp(name,
"Yellow") == 0) {
630 if (strcasecmp(name,
"YellowGreen") == 0) {
639 static char buffer[9];
648 const size_t length = strlen(hex);
649 if (length != 6 && length != 8) {
656 strcat(buffer,
"ff");
659 if (sscanf(buffer,
"%x", &color.u) != 1) {
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));
671 return MVC_RGBAToHex(&(
const SDL_Color) { .r = color->r, .g = color->g, .b = color->b, .a = 255 });
679 snprintf(hex,
sizeof(hex),
"%02x%02x%02x%02x", color->r, color->g, color->b, color->a);
686 SDL_Color color = { .a = 255 };
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)));
732void MVC_RGBToHSV(
const SDL_Color *color,
double *hue,
double *saturation,
double *value) {
736 const double r = color->r / 255.0;
737 const double g = color->g / 255.0;
738 const double b = color->b / 255.0;
740 const double rgbMax = max(max(r, g), b);
741 const double rgbMin = min(min(r, g), b);
742 const double rgbDelta = rgbMax - rgbMin;
744 if (rgbDelta > 0.0) {
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);
762 *saturation = rgbDelta / rgbMax;
SDL_Color MediumSlateBlue
OBJECTIVELYMVC_EXPORT void MVC_RGBToHSV(const SDL_Color *color, double *hue, double *saturation, double *value)
Converts the given RGB color to HSV components.
OBJECTIVELYMVC_EXPORT SDL_Color MVC_HexToRGBA(const char *hexString)
Converts the given hexadecimal color string to an RGBA color.
OBJECTIVELYMVC_EXPORT char * MVC_RGBAToHex(const SDL_Color *color)
SDL_Color MediumTurquoise
SDL_Color MediumSpringGreen
SDL_Color MediumVioletRed
SDL_Color LightGoldenRodYellow
OBJECTIVELYMVC_EXPORT SDL_Color MVC_ColorForName(const char *name)
SDL_Color MediumAquaMarine
OBJECTIVELYMVC_EXPORT char * MVC_RGBToHex(const SDL_Color *color)
OBJECTIVELYMVC_EXPORT SDL_Color MVC_HSVToRGB(double hue, double saturation, double value)
Converts the given HSV components to an RGB color.