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