qwt_color_map.h

00001 /* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************
00002  * Qwt Widget Library
00003  * Copyright (C) 1997   Josef Wilgen
00004  * Copyright (C) 2002   Uwe Rathmann
00005  *
00006  * This library is free software; you can redistribute it and/or
00007  * modify it under the terms of the Qwt License, Version 1.0
00008  *****************************************************************************/
00009 
00010 #ifndef QWT_COLOR_MAP_H
00011 #define QWT_COLOR_MAP_H
00012 
00013 #include <qglobal.h>
00014 #include <qcolor.h>
00015 #if QT_VERSION < 0x040000
00016 #include <qvaluevector.h>
00017 #else
00018 #include <qvector.h>
00019 #endif
00020 #include "qwt_array.h"
00021 #include "qwt_double_interval.h"
00022 
00023 #if defined(QWT_TEMPLATEDLL)
00024 // MOC_SKIP_BEGIN
00025 template class QWT_EXPORT QwtArray<double>;
00026 // MOC_SKIP_END
00027 #endif
00028 
00044 class QWT_EXPORT QwtColorMap
00045 {
00046 public:
00057     enum Format
00058     {
00059         RGB,
00060         Indexed
00061     };
00062 
00063     QwtColorMap(Format = QwtColorMap::RGB );
00064     virtual ~QwtColorMap();
00065 
00066     inline Format format() const;
00067 
00069     virtual QwtColorMap *copy() const = 0;
00070 
00077     virtual QRgb rgb(
00078         const QwtDoubleInterval &interval, double value) const = 0;
00079 
00086     virtual unsigned char colorIndex(
00087         const QwtDoubleInterval &interval, double value) const = 0;
00088 
00089     QColor color(const QwtDoubleInterval &, double value) const;
00090 #if QT_VERSION < 0x040000
00091     virtual QValueVector<QRgb> colorTable(const QwtDoubleInterval &) const;
00092 #else
00093     virtual QVector<QRgb> colorTable(const QwtDoubleInterval &) const;
00094 #endif
00095 
00096 private:
00097     Format d_format;
00098 };
00099 
00100 
00111 class QWT_EXPORT QwtLinearColorMap: public QwtColorMap
00112 {
00113 public:
00118     enum Mode
00119     {
00120         FixedColors,
00121         ScaledColors
00122     };
00123 
00124     QwtLinearColorMap(QwtColorMap::Format = QwtColorMap::RGB);
00125     QwtLinearColorMap( const QColor &from, const QColor &to,
00126         QwtColorMap::Format = QwtColorMap::RGB);
00127 
00128     QwtLinearColorMap(const QwtLinearColorMap &);
00129 
00130     virtual ~QwtLinearColorMap();
00131 
00132     QwtLinearColorMap &operator=(const QwtLinearColorMap &);
00133 
00134     virtual QwtColorMap *copy() const;
00135 
00136     void setMode(Mode);
00137     Mode mode() const;
00138 
00139     void setColorInterval(const QColor &color1, const QColor &color2);
00140     void addColorStop(double value, const QColor&);
00141     QwtArray<double> colorStops() const;
00142 
00143     QColor color1() const;
00144     QColor color2() const;
00145 
00146     virtual QRgb rgb(const QwtDoubleInterval &, double value) const;
00147     virtual unsigned char colorIndex(
00148         const QwtDoubleInterval &, double value) const;
00149 
00150     class ColorStops;
00151 
00152 private:
00153     class PrivateData;
00154     PrivateData *d_data;
00155 };
00156 
00160 class QWT_EXPORT QwtAlphaColorMap: public QwtColorMap
00161 {
00162 public:
00163     QwtAlphaColorMap(const QColor & = QColor(Qt::gray));
00164     QwtAlphaColorMap(const QwtAlphaColorMap &);
00165 
00166     virtual ~QwtAlphaColorMap();
00167 
00168     QwtAlphaColorMap &operator=(const QwtAlphaColorMap &);
00169 
00170     virtual QwtColorMap *copy() const;
00171 
00172     void setColor(const QColor &);
00173     QColor color() const;
00174 
00175     virtual QRgb rgb(const QwtDoubleInterval &, double value) const;
00176 
00177 private:
00178     virtual unsigned char colorIndex(
00179         const QwtDoubleInterval &, double value) const;
00180 
00181     class PrivateData;
00182     PrivateData *d_data;
00183 };
00184 
00185 
00198 inline QColor QwtColorMap::color(
00199     const QwtDoubleInterval &interval, double value) const
00200 {
00201     if ( d_format == RGB )
00202     {
00203         return QColor( rgb(interval, value) );
00204     }
00205     else
00206     {
00207         const unsigned int index = colorIndex(interval, value);
00208         return colorTable(interval)[index]; // slow
00209     }
00210 }
00211 
00216 inline QwtColorMap::Format QwtColorMap::format() const
00217 {
00218     return d_format;
00219 }
00220 
00221 #endif

Generated on Mon Feb 26 21:22:36 2007 for Qwt User's Guide by  doxygen 1.4.6