00001
00010 #ifndef _BOARD_COLOR_H_
00011 #define _BOARD_COLOR_H_
00012
00013 #include <ostream>
00014 #include <string>
00015
00016 namespace BoardLib {
00017
00022 class Color {
00023
00024 public:
00025 Color( unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha = 255 )
00026 :_red(red),_green(green),_blue(blue),_alpha(alpha) { }
00027
00028 Color( unsigned char gray, unsigned char alpha = 255 )
00029 :_red(gray),_green(gray),_blue(gray),_alpha(alpha) { }
00030
00031 Color( const bool valid = true )
00032 :_red(-1),_green(-1),_blue(-1),_alpha(255)
00033 {
00034 if ( valid ) {
00035 _red = _green = _blue = 0;
00036 }
00037 }
00038
00039 inline void red( unsigned char red );
00040 inline void green( unsigned char green );
00041 inline void blue( unsigned char blue );
00042 inline void alpha( unsigned char alpha );
00043
00044 inline unsigned char red() const;
00045 inline unsigned char green() const;
00046 inline unsigned char blue() const;
00047 inline unsigned char alpha() const;
00048
00049 inline Color & setRGBi( const unsigned char red,
00050 const unsigned char green,
00051 const unsigned char blue,
00052 const unsigned char alpha = 255 );
00053
00054 Color & setRGBf( float red,
00055 float green,
00056 float blue,
00057 float alpha = 1.0 );
00058
00059 bool operator==( const Color & other ) const;
00060
00061 bool operator!=( const Color & other ) const;
00062
00063 bool operator<( const Color & other ) const;
00064
00065 void flushPostscript( std::ostream & ) const;
00066
00067 std::string svg() const;
00068
00077 std::string svgAlpha( const char * prefix ) const;
00078
00079 std::string postscript() const;
00080
00081 inline bool valid() const { return (*this) != Color::none; }
00082
00083 public:
00084 static const Color none;
00085 static const Color black;
00086 static const Color white;
00087
00088 private:
00089 int _red;
00090 int _green;
00091 int _blue;
00092 int _alpha;
00093 };
00094
00095 inline Color &
00096 Color::setRGBi( const unsigned char red,
00097 const unsigned char green,
00098 const unsigned char blue,
00099 const unsigned char alpha ) {
00100 _red = red;
00101 _green = green;
00102 _blue = blue;
00103 _alpha = alpha;
00104 return *this;
00105 }
00106
00107
00108 inline void
00109 Color::red( const unsigned char red )
00110 {
00111 _red = red;
00112 }
00113
00114 inline void
00115 Color::green( unsigned char green )
00116 {
00117 _green = green;
00118 }
00119
00120 inline void
00121 Color::blue( unsigned char blue )
00122 {
00123 _blue = blue;
00124 }
00125
00126 inline void
00127 Color::alpha( unsigned char alpha )
00128 {
00129 _alpha = alpha;
00130 }
00131
00132 inline unsigned char Color::red() const { return _red; }
00133 inline unsigned char Color::green() const { return _green; }
00134 inline unsigned char Color::blue() const { return _blue; }
00135 inline unsigned char Color::alpha() const { return _alpha; }
00136
00137 }
00138
00139 #endif // _COLOR_H_