You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/lib/kopainter/koColor.h

218 lines
5.4 KiB

/* This file is part of the KDE project
Copyright (c) 1999 Matthias Elter (me@kde.org)
Copyright (c) 2001-2002 Igor Jansen (rm@kde.org)
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __ko_color_h__
#define __ko_color_h__
#include <tqcolor.h>
#include <koffice_export.h>
class KOPAINTER_EXPORT KoColor
{
public:
enum cSpace{ csIndexed, csRGB, csHSV, csCMYK, csLab };
KoColor();
KoColor(int a, int b, int c, cSpace m = csRGB);
KoColor(int c, int m, int y, int k);
KoColor(const TQString &name);
KoColor(const TQColor &c);
cSpace native() const {return mNative; }
int R() const;
int G() const;
int B() const;
int H() const;
int S() const;
int V() const;
int L() const;
int a() const;
int b() const;
int C() const;
int M() const;
int Y() const;
int K() const;
void rgb(int *R, int *G, int *B) const;
void hsv(int *H, int *S, int *V) const;
void lab(int *L, int *a, int *b) const;
void cmyk(int *C, int *M, int *Y, int *K) const;
TQString name() const;
TQColor color() const;
void setRGB(int R, int G, int B);
void setHSV(int H, int S, int V);
void setLab(int L, int a, int b);
void setCMYK(int C, int M, int Y, int K);
void setNamedColor(const TQString &name);
void setColor(const TQColor &c);
static void RGBtoHSV(int R, int G, int B, int *H, int *S, int *V);
static void RGBtoLAB(int R, int G, int B, int *L, int *a, int *b);
static void RGBtoCMYK(int R, int G, int B, int *C, int *M, int *Y, int *K);
static void HSVtoRGB(int H, int S, int V, int *R, int *G, int *B);
static void HSVtoLAB(int H, int S, int V, int *L, int *a, int *b);
static void HSVtoCMYK(int H, int S, int V, int *C, int *M, int *Y, int*K);
static void LABtoRGB(int L, int a, int b, int *R, int *G, int *B);
static void LABtoHSV(int L, int a, int b, int *H, int *S, int *V);
static void LABtoCMYK(int L, int a, int b, int *C, int *M, int *Y, int*K);
static void CMYKtoRGB(int C, int M, int Y, int K, int *R, int *G, int *B);
static void CMYKtoHSV(int C, int M, int Y, int K, int *H, int *S, int *V);
static void CMYKtoLAB(int C, int M, int Y, int K, int *L, int *a, int *b);
static const KoColor black();
static const KoColor white();
static const KoColor gray();
static const KoColor lightGray();
static const KoColor darkGray();
static const KoColor red();
static const KoColor darkRed();
static const KoColor green();
static const KoColor darkGreen();
static const KoColor blue();
static const KoColor darkBlue();
static const KoColor cyan();
static const KoColor darkCyan();
static const KoColor magenta();
static const KoColor darkMagenta();
static const KoColor yellow();
static const KoColor darkYellow();
protected:
int hex2int(TQChar c);
void calcRGB() const;
void calcHSV() const;
void calcCMYK() const;
void calcLAB() const;
void rgbChanged() const;
void hsvChanged() const;
void cmykChanged() const;
void labChanged() const;
private:
/*
* Mutable to make it possible for const objects to transform the native cModel
* in functions like KoColor::rgb(...) to the requested.
*/
mutable int mR, mG, mB; // RGB
mutable int mC, mM, mY, mK; // CMYK
mutable int mH, mS, mV; // HSV
mutable int mL, ma, mb; // LAB
mutable bool mRGBvalid;
mutable bool mHSVvalid;
mutable bool mCMYKvalid;
mutable bool mLABvalid;
cSpace mNative;
};
inline const KoColor KoColor::white()
{
return KoColor(255, 255, 255, csRGB);
}
inline const KoColor KoColor::black()
{
return KoColor(0, 0, 0, csRGB);
}
inline const KoColor KoColor::gray()
{
return KoColor(160, 160, 164, csRGB);
}
inline const KoColor KoColor::lightGray()
{
return KoColor(192, 192, 192, csRGB);
}
inline const KoColor KoColor::darkGray()
{
return KoColor(128, 128, 128, csRGB);
}
inline const KoColor KoColor::red()
{
return KoColor(255, 0, 0, csRGB);
}
inline const KoColor KoColor::darkRed()
{
return KoColor(128, 0, 0, csRGB);
}
inline const KoColor KoColor::green()
{
return KoColor(0, 255, 0, csRGB);
}
inline const KoColor KoColor::darkGreen()
{
return KoColor(0, 128, 0, csRGB);
}
inline const KoColor KoColor::blue()
{
return KoColor(0, 0, 255, csRGB);
}
inline const KoColor KoColor::darkBlue()
{
return KoColor(0, 0, 128, csRGB);
}
inline const KoColor KoColor::cyan()
{
return KoColor(0, 255, 255, csRGB);
}
inline const KoColor KoColor::darkCyan()
{
return KoColor(0, 128, 128, csRGB);
}
inline const KoColor KoColor::magenta()
{
return KoColor(255, 0, 255, csRGB);
}
inline const KoColor KoColor::darkMagenta()
{
return KoColor(128, 0, 128, csRGB);
}
inline const KoColor KoColor::yellow()
{
return KoColor(255, 255, 0, csRGB);
}
inline const KoColor KoColor::darkYellow()
{
return KoColor(128, 128, 0, csRGB);
}
#endif