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 static const Color Red;
00088 static const Color Green;
00089 static const Color Blue;
00090
00091 private:
00092 int _red;
00093 int _green;
00094 int _blue;
00095 int _alpha;
00096 };
00097
00098 inline Color &
00099 Color::setRGBi( const unsigned char red,
00100 const unsigned char green,
00101 const unsigned char blue,
00102 const unsigned char alpha ) {
00103 _red = red;
00104 _green = green;
00105 _blue = blue;
00106 _alpha = alpha;
00107 return *this;
00108 }
00109
00110
00111 inline void
00112 Color::red( const unsigned char red )
00113 {
00114 _red = red;
00115 }
00116
00117 inline void
00118 Color::green( unsigned char green )
00119 {
00120 _green = green;
00121 }
00122
00123 inline void
00124 Color::blue( unsigned char blue )
00125 {
00126 _blue = blue;
00127 }
00128
00129 inline void
00130 Color::alpha( unsigned char alpha )
00131 {
00132 _alpha = alpha;
00133 }
00134
00135 inline unsigned char Color::red() const { return _red; }
00136 inline unsigned char Color::green() const { return _green; }
00137 inline unsigned char Color::blue() const { return _blue; }
00138 inline unsigned char Color::alpha() const { return _alpha; }
00139
00140 }
00141
00142 #endif // _COLOR_H_