include/board/Color.h

Go to the documentation of this file.
00001 /* -*- mode: c++ -*- */
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_

Generated on Fri Aug 24 19:07:40 2007 for Board by  doxygen 1.5.1