File indexing completed on 2024-05-19 04:29:24

0001 /*
0002  *  SPDX-FileCopyrightText: 2008 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #ifndef _KIS_COLOR_INPUT_H_
0008 #define _KIS_COLOR_INPUT_H_
0009 
0010 #include <QWidget>
0011 #include "KisHsvColorSlider.h"
0012 
0013 class KoChannelInfo;
0014 class KoColor;
0015 class QWidget;
0016 class QSpinBox;
0017 class QDoubleSpinBox;
0018 class KisIntParseSpinBox;
0019 class KisDoubleParseSpinBox;
0020 class KoColorSlider;
0021 class KisHsvColorSlider;
0022 class QLineEdit;
0023 class QLabel;
0024 
0025 #include <KoColorDisplayRendererInterface.h>
0026 #include "kritawidgets_export.h"
0027 
0028 class KRITAWIDGETS_EXPORT KisColorInput : public QWidget
0029 {
0030     Q_OBJECT
0031 public:
0032     KisColorInput(QWidget* parent, const KoChannelInfo*, KoColor* color, KoColorDisplayRendererInterface *displayRenderer = KoDumbColorDisplayRenderer::instance(), bool usePercentage = false);
0033     inline bool usePercentage() const {
0034         return m_usePercentage;
0035     }
0036     virtual inline void setPercentageWise(bool val) {
0037         m_usePercentage = val;
0038     }
0039 
0040 protected:
0041     void init();
0042     virtual QWidget* createInput() = 0;
0043 Q_SIGNALS:
0044     void updated();
0045 protected:
0046     const KoChannelInfo* m_channelInfo {nullptr};
0047     KoColor* m_color {nullptr};
0048     KoColorSlider* m_colorSlider {nullptr};
0049     KoColorDisplayRendererInterface *m_displayRenderer {nullptr};
0050     bool m_usePercentage {false};
0051 };
0052 
0053 class KRITAWIDGETS_EXPORT KisIntegerColorInput : public KisColorInput
0054 {
0055     Q_OBJECT
0056 public:
0057     KisIntegerColorInput(QWidget* parent, const KoChannelInfo*, KoColor* color, KoColorDisplayRendererInterface *displayRenderer = KoDumbColorDisplayRenderer::instance(), bool usePercentage = false);
0058 protected:
0059     QWidget* createInput() override;
0060     void setPercentageWise(bool val) override;
0061 public Q_SLOTS:
0062     void setValue(int);
0063     void update();
0064 private Q_SLOTS:
0065     void onColorSliderChanged(int);
0066     void onNumInputChanged(int);
0067 private:
0068     KisIntParseSpinBox* m_intNumInput {nullptr};
0069 };
0070 
0071 
0072 class KRITAWIDGETS_EXPORT KisFloatColorInput : public KisColorInput
0073 {
0074     Q_OBJECT
0075 public:
0076     KisFloatColorInput(QWidget* parent, const KoChannelInfo*, KoColor* color, KoColorDisplayRendererInterface *displayRenderer = KoDumbColorDisplayRenderer::instance(), bool usePercentage = false);
0077 protected:
0078     QWidget* createInput() override;
0079 public Q_SLOTS:
0080     void setValue(double);
0081     void sliderChanged(int);
0082     void update();
0083 private:
0084     KisDoubleParseSpinBox* m_dblNumInput {nullptr};
0085     qreal m_minValue {0.0};
0086     qreal m_maxValue {0.0};
0087 };
0088 
0089 class KRITAWIDGETS_EXPORT KisHexColorInput : public KisColorInput
0090 {
0091     Q_OBJECT
0092 public:
0093     KisHexColorInput(QWidget* parent, KoColor* color, KoColorDisplayRendererInterface *displayRenderer = KoDumbColorDisplayRenderer::instance(), bool usePercentage = false, bool usePreview = false);
0094 protected:
0095     QWidget* createInput() override;
0096 public Q_SLOTS:
0097     void setValue();
0098     void update();
0099 private:
0100     QLineEdit* m_hexInput {nullptr};
0101     QLabel* m_colorPreview=nullptr;
0102 };
0103 
0104 class KRITAWIDGETS_EXPORT KisHsvColorInput : public QWidget
0105 {
0106     Q_OBJECT
0107 
0108 public:
0109     KisHsvColorInput(QWidget* parent, KoColor* color);
0110 
0111     void setMixMode(KisHsvColorSlider::MIX_MODE mixMode);
0112 
0113 public Q_SLOTS:
0114     void setHue(double);
0115     void setSaturation(double);
0116     void setValue(double);
0117 
0118     void hueSliderChanged(int);
0119     void saturationSliderChanged(int);
0120     void valueSliderChanged(int);
0121 
0122     void update();
0123 
0124 Q_SIGNALS:
0125     void updated();
0126 
0127 private:
0128     void sendUpdate();
0129     void recolorSliders();
0130     void fillColor(QColor& color);
0131     void fillColor(QColor& color, const qreal& h, const qreal& s, const qreal& x);
0132     void getHsxF(const QColor& color, qreal* h, qreal* s, qreal* x);
0133 
0134     KoColor* m_color;
0135 
0136     KisHsvColorSlider* m_hSlider;
0137     KisHsvColorSlider* m_sSlider;
0138     KisHsvColorSlider* m_xSlider;
0139 
0140     KisDoubleParseSpinBox* m_hInput;
0141     KisDoubleParseSpinBox* m_sInput;
0142     KisDoubleParseSpinBox* m_xInput;
0143 
0144     qreal m_h;
0145     qreal m_s;
0146     qreal m_x;
0147 
0148     KisHsvColorSlider::MIX_MODE m_mixMode;
0149 };
0150 
0151 #endif