00001
00002
00003
00004
00005
00006
00007
00008 #ifndef IMPDISPLAY_COLOR_H
00009 #define IMPDISPLAY_COLOR_H
00010
00011 #include "display_config.h"
00012
00013 #include <IMP/PairContainer.h>
00014 #include <IMP/SingletonContainer.h>
00015
00016 IMPDISPLAY_BEGIN_NAMESPACE
00017
00018
00019
00020
00021 class IMPDISPLAYEXPORT Color
00022 {
00023 float c_[3];
00024 public:
00025 typedef Color This;
00026
00027 Color();
00028
00029
00030
00031 Color(float r, float g, float b);
00032
00033 ~Color();
00034
00035
00036
00037 float get_red() const {
00038 return c_[0];
00039 }
00040
00041 float get_green() const {
00042 return c_[1];
00043 }
00044 float get_blue() const {
00045 return c_[2];
00046 }
00047
00048
00049 void show(std::ostream &out=std::cout, std::string delim=" ") const {
00050 out << get_red() << delim << get_green() << delim << get_blue();
00051 }
00052
00053 IMP_COMPARISONS_3(c_[0],c_[1], c_[2]);
00054 };
00055
00056 IMP_OUTPUT_OPERATOR(Color);
00057
00058
00059 #ifndef SWIG
00060 #ifndef IMP_DOXYGEN
00061 struct SpacesIO
00062 {
00063 const Color &v_;
00064 SpacesIO(const Color &v): v_(v){}
00065 };
00066
00067 struct CommasIO
00068 {
00069 const Color &v_;
00070 CommasIO(const Color &v): v_(v){}
00071 };
00072 inline std::ostream &operator<<(std::ostream &out, const SpacesIO &s)
00073 {
00074 s.v_.show(out, " ");
00075 return out;
00076 }
00077 inline std::ostream &operator<<(std::ostream &out, const CommasIO &s)
00078 {
00079 s.v_.show(out, ", ");
00080 return out;
00081 }
00082
00083
00084
00085
00086
00087
00088 inline SpacesIO spaces_io(const Color &v) {
00089 return SpacesIO(v);
00090 }
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 inline CommasIO commas_io(const Color &v) {
00101 return CommasIO(v);
00102 }
00103
00104
00105
00106
00107 inline Color operator*(double d, Color c) {
00108 IMP_USAGE_CHECK(d <=1 && d>=0, "Colors can only fade with multiplication");
00109 return Color(c.get_red()*d, c.get_green()*d, c.get_blue()*d);
00110 }
00111
00112
00113
00114
00115 inline Color operator*(Color c, double d) {
00116 return d*c;
00117 }
00118 #endif
00119
00120 #endif // SWIG
00121
00122 IMPDISPLAY_END_NAMESPACE
00123
00124 #endif