00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef __ko_color_h__
00022 #define __ko_color_h__
00023
00024 #include <qcolor.h>
00025 #include <koffice_export.h>
00026 class KOPAINTER_EXPORT KoColor
00027 {
00028 public:
00029 enum cSpace{ csIndexed, csRGB, csHSV, csCMYK, csLab };
00030
00031 KoColor();
00032 KoColor(int a, int b, int c, cSpace m = csRGB);
00033 KoColor(int c, int m, int y, int k);
00034 KoColor(const QString &name);
00035 KoColor(const QColor &c);
00036
00037 cSpace native() const {return mNative; }
00038
00039 int R() const;
00040 int G() const;
00041 int B() const;
00042 int H() const;
00043 int S() const;
00044 int V() const;
00045 int L() const;
00046 int a() const;
00047 int b() const;
00048 int C() const;
00049 int M() const;
00050 int Y() const;
00051 int K() const;
00052
00053 void rgb(int *R, int *G, int *B) const;
00054 void hsv(int *H, int *S, int *V) const;
00055 void lab(int *L, int *a, int *b) const;
00056 void cmyk(int *C, int *M, int *Y, int *K) const;
00057 QString name() const;
00058 QColor color() const;
00059
00060 void setRGB(int R, int G, int B);
00061 void setHSV(int H, int S, int V);
00062 void setLab(int L, int a, int b);
00063 void setCMYK(int C, int M, int Y, int K);
00064 void setNamedColor(const QString &name);
00065 void setColor(const QColor &c);
00066
00067 static void RGBtoHSV(int R, int G, int B, int *H, int *S, int *V);
00068 static void RGBtoLAB(int R, int G, int B, int *L, int *a, int *b);
00069 static void RGBtoCMYK(int R, int G, int B, int *C, int *M, int *Y, int *K);
00070
00071 static void HSVtoRGB(int H, int S, int V, int *R, int *G, int *B);
00072 static void HSVtoLAB(int H, int S, int V, int *L, int *a, int *b);
00073 static void HSVtoCMYK(int H, int S, int V, int *C, int *M, int *Y, int*K);
00074
00075 static void LABtoRGB(int L, int a, int b, int *R, int *G, int *B);
00076 static void LABtoHSV(int L, int a, int b, int *H, int *S, int *V);
00077 static void LABtoCMYK(int L, int a, int b, int *C, int *M, int *Y, int*K);
00078
00079 static void CMYKtoRGB(int C, int M, int Y, int K, int *R, int *G, int *B);
00080 static void CMYKtoHSV(int C, int M, int Y, int K, int *H, int *S, int *V);
00081 static void CMYKtoLAB(int C, int M, int Y, int K, int *L, int *a, int *b);
00082
00083 static const KoColor black();
00084 static const KoColor white();
00085 static const KoColor gray();
00086 static const KoColor lightGray();
00087 static const KoColor darkGray();
00088 static const KoColor red();
00089 static const KoColor darkRed();
00090 static const KoColor green();
00091 static const KoColor darkGreen();
00092 static const KoColor blue();
00093 static const KoColor darkBlue();
00094 static const KoColor cyan();
00095 static const KoColor darkCyan();
00096 static const KoColor magenta();
00097 static const KoColor darkMagenta();
00098 static const KoColor yellow();
00099 static const KoColor darkYellow();
00100
00101 protected:
00102 int hex2int(QChar c);
00103
00104 void calcRGB() const;
00105 void calcHSV() const;
00106 void calcCMYK() const;
00107 void calcLAB() const;
00108
00109 void rgbChanged() const;
00110 void hsvChanged() const;
00111 void cmykChanged() const;
00112 void labChanged() const;
00113
00114 private:
00115
00116
00117
00118
00119 mutable int mR, mG, mB;
00120 mutable int mC, mM, mY, mK;
00121 mutable int mH, mS, mV;
00122 mutable int mL, ma, mb;
00123
00124 mutable bool mRGBvalid;
00125 mutable bool mHSVvalid;
00126 mutable bool mCMYKvalid;
00127 mutable bool mLABvalid;
00128
00129 cSpace mNative;
00130 };
00131
00132 inline const KoColor KoColor::white()
00133 {
00134 return KoColor(255, 255, 255, csRGB);
00135 }
00136
00137 inline const KoColor KoColor::black()
00138 {
00139 return KoColor(0, 0, 0, csRGB);
00140 }
00141
00142 inline const KoColor KoColor::gray()
00143 {
00144 return KoColor(160, 160, 164, csRGB);
00145 }
00146
00147 inline const KoColor KoColor::lightGray()
00148 {
00149 return KoColor(192, 192, 192, csRGB);
00150 }
00151
00152 inline const KoColor KoColor::darkGray()
00153 {
00154 return KoColor(128, 128, 128, csRGB);
00155 }
00156
00157 inline const KoColor KoColor::red()
00158 {
00159 return KoColor(255, 0, 0, csRGB);
00160 }
00161
00162 inline const KoColor KoColor::darkRed()
00163 {
00164 return KoColor(128, 0, 0, csRGB);
00165 }
00166
00167 inline const KoColor KoColor::green()
00168 {
00169 return KoColor(0, 255, 0, csRGB);
00170 }
00171
00172 inline const KoColor KoColor::darkGreen()
00173 {
00174 return KoColor(0, 128, 0, csRGB);
00175 }
00176
00177 inline const KoColor KoColor::blue()
00178 {
00179 return KoColor(0, 0, 255, csRGB);
00180 }
00181
00182 inline const KoColor KoColor::darkBlue()
00183 {
00184 return KoColor(0, 0, 128, csRGB);
00185 }
00186
00187 inline const KoColor KoColor::cyan()
00188 {
00189 return KoColor(0, 255, 255, csRGB);
00190 }
00191
00192 inline const KoColor KoColor::darkCyan()
00193 {
00194 return KoColor(0, 128, 128, csRGB);
00195 }
00196
00197 inline const KoColor KoColor::magenta()
00198 {
00199 return KoColor(255, 0, 255, csRGB);
00200 }
00201
00202 inline const KoColor KoColor::darkMagenta()
00203 {
00204 return KoColor(128, 0, 128, csRGB);
00205 }
00206
00207 inline const KoColor KoColor::yellow()
00208 {
00209 return KoColor(255, 255, 0, csRGB);
00210 }
00211
00212 inline const KoColor KoColor::darkYellow()
00213 {
00214 return KoColor(128, 128, 0, csRGB);
00215 }
00216
00217 #endif