Merge branch 'master' of git://github.com/BTAxis/naev into testmission
[naev.git] / src / colour.c
blob8cfcb60594caffd0103a2b6d0742c175abcd5f46
1 /*
2 * See Licensing and Copyright notice in naev.h
3 */
5 /**
6 * @file colour.c
8 * @brief Predefined colours for use with NAEV.
9 */
12 #include "colour.h"
14 #include <math.h>
15 #include <string.h>
17 #include "naev.h"
18 #include "log.h"
19 #include "ncompat.h"
21 #if HAS_WIN32
22 #include <shlwapi.h>
23 #define STRCASECMP lstrcmpiA
24 #else /* HAS_WIN32 */
25 #include <strings.h>
26 #define STRCASECMP strcasecmp
27 #endif /* HAS_WIN32 */
32 * default colours
34 /* grey */
35 glColour cWhite = { .r=1.00, .g=1.00, .b=1.00, .a=1. }; /**< White */
36 glColour cGrey90 = { .r=0.90, .g=0.90, .b=0.90, .a=1. }; /**< Grey 90% */
37 glColour cGrey80 = { .r=0.80, .g=0.80, .b=0.80, .a=1. }; /**< Grey 80% */
38 glColour cGrey70 = { .r=0.70, .g=0.70, .b=0.70, .a=1. }; /**< Grey 70% */
39 glColour cGrey60 = { .r=0.60, .g=0.60, .b=0.60, .a=1. }; /**< Grey 60% */
40 glColour cGrey50 = { .r=0.50, .g=0.50, .b=0.50, .a=1. }; /**< Grey 50% */
41 glColour cGrey40 = { .r=0.40, .g=0.40, .b=0.40, .a=1. }; /**< Grey 40% */
42 glColour cGrey30 = { .r=0.30, .g=0.30, .b=0.30, .a=1. }; /**< Grey 30% */
43 glColour cGrey20 = { .r=0.20, .g=0.20, .b=0.20, .a=1. }; /**< Grey 20% */
44 glColour cGrey10 = { .r=0.10, .g=0.10, .b=0.10, .a=1. }; /**< Grey 10% */
45 glColour cBlack = { .r=0.00, .g=0.00, .b=0.00, .a=1. }; /**< Black */
47 /* Greens. */
48 glColour cGreen = { .r=0.20, .g=0.80, .b=0.20, .a=1. }; /**< Green */
49 /* Reds. */
50 glColour cDarkRed = { .r=0.60, .g=0.10, .b=0.10, .a=1. }; /**< Dark Red */
51 glColour cRed = { .r=0.80, .g=0.20, .b=0.20, .a=1. }; /**< Red */
52 /* Oranges. */
53 glColour cOrange = { .r=0.90, .g=0.70, .b=0.10, .a=1. }; /**< Orange */
54 /* Yellows. */
55 glColour cGold = { .r=1.00, .g=0.84, .b=0.00, .a=1. }; /**< Gold */
56 glColour cYellow = { .r=0.80, .g=0.80, .b=0.00, .a=1. }; /**< Yellow */
57 /* Blues. */
58 glColour cMidnightBlue = { .r=0.40, .g=0.4, .b=0.60, .a=1. }; /**< Midnight Blue. */
59 glColour cDarkBlue = { .r=0.10, .g=0.10, .b=0.60, .a=1. }; /**< Dark Blue */
60 glColour cBlue = { .r=0.20, .g=0.20, .b=0.80, .a=1. }; /**< Blue */
61 glColour cLightBlue = { .r=0.40, .g=0.40, .b=1.00, .a=1. }; /**< Light Blue */
62 glColour cCyan = { .r=0.00, .g=1.00, .b=1.00, .a=1. }; /* Cyan. */
63 /* Purples. */
64 glColour cPurple = { .r=0.90, .g=0.10, .b=0.90, .a=1. }; /**< Purple */
65 glColour cDarkPurple = { .r=0.68, .g=0.18, .b=0.64, .a=1. }; /**< Dark Purple */
66 /* Browns. */
67 glColour cBrown = { .r=0.59, .g=0.28, .b=0.00, .a=1. }; /**< Brown */
68 /* Misc. */
69 glColour cSilver = { .r=0.75, .g=0.75, .b=0.75, .a=1. }; /**< Silver */
73 * game specific
75 glColour cConsole = { .r = 0.1, .g = 0.9, .b = 0.1, .a = 1. }; /**< Console colour */
76 glColour cDConsole = { .r = 0.0, .g = 0.7, .b = 0.0, .a = 1. }; /**< Dark Console colour */
77 /* toolkit */
78 glColour cHilight = { .r = 0.1, .g = 0.9, .b = 0.1, .a = 0.3 }; /**< Hilight colour */
79 /* objects */
80 glColour cInert = { .r = 0.6, .g = 0.6, .b = 0.6, .a = 1. }; /**< Inert object colour */
81 glColour cNeutral = { .r = 0.9, .g = 1.0, .b = 0.3, .a = 1. }; /**< Neutral object colour */
82 glColour cFriend = { .r = 0.0, .g = 0.8, .b = 0.0, .a = 1. }; /**< Friend object colour */
83 glColour cHostile = { .r = 0.9, .g = 0.2, .b = 0.2, .a = 1. }; /**< Hostile object colour */
84 /* radar */
85 glColour cRadar_player = { .r = 0.4, .g = 0.8, .b = 0.4, .a = 1. }; /**< Player colour on radar. */
86 glColour cRadar_tPilot = { .r = 0.8, .g = 0.5, .b = 0.0, .a = 1. }; /**< Targetted object colour on radar. */
87 glColour cRadar_tPlanet = { .r = 0.7, .g = 0.0, .b = 0.9, .a = 1. }; /**< Targetted planet colour. */
88 glColour cRadar_weap = { .r = 0.8, .g = 0.2, .b = 0.2, .a = 1. }; /**< Weapon colour on radar. */
89 /* health */
90 glColour cShield = { .r = 0.2, .g = 0.2, .b = 0.8, .a = 1. }; /**< Shield bar colour. */
91 glColour cArmour = { .r = 0.5, .g = 0.5, .b = 0.5, .a = 1. }; /**< Armour bar colour. */
92 glColour cEnergy = { .r = 0.2, .g = 0.8, .b = 0.2, .a = 1. }; /**< Energy bar colour. */
93 glColour cFuel = { .r = 0.9, .g = 0.1, .b = 0.4, .a = 1. }; /**< Fuel bar colour. */
95 /* Deiz's Super Font Palette */
97 glColour cFontRed = { .r = 0.8, .g = 0.2, .b = 0.2, .a = 1. };
98 glColour cFontGreen = { .r = 0.4, .g = 0.8, .b = 0.2, .a = 1. };
99 glColour cFontBlue = { .r = 0.2, .g = 0.4, .b = 0.8, .a = 1. };
100 glColour cFontYellow = { .r = 0.9, .g = 0.8, .b = 0.0, .a = 1. };
101 glColour cFontWhite = { .r = 0.8, .g = 0.8, .b = 0.8, .a = 1. };
102 glColour cFontPurple = { .r = 0.7, .g = 0.3, .b = 0.7, .a = 1. };
103 glColour cFontFriendly = { .r = 0.3, .g = 0.9, .b = 0.3, .a = 1. };
104 glColour cFontHostile = { .r = 0.9, .g = 0.2, .b = 0.2, .a = 1. };
105 glColour cFontNeutral = { .r = 1.0, .g = 0.9, .b = 0.0, .a = 1. };
108 * @brief Changes colourspace from HSV to RGB.
110 * All values go from 0 to 1.
112 * @param[out] r Stores R.
113 * @param[out] g Stores G.
114 * @param[out] b Stores B.
115 * @param h Hue to convert.
116 * @param s Saturation to convert.
117 * @param v Value to convert.
119 void col_hsv2rgb( double *r, double *g, double *b, double h, double s, double v )
121 double var_h, var_i, var_1, var_2, var_3;
123 if (s == 0) {
124 *r = v;
125 *g = v;
126 *b = v;
128 else {
129 var_h = h * 6;
130 var_i = floor(var_h);
131 var_1 = v * (1 - s);
132 var_2 = v * (1 - s * (var_h - var_i));
133 var_3 = v * (1 - s * (1 - (var_h - var_i)));
135 if (var_i == 0) { *r = v ; *g = var_3 ; *b = var_1; }
136 else if (var_i == 1) { *r = var_2 ; *g = v ; *b = var_1; }
137 else if (var_i == 2) { *r = var_1 ; *g = v ; *b = var_3; }
138 else if (var_i == 3) { *r = var_1 ; *g = var_2 ; *b = v; }
139 else if (var_i == 4) { *r = var_3 ; *g = var_1 ; *b = v; }
140 else { *r = v ; *g = var_1 ; *b = var_2; }
145 * @brief Returns a colour from it's name
147 * @param name Colour's name
148 * @return the colour
150 #define CHECK_COLOUR(colour) \
151 if (STRCASECMP(name, #colour) == 0) return &c##colour
152 glColour* col_fromName(const char* name) {
153 if (name[0] == 'b' || name[0] == 'B') {
154 CHECK_COLOUR(Blue);
155 CHECK_COLOUR(Black);
156 CHECK_COLOUR(Brown);
159 if (name[0] == 'c' || name[0] == 'C') {
160 CHECK_COLOUR(Cyan);
163 if (name[0] == 'd' || name[0] == 'D') {
164 CHECK_COLOUR(DarkRed);
165 CHECK_COLOUR(DarkBlue);
168 if (name[0] == 'g' || name[0] == 'G') {
169 CHECK_COLOUR(Gold);
170 CHECK_COLOUR(Green);
171 CHECK_COLOUR(Grey90);
172 CHECK_COLOUR(Grey80);
173 CHECK_COLOUR(Grey70);
174 CHECK_COLOUR(Grey60);
175 CHECK_COLOUR(Grey50);
176 CHECK_COLOUR(Grey40);
177 CHECK_COLOUR(Grey30);
178 CHECK_COLOUR(Grey20);
179 CHECK_COLOUR(Grey10);
182 if (name[0] == 'l' || name[0] == 'L') {
183 CHECK_COLOUR(LightBlue);
186 if (name[0] == 'o' || name[0] == 'O') {
187 CHECK_COLOUR(Orange);
190 if (name[0] == 'p' || name[0] == 'P') {
191 CHECK_COLOUR(Purple);
194 if (name[0] == 'r' || name[0] == 'R') {
195 CHECK_COLOUR(Red);
198 if (name[0] == 's' || name[0] == 'S') {
199 CHECK_COLOUR(Silver);
202 if (name[0] == 'w' || name[0] == 'W') {
203 CHECK_COLOUR(White);
206 if (name[0] == 'y' || name[0] == 'Y') {
207 CHECK_COLOUR(Yellow);
210 if (name[0] == 'm' || name[0] == 'M') {
211 CHECK_COLOUR(MidnightBlue);
215 WARN("Unknown colour %s", name);
216 return NULL;
218 #undef CHECK_COLOUR