File indexing completed on 2024-05-12 16:02:04
0001 /* 0002 * SPDX-FileCopyrightText: 2020 Mathias Wein <lynx.mw+kde@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "KisSpinboxHSXSelector.h" 0008 0009 #include <QFormLayout> 0010 #include <QLabel> 0011 #include <QList> 0012 #include <QSignalBlocker> 0013 #include "kis_double_parse_spin_box.h" 0014 #include "KisVisualColorSelector.h" 0015 0016 struct KisSpinboxHSXSelector::Private 0017 { 0018 QList <QLabel*> labels; 0019 QList <KisDoubleParseSpinBox*> spinBoxes; 0020 QFormLayout *layout {0}; 0021 }; 0022 0023 KisSpinboxHSXSelector::KisSpinboxHSXSelector(QWidget *parent) 0024 : QWidget(parent) 0025 , m_d(new Private) 0026 { 0027 m_d->layout = new QFormLayout(this); 0028 for (int i = 0; i < 3; i++){ 0029 m_d->labels.push_back(new QLabel(this)); 0030 m_d->spinBoxes.push_back(new KisDoubleParseSpinBox(this)); 0031 m_d->layout->addRow(m_d->labels[i], m_d->spinBoxes[i]); 0032 connect(m_d->spinBoxes.back(), SIGNAL(valueChanged(double)), this, SLOT(slotSpinBoxChanged())); 0033 } 0034 m_d->labels[0]->setText(i18n("Hue:")); 0035 m_d->labels[1]->setText(i18n("Saturation:")); 0036 m_d->labels[2]->setText("<x>:"); 0037 m_d->spinBoxes[0]->setMaximum(360.0); 0038 m_d->spinBoxes[1]->setMaximum(100.0); 0039 m_d->spinBoxes[2]->setMaximum(100.0); 0040 m_d->spinBoxes[0]->setSuffix(" °"); 0041 m_d->spinBoxes[1]->setSuffix(" %"); 0042 m_d->spinBoxes[2]->setSuffix(" %"); 0043 } 0044 0045 KisSpinboxHSXSelector::~KisSpinboxHSXSelector() 0046 { 0047 } 0048 0049 void KisSpinboxHSXSelector::attachToSelector(KisVisualColorSelector *selector) 0050 { 0051 connect(selector, SIGNAL(sigColorModelChanged()), this, SLOT(slotColorModelChanged())); 0052 connect(selector, SIGNAL(sigHSXChanged(QVector3D)), this, SLOT(slotHSXChanged(QVector3D))); 0053 connect(this, SIGNAL(sigHSXChanged(QVector3D)), selector, SLOT(slotSetHSX(QVector3D))); 0054 } 0055 0056 void KisSpinboxHSXSelector::slotColorModelChanged() 0057 { 0058 const KisVisualColorSelector *selector = qobject_cast<KisVisualColorSelector *>(sender()); 0059 if (!selector) { 0060 return; 0061 } 0062 0063 switch (selector->getColorModel()) { 0064 case KisVisualColorSelector::HSV: 0065 m_d->labels[2]->setText(i18n("Value:")); 0066 break; 0067 case KisVisualColorSelector::HSL: 0068 m_d->labels[2]->setText(i18n("Lightness:")); 0069 break; 0070 case KisVisualColorSelector::HSI: 0071 m_d->labels[2]->setText(i18n("Intensity:")); 0072 break; 0073 case KisVisualColorSelector::HSY: 0074 m_d->labels[2]->setText(i18n("Luma:")); 0075 break; 0076 default: 0077 break; 0078 } 0079 } 0080 0081 void KisSpinboxHSXSelector::slotHSXChanged(const QVector3D &hsx) 0082 { 0083 const QSignalBlocker s1(m_d->spinBoxes[0]), s2(m_d->spinBoxes[1]), s3(m_d->spinBoxes[2]); 0084 m_d->spinBoxes[0]->setValue(hsx[0] * 360.0); 0085 m_d->spinBoxes[1]->setValue(hsx[1] * 100.0); 0086 m_d->spinBoxes[2]->setValue(hsx[2] * 100.0); 0087 } 0088 0089 void KisSpinboxHSXSelector::slotSpinBoxChanged() 0090 { 0091 QVector3D hsx(m_d->spinBoxes[0]->value() / 360.0, 0092 m_d->spinBoxes[1]->value() / 100.0, 0093 m_d->spinBoxes[2]->value() / 100.0); 0094 emit sigHSXChanged(hsx); 0095 }