29#ifndef NOMLIB_MATH_COLOR4_HPP
30#define NOMLIB_MATH_COLOR4_HPP
35#include "nomlib/config.hpp"
44#if defined( NOM_PLATFORM_WINDOWS )
52const std::string COLOR_DELIMITER =
", ";
84 r{ static_cast<T> ( rhs.
r ) },
85 g{ static_cast<T> ( rhs.
g ) },
86 b{ static_cast<T> ( rhs.
b ) },
87 a{ static_cast<T> ( rhs.
a ) }
98 r{ static_cast<float> ( rhs.
r ) },
99 g{ static_cast<float> ( rhs.
g ) },
100 b{ static_cast<float> ( rhs.
b ) },
101 a{ static_cast<float> ( rhs.
a ) }
117 Color4 ( T red, T green, T blue, T alpha ) :
142 static const Color4 Black;
143 static const Color4 White;
145 static const Color4 Green;
147 static const Color4 Yellow;
148 static const Color4 Magenta;
153 static const Color4 Purple;
154 static const Color4 Orange;
155 static const Color4 LightGray;
157 static const Color4 SkyBlue;
181 c.
r = abs( lhs.
r - rhs.
r );
182 c.
g = abs( lhs.
g - rhs.
g );
183 c.
b = abs( lhs.
b - rhs.
b );
198inline std::ostream& operator << ( std::ostream& os,
const Color4<T>& color )
201 <<
static_cast<sint
> ( color.r )
203 <<
static_cast<sint
> ( color.g )
205 <<
static_cast<sint
> ( color.b )
207 <<
static_cast<sint
> ( color.a );
218inline std::ostream& operator <<( std::ostream& os,
const Color4<float>& color )
221 <<
static_cast<float> ( color.r )
223 <<
static_cast<float> ( color.g )
225 <<
static_cast<float> ( color.b )
227 <<
static_cast<float> ( color.a );
236 return ( left.r == right.r ) &&
237 ( left.g == right.g ) &&
238 ( left.b == right.b ) &&
239 ( left.a == right.a );
246 return ! ( left == right );
253 return Color4<T> (
static_cast<T
> ( std::min ( left.r + right.r, 255 ) ),
254 static_cast<T
> ( std::min ( left.g + right.g, 255 ) ),
255 static_cast<T
> ( std::min ( left.b + right.b, 255 ) ),
256 static_cast<T
> ( std::min ( left.a + right.a, 255 ) )
264 std::min( ( lhs.r + rhs.r / 255 ), 1.0f ),
265 std::min( ( lhs.g + rhs.g / 255 ), 1.0f ),
266 std::min( ( lhs.b + rhs.b / 255 ), 1.0f ),
267 std::min( ( lhs.a + rhs.a / 255 ), 1.0f )
275 return Color4<T> (
static_cast<T
> ( left.r-- ),
276 static_cast<T
> ( left.g-- ),
277 static_cast<T
> ( left.b-- ),
278 static_cast<T
> ( left.a-- )
287 static_cast<T
> ( std::min( left.r - right.r, 255 ) ),
288 static_cast<T
> ( std::min( left.g - right.g, 255 ) ),
289 static_cast<T
> ( std::min( left.b - right.b, 255 ) ),
290 static_cast<T
> ( std::min( left.a - right.a, 255 ) )
298 std::min( ( lhs.r - rhs.r ) / 255, 1.0f ),
299 std::min( ( lhs.g - rhs.g ) / 255, 1.0f ),
300 std::min( ( lhs.b - rhs.b ) / 255, 1.0f ),
301 std::min( ( lhs.a - rhs.a ) / 255, 1.0f )
309 return Color4<T> (
static_cast<T
> ( left.r-- ),
310 static_cast<T
> ( left.g-- ),
311 static_cast<T
> ( left.b-- ),
312 static_cast<T
> ( left.a-- )
321 static_cast<T
> ( left.r * right.r / 255 ),
322 static_cast<T
> ( left.g * right.g / 255 ),
323 static_cast<T
> ( left.b * right.b / 255 ),
324 static_cast<T
> ( left.a * right.a / 255 )
331 return left = left + right;
337 return left = left - right;
343 return left = left * right;
353 return (lhs.r < rhs.r) && (lhs.r < rhs.r) &&
354 (lhs.g < rhs.g) && (lhs.g < rhs.g) &&
355 (lhs.b < rhs.b) && (lhs.b < rhs.b) &&
356 (lhs.a < rhs.a) && (lhs.a < rhs.a);
366 return (rhs.r < lhs.r) && (rhs.r < lhs.r) &&
367 (rhs.g < lhs.g) && (rhs.g < lhs.g) &&
368 (rhs.b < lhs.b) && (rhs.b < lhs.b) &&
369 (rhs.a < lhs.a) && (rhs.a < lhs.a);
379 return (lhs.r <= rhs.r) && (lhs.r <= rhs.r) &&
380 (lhs.g <= rhs.g) && (lhs.g <= rhs.g) &&
381 (lhs.b <= rhs.b) && (lhs.b <= rhs.b) &&
382 (lhs.a <= rhs.a) && (lhs.a <= rhs.a);
392 return (rhs.r <= lhs.r) && (rhs.r <= lhs.r) &&
393 (rhs.g <= lhs.g) && (rhs.g <= lhs.g) &&
394 (rhs.b <= lhs.b) && (rhs.b <= lhs.b) &&
395 (rhs.a <= lhs.a) && (rhs.a <= lhs.a);
450typedef std::vector<Color4i> Color4iColors;
453typedef std::vector<Color4f> Color4fColors;
456typedef std::vector<Color4u> Color4uColors;
459make_color_from_hex_string(
const std::string& hex_encoding);
462make_color_from_string(
const std::string& color);
static const int16 ALPHA_OPAQUE
static const int16 ALPHA_TRANSPARENT
Color4(void)
Default constructor; initialize values to Color<T>::null.
static const Color4 Transparent
static const Color4 Silver
Color4(T red, T green, T blue, T alpha)
Constructor variant for setting a color using RGBA values.
Color4(const Color4< float > &rhs)
Copy constructor.
Color4(T r, T g, T b)
Constructor variant for setting a color using RGB values.
Color4(const Color4< U > &rhs)
Copy constructor.