00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef COLOR_4C_H_
00026 #define COLOR_4C_H_
00027
00028 #include <Core/System/Math.h>
00029
00030 namespace Lamp{
00031
00032 class Color3c;
00033 class Color3f;
00034 class Color4f;
00035
00036
00037
00038
00039
00040
00041
00042 class Color4c{
00043 public:
00044
00045
00046
00047
00048 union{
00049
00050 struct{
00051
00052 u_char r;
00053
00054 u_char g;
00055
00056 u_char b;
00057
00058 u_char a;
00059 };
00060
00061
00062 u_char array[4];
00063 };
00064
00065
00066
00067
00068
00069 static const Color4c white;
00070
00071
00072 static const Color4c gray;
00073
00074
00075 static const Color4c black;
00076
00077
00078 static const Color4c red;
00079
00080
00081 static const Color4c green;
00082
00083
00084 static const Color4c blue;
00085
00086
00087 static const Color4c yellow;
00088
00089
00090 static const Color4c cyan;
00091
00092
00093 static const Color4c magenta;
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103 Color4c(){}
00104
00105
00106
00107
00108
00109
00110
00111
00112 inline Color4c(u_char sourceR, u_char sourceG, u_char sourceB,
00113 u_char sourceA = 255) :
00114 r(sourceR), g(sourceG), b(sourceB), a(sourceA){
00115 }
00116
00117
00118
00119
00120
00121 explicit Color4c(const Color3c& source);
00122
00123
00124
00125
00126
00127 explicit Color4c(const Color3f& source);
00128
00129
00130
00131
00132
00133 explicit Color4c(const Color4f& source);
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145 inline void set(u_char sourceR, u_char sourceG, u_char sourceB,
00146 u_char sourceA = 255){
00147 r = sourceR;
00148 g = sourceG;
00149 b = sourceB;
00150 a = sourceA;
00151 }
00152
00153
00154
00155
00156
00157 void set(const Color3c& source);
00158
00159
00160
00161
00162
00163 void set(const Color3f& source);
00164
00165
00166
00167
00168
00169 void set(const Color4f& source);
00170
00171
00172
00173
00174
00175 void setARGB(u_int source){
00176 r = (u_char)((source & 0xff0000) >> 16);
00177 g = (u_char)((source & 0xff00) >> 8);
00178 b = (u_char)(source & 0xff);
00179 a = (u_char)((source & 0xff000000) >> 24);
00180 }
00181
00182
00183
00184
00185
00186
00187
00188
00189 u_int getARGB() const{
00190 return (((u_int)a << 24) | ((u_int)r << 16) |
00191 ((u_int)g << 8) | ((u_int)b));
00192 }
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202 inline Color4c operator +(const Color4c& addColor) const{
00203 int addR = (int)r + addColor.r;
00204 if(addR > 255){ addR = 255; }
00205 int addG = (int)g + addColor.g;
00206 if(addG > 255){ addG = 255; }
00207 int addB = (int)b + addColor.b;
00208 if(addB > 255){ addB = 255; }
00209 int addA = (int)a + addColor.a;
00210 if(addA > 255){ addA = 255; }
00211 return Color4c(addR, addG, addB, addA);
00212 }
00213
00214
00215
00216
00217
00218
00219 inline Color4c operator -(const Color4c& subColor) const{
00220 int subR = (int)r - subColor.r;
00221 if(subR < 0){ subR = 0; }
00222 int subG = (int)g - subColor.g;
00223 if(subG < 0){ subG = 0; }
00224 int subB = (int)b - subColor.b;
00225 if(subB < 0){ subB = 0; }
00226 int subA = (int)a - subColor.a;
00227 if(subA < 0){ subA = 0; }
00228 return Color4c(subR, subG, subB, subA);
00229 }
00230
00231
00232
00233
00234
00235
00236 inline Color4c operator *(const Color4c& mulColor) const{
00237 int mulR = ((int)r * mulColor.r) / 255;
00238 int mulG = ((int)g * mulColor.g) / 255;
00239 int mulB = ((int)b * mulColor.b) / 255;
00240 int mulA = ((int)a * mulColor.a) / 255;
00241 return Color4c(mulR, mulG, mulB, mulA);
00242 }
00243
00244
00245
00246
00247
00248
00249 inline Color4c operator *(float mulValue) const{
00250 int mulR = (int)(r * mulValue);
00251 if(mulR > 255){
00252 mulR = 255;
00253 }else if(mulR < 0){
00254 mulR = 0;
00255 }
00256 int mulG = (int)(g * mulValue);
00257 if(mulG > 255){
00258 mulG = 255;
00259 } else if(mulG < 0){
00260 mulG = 0;
00261 }
00262 int mulB = (int)(b * mulValue);
00263 if(mulB > 255){
00264 mulB = 255;
00265 }else if(mulB < 0){
00266 mulB = 0;
00267 }
00268 int mulA = (int)(a * mulValue);
00269 if(mulA > 255){
00270 mulA = 255;
00271 }else if(mulA < 0){
00272 mulA = 0;
00273 }
00274 return Color4c(mulR, mulG, mulB, mulA);
00275 }
00276
00277
00278
00279
00280
00281
00282
00283 inline friend Color4c operator *(float mulValue, const Color4c& mulColor){
00284 int mulR = (int)(mulColor.r * mulValue);
00285 if(mulR > 255){
00286 mulR = 255;
00287 }else if(mulR < 0){
00288 mulR = 0;
00289 }
00290 int mulG = (int)(mulColor.g * mulValue);
00291 if(mulG > 255){
00292 mulG = 255;
00293 } else if(mulG < 0){
00294 mulG = 0;
00295 }
00296 int mulB = (int)(mulColor.b * mulValue);
00297 if(mulB > 255){
00298 mulB = 255;
00299 }else if(mulB < 0){
00300 mulB = 0;
00301 }
00302 int mulA = (int)(mulColor.a * mulValue);
00303 if(mulA > 255){
00304 mulA = 255;
00305 }else if(mulA < 0){
00306 mulA = 0;
00307 }
00308 return Color4c(mulR, mulG, mulB, mulA);
00309 }
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319 inline Color4c& operator +=(const Color4c& addColor){
00320 int addR = (int)r + addColor.r;
00321 if(addR > 255){ addR = 255; }
00322 int addG = (int)g + addColor.g;
00323 if(addG > 255){ addG = 255; }
00324 int addB = (int)b + addColor.b;
00325 if(addB > 255){ addB = 255; }
00326 int addA = (int)a + addColor.a;
00327 if(addA > 255){ addA = 255; }
00328 set(addR, addG, addB, addA);
00329 return (*this);
00330 }
00331
00332
00333
00334
00335
00336
00337 inline Color4c& operator -=(const Color4c& subColor){
00338 int subR = (int)r - subColor.r;
00339 if(subR < 0){ subR = 0; }
00340 int subG = (int)g - subColor.g;
00341 if(subG < 0){ subG = 0; }
00342 int subB = (int)b - subColor.b;
00343 if(subB < 0){ subB = 0; }
00344 int subA = (int)a - subColor.a;
00345 if(subA < 0){ subA = 0; }
00346 set(subR, subG, subB, subA);
00347 return (*this);
00348 }
00349
00350
00351
00352
00353
00354
00355 inline Color4c& operator *=(const Color4c& mulColor){
00356 int mulR = ((int)r * mulColor.r) / 255;
00357 int mulG = ((int)g * mulColor.g) / 255;
00358 int mulB = ((int)b * mulColor.b) / 255;
00359 int mulA = ((int)a * mulColor.a) / 255;
00360 set(mulR, mulG, mulB, mulA);
00361 return (*this);
00362 }
00363
00364
00365
00366
00367
00368
00369 inline Color4c& operator *=(float mulValue){
00370 int mulR = (int)(r * mulValue);
00371 if(mulR > 255){
00372 mulR = 255;
00373 }else if(mulR < 0){
00374 mulR = 0;
00375 }
00376 int mulG = (int)(g * mulValue);
00377 if(mulG > 255){
00378 mulG = 255;
00379 } else if(mulG < 0){
00380 mulG = 0;
00381 }
00382 int mulB = (int)(b * mulValue);
00383 if(mulB > 255){
00384 mulB = 255;
00385 }else if(mulB < 0){
00386 mulB = 0;
00387 }
00388 int mulA = (int)(a * mulValue);
00389 if(mulA > 255){
00390 mulA = 255;
00391 }else if(mulA < 0){
00392 mulA = 0;
00393 }
00394 set(mulR, mulG, mulB, mulA);
00395 return (*this);
00396 }
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407 inline Color4c& negative(){
00408 set(255 - r, 255 - g, 255 - b, a);
00409 return (*this);
00410 }
00411
00412
00413
00414
00415
00416
00417
00418
00419 inline static Color4c lerp(
00420 const Color4c& source, const Color4c& target, float alpha){
00421 float beta = 1.f - alpha;
00422 Color4c result;
00423 result.r = (u_char)(source.r * beta + target.r * alpha);
00424 result.g = (u_char)(source.g * beta + target.g * alpha);
00425 result.b = (u_char)(source.b * beta + target.b * alpha);
00426 result.a = (u_char)(source.a * beta + target.a * alpha);
00427 return result;
00428 }
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438 inline bool operator ==(const Color4c& target) const{
00439 return ((r == target.r) && (g == target.g) &&
00440 (b == target.b) && (a == target.a));
00441 }
00442
00443
00444
00445
00446
00447
00448 inline bool operator !=(const Color4c& target) const{
00449 return ((r != target.r) || (g != target.g) ||
00450 (b != target.b) || (a != target.a));
00451 }
00452
00453
00454
00455
00456
00457
00458
00459
00460 inline String toString() const{
00461 String returnString;
00462 returnString.format("( %d, %d, %d, %d )", r, g, b, a);
00463 return returnString;
00464 }
00465
00466
00467 private:
00468
00469 };
00470
00471
00472 }
00473 #endif // End of COLOR_4C_H_
00474