File indexing completed on 2024-06-16 04:16:09

0001 /*
0002     SPDX-FileCopyrightText: 2011 Silvio Heinrich <plassy@web.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 
0008 #ifndef H_KIS_COLOR_H
0009 #define H_KIS_COLOR_H
0010 
0011 #include <QtGlobal>
0012 #include <QColor>
0013 
0014 #include <kis_display_color_converter.h>
0015 #include <kis_arcs_constants.h>
0016 
0017 class KisColor
0018 {
0019 public:
0020     enum Type { HSY, HSV, HSL, HSI };
0021     
0022     KisColor(KisDisplayColorConverter *converter = KisDisplayColorConverter::dumbConverterInstance(),
0023              Type type=HSY, qreal lR = DEFAULT_LUMA_R, qreal lG = DEFAULT_LUMA_G,
0024              qreal lB = DEFAULT_LUMA_B, qreal lGamma = DEFAULT_LUMA_GAMMA);
0025 
0026     KisColor(qreal hue, KisDisplayColorConverter *converter, Type type,
0027              qreal lR = DEFAULT_LUMA_R, qreal lG = DEFAULT_LUMA_G,
0028              qreal lB = DEFAULT_LUMA_B, qreal lGamma = DEFAULT_LUMA_GAMMA);
0029 
0030     KisColor(const QColor& color, KisDisplayColorConverter* converter, Type type=HSY,
0031              qreal lR = DEFAULT_LUMA_R, qreal lG = DEFAULT_LUMA_G,
0032              qreal lB = DEFAULT_LUMA_B, qreal lGamma = DEFAULT_LUMA_GAMMA);
0033 
0034     KisColor(Qt::GlobalColor color, KisDisplayColorConverter* converter, Type type=HSY,
0035              qreal lR = DEFAULT_LUMA_R, qreal lG = DEFAULT_LUMA_G,
0036              qreal lB = DEFAULT_LUMA_B, qreal lGamma = DEFAULT_LUMA_GAMMA);
0037 
0038     KisColor(const KisColor& color, KisDisplayColorConverter *converter, Type type = HSY,
0039              qreal lR = DEFAULT_LUMA_R, qreal lG = DEFAULT_LUMA_G,
0040              qreal lB = DEFAULT_LUMA_B, qreal lGamma = DEFAULT_LUMA_GAMMA);
0041 
0042     KisColor(const KoColor &color, KisDisplayColorConverter* converter, Type type=HSY,
0043              qreal lR = DEFAULT_LUMA_R, qreal lG = DEFAULT_LUMA_G,
0044              qreal lB = DEFAULT_LUMA_B, qreal lGamma = DEFAULT_LUMA_GAMMA);
0045 
0046     ~KisColor();
0047     
0048     inline Type getType()     const { return m_type;   }
0049     inline qreal getH() const { return m_hue; }
0050     inline qreal getS() const { return m_saturation; }
0051     inline qreal getX() const { return m_value; }
0052     inline qreal lumaR() const { return m_lumaR; }
0053     inline qreal lumaG() const { return m_lumaG; }
0054     inline qreal lumaB() const { return m_lumaB; }
0055     inline qreal lumaGamma() const { return m_lumaGamma; }
0056 
0057     inline void setH(qreal v) { m_hue = v; }
0058     inline void setS(qreal v) { m_saturation = v; }
0059     inline void setX(qreal v) { m_value = v; }
0060     
0061     QColor toQColor() const;
0062     KoColor toKoColor() const;
0063     void fromKoColor(const KoColor &color);
0064 
0065     inline void setHSX(qreal h, qreal s, qreal x) {
0066         m_hue = h;
0067         m_saturation = s;
0068         m_value = x;
0069     }
0070     
0071 private:
0072     void initHSX(Type type, qreal h, qreal s, qreal x);
0073     
0074 private:
0075     qreal m_hue;
0076     qreal m_value;
0077     qreal m_saturation;
0078     qreal m_lumaR;
0079     qreal m_lumaG;
0080     qreal m_lumaB;
0081     qreal m_lumaGamma;
0082     KisColor::Type m_type;
0083     KisDisplayColorConverter* m_colorConverter;
0084 };
0085 
0086 #endif // H_KIS_COLOR_H