csutil/cscolor.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 1998-2001 by Jorrit Tyberghein 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __CS_CSCOLOR_H__ 00020 #define __CS_CSCOLOR_H__ 00021 00026 #include "csextern.h" 00027 00033 class csColor 00034 { 00035 public: 00037 float red; 00039 float green; 00041 float blue; 00042 public: 00044 csColor () { } 00046 csColor (float r, float g, float b) 00047 { red = r; green = g; blue = b; } 00049 csColor (const csColor& c) 00050 { red = c.red; green = c.green; blue = c.blue; } 00052 void Set (float r, float g, float b) 00053 { red = r; green = g; blue = b; } 00055 void Set (const csColor& c) 00056 { red = c.red; green = c.green; blue = c.blue; } 00058 void Clamp (float r, float g, float b) 00059 { 00060 if (red > r) red = r; 00061 if (green > g) green = g; 00062 if (blue > b) blue = b; 00063 } 00065 void ClampDown () 00066 { 00067 if (red < 0) red = 0; 00068 if (green < 0) green = 0; 00069 if (blue < 0) blue = 0; 00070 } 00072 csColor& operator= (const csColor& c) 00073 { red = c.red; green = c.green; blue = c.blue; return *this; } 00075 csColor& operator*= (float f) 00076 { red *= f; green *= f; blue *= f; return *this; } 00078 csColor& operator+= (const csColor& c) 00079 { red += c.red; green += c.green; blue += c.blue; return *this; } 00081 csColor& operator-= (const csColor& c) 00082 { red -= c.red; green -= c.green; blue -= c.blue; return *this; } 00084 csColor& operator*= (const csColor& c) 00085 { red *= c.red; green *= c.green; blue *= c.blue; return *this; } 00087 csColor operator * (const float f) 00088 { 00089 csColor ret; 00090 ret.red = red*f; 00091 ret.green = green*f; 00092 ret.blue = blue*f; 00093 return ret; 00094 } 00096 bool operator== (const csColor& c) const 00097 { return red == c.red && green == c.green && blue == c.blue; } 00099 bool operator!= (const csColor& c) const 00100 { return red != c.red || green != c.green || blue != c.blue; } 00102 void Add (float r, float g, float b) 00103 { red += r; green += g; blue += b; } 00105 void Subtract (float r, float g, float b) 00106 { red -= r; green -= g; blue -= b; } 00107 }; 00108 00110 inline csColor operator/ (const csColor& v, float f) 00111 { f = 1.0f/f; return csColor(v.red*f, v.green*f, v.blue*f); } 00113 inline csColor operator* (const csColor& v1, const csColor& v2) 00114 { 00115 return csColor (v1.red * v2.red, 00116 v1.green * v2.green, 00117 v1.blue * v2.blue); 00118 } 00119 00123 class csColor4 : public csColor 00124 { 00125 public: 00127 float alpha; 00128 00130 csColor4 () { } 00132 csColor4 (float r, float g, float b, float a = 1.0f) : csColor (r, g, b) 00133 { alpha = a; } 00134 csColor4 (const csColor& c) : csColor (c), alpha (1.0f) { } 00135 void Set (const csColor& c) 00136 { 00137 red = c.red; 00138 green = c.green; 00139 blue = c.blue; 00140 alpha = 1.0f; 00141 } 00142 void Set (const csColor4& c) 00143 { 00144 red = c.red; 00145 green = c.green; 00146 blue = c.blue; 00147 alpha = c.alpha; 00148 } 00149 void Set (float r, float g, float b) 00150 { 00151 red = r; 00152 green = g; 00153 blue = b; 00154 alpha = 1.0f; 00155 } 00156 void Set (float r, float g, float b, float a) 00157 { 00158 red = r; 00159 green = g; 00160 blue = b; 00161 alpha = a; 00162 } 00164 csColor4& operator= (const csColor4& c) 00165 { 00166 red = c.red; 00167 green = c.green; 00168 blue = c.blue; 00169 alpha = c.alpha; 00170 return *this; 00171 } 00173 csColor4& operator= (const csColor& c) 00174 { red = c.red; green = c.green; blue = c.blue; alpha = 1.0f; return *this; } 00176 csColor4& operator*= (float f) 00177 { red *= f; green *= f; blue *= f; alpha *= f; return *this; } 00179 csColor4& operator+= (const csColor4& c) 00180 { 00181 red += c.red; 00182 green += c.green; 00183 blue += c.blue; 00184 alpha += c.alpha; 00185 return *this; 00186 } 00188 csColor4& operator+= (const csColor& c) 00189 { red += c.red; green += c.green; blue += c.blue; return *this; } 00191 csColor4& operator-= (const csColor4& c) 00192 { 00193 red -= c.red; 00194 green -= c.green; 00195 blue -= c.blue; 00196 alpha -= c.alpha; 00197 return *this; 00198 } 00200 csColor& operator-= (const csColor& c) 00201 { red -= c.red; green -= c.green; blue -= c.blue; return *this; } 00203 bool operator== (const csColor4& c) const 00204 { 00205 return red == c.red && 00206 green == c.green && 00207 blue == c.blue && 00208 alpha == c.alpha; 00209 } 00211 bool operator!= (const csColor4& c) const 00212 { 00213 return red != c.red || 00214 green != c.green || 00215 blue != c.blue || 00216 alpha != c.alpha; 00217 } 00218 }; 00219 00221 inline csColor operator* (const csColor& s, float f) 00222 { csColor c (s); c *= f; return c; } 00223 00225 inline csColor operator* (float f, const csColor& s) 00226 { csColor c (s); c *= f; return c; } 00227 00229 inline csColor operator+ (const csColor& s1, const csColor& s2) 00230 { csColor c (s1); c += s2; return c; } 00232 inline csColor operator- (const csColor& s1, const csColor& s2) 00233 { csColor c (s1); c -= s2; return c; } 00234 00235 #endif // __CS_CSCOLOR_H__
Generated for Crystal Space by doxygen 1.4.6