• Main Page
  • Related Pages
  • Modules
  • Classes
  • Files
  • File List
  • File Members

VGColor.h

Go to the documentation of this file.
00001 #ifndef VGColor_H
00002 #define VGColor_H
00003 
00004 /*
00005   GUIDO Library
00006   Copyright (C) 2006    Grame
00007 
00008   This Source Code Form is subject to the terms of the Mozilla Public
00009   License, v. 2.0. If a copy of the MPL was not distributed with this
00010   file, You can obtain one at http://mozilla.org/MPL/2.0/.
00011 
00012   Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
00013   research@grame.fr
00014 
00015 */
00016 
00017 #include <iostream>
00018 
00024 // define int constants to bound alpha values
00025 #define ALPHA_TRANSPARENT   0
00026 #define ALPHA_OPAQUE        255
00027 
00028 
00029 // --------------------------------------------------------------
00030 //      VGColor class
00031 // --------------------------------------------------------------
00034 class VGColor
00035 {
00036     public:     
00037                     VGColor( unsigned char gray  = 0 ) 
00038                         : mRed( gray ), mGreen( gray ), mBlue( gray ), mAlpha( ALPHA_OPAQUE ) { }
00039                     VGColor( const VGColor & in ) 
00040                         { Set( in ); }
00041                     VGColor( unsigned char r, unsigned char g, 
00042                              unsigned char b, unsigned char a = ALPHA_OPAQUE ) 
00043                         : mRed( r ), mGreen( g ), mBlue ( b ), mAlpha( a ) { }
00044 
00045         explicit    VGColor( const unsigned char col [4] ) 
00046                         { if( col ) Set( col[0], col[1], col[2], col[3] ); else Set( 0 ); }
00047 
00048         void        Set( unsigned char r, unsigned char g, 
00049                          unsigned char b, unsigned char a = ALPHA_OPAQUE )
00050                         { mRed = r; mGreen = g; mBlue = b, mAlpha = a; }
00051         void        Set( const VGColor & in )
00052                         { mRed = in.mRed; mGreen = in.mGreen; mBlue = in.mBlue, mAlpha = in.mAlpha; }
00053 
00054                 
00055         bool        operator == ( const VGColor & col ) const
00056                         { return (( col.mRed == mRed ) && ( col.mGreen == mGreen ) 
00057                           && ( col.mBlue == mBlue ) && ( col.mAlpha == mAlpha )); }
00058         
00059         bool        operator != ( const VGColor & col ) const
00060                         { return (( col.mRed != mRed ) || ( col.mGreen != mGreen ) 
00061                           || ( col.mBlue != mBlue ) || ( col.mAlpha != mAlpha )); }
00062                 
00063         VGColor &   operator += ( short v );
00064 
00065         //modifications of this method must be applied also in the action parser.
00066         //This fonction displays color as html does.  ex : #45fc0a[ff]
00067         std::ostream& print(std::ostream& out) const
00068         {
00069             out << "#";
00070             char prev = out.fill ('0');
00071             out.width(2);out << std::hex << int(mRed);
00072             out.width(2);out << std::hex << int(mGreen);
00073             out.width(2);out << std::hex << int(mBlue);
00074             out.width(1);out << "[";
00075             out.width(2);out << std::hex << int(mAlpha) << std::dec;
00076             out.width(1);out << "]";
00077             out.fill(prev);
00078 
00079             return out;
00080         }
00081             
00082         unsigned char mRed;
00083         unsigned char mGreen;
00084         unsigned char mBlue;
00085         unsigned char mAlpha; // 0 = invisible, 255 = opaque. 
00086 };
00087 
00088                 
00089 inline VGColor & VGColor::operator += ( short v ) 
00090 { 
00091     int sred = mRed + v; 
00092     mRed   = (unsigned char)((sred > 255) ? 255 : sred);
00093     int sgreen = mGreen + v;
00094     mGreen = (unsigned char)((sgreen > 255) ? 255 : sgreen);
00095     int sblue = mBlue + v;
00096     mBlue  = (unsigned char)((sblue > 255) ? 255 : sblue);
00097     return *this;
00098 }
00099 
00100 inline std::ostream& operator << (std::ostream& out, const VGColor& c)
00101 {
00102     return (&c)->print(out);
00103 }
00104 
00105 
00108 #endif /* VGColor */

Generated on Mon Jan 5 2015 11:16:24 for GUIDOLib by doxygen 1.7.2 - © Grame Research Lab.