Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSpecificColorSelectorWidget Class Reference

#include <kis_specific_color_selector_widget.h>

+ Inheritance diagram for KisSpecificColorSelectorWidget:

Public Slots

void setColor (const KoColor &)
 
void setColorSpace (const KoColorSpace *cs, bool force=false)
 
void setDisplayConverter (KisDisplayColorConverter *colorConverter)
 
void setFGColor (const KoColor &c)
 

Signals

void colorChanged (const KoColor &)
 
void updated ()
 

Public Member Functions

 KisSpecificColorSelectorWidget (QWidget *parent)
 
 ~KisSpecificColorSelectorWidget () override
 

Protected Member Functions

void resizeEvent (QResizeEvent *event) override
 

Private Slots

void changeHsxMode (int index)
 
void hsvSelectorClicked (QAbstractButton *)
 
void onChkUsePercentageChanged (bool)
 
void rereadCurrentColorSpace (bool force=false)
 
void setCustomColorSpace (const KoColorSpace *)
 
void setUseSameColorSpace (bool locked, bool reloadColorSpace=true)
 
void update ()
 
void updateTimeout ()
 

Private Member Functions

void updateHsvSelector (bool isRgbColorSpace)
 

Private Attributes

KoColor m_color
 
const KoColorSpacem_colorSpace
 
KisColorSpaceSelectorm_colorspaceSelector
 
KisSignalAutoConnectionsStore m_converterConnection
 
KisDisplayColorConverterm_displayConverter
 
KoColor m_FGColor
 
KisHexColorInputm_hexInput
 
QButtonGroup * m_hsvSelector
 
KisHsvColorInputm_hsvSlider
 
QRadioButton * m_hsxButton
 
QComboBox * m_hsxModeComboBox
 
QList< KisColorInput * > m_inputs
 
QRadioButton * m_rgbButton
 
QScopedPointer< Ui_wdgSpecificColorSelectorWidget > m_ui
 
bool m_updateAllowed
 
KisSignalCompressorm_updateCompressor
 

Detailed Description

Definition at line 33 of file kis_specific_color_selector_widget.h.

Constructor & Destructor Documentation

◆ KisSpecificColorSelectorWidget()

KisSpecificColorSelectorWidget::KisSpecificColorSelectorWidget ( QWidget * parent)

Definition at line 37 of file kis_specific_color_selector_widget.cc.

38 : QWidget(parent)
39 , m_inputs()
40 , m_hexInput(nullptr)
41 , m_hsvSlider(nullptr)
42 , m_rgbButton(nullptr)
43 , m_hsxButton(nullptr)
44 , m_hsvSelector(nullptr)
45 , m_colorSpace(nullptr)
46 , m_color()
47 , m_FGColor()
48 , m_updateAllowed(true)
50 , m_colorspaceSelector(nullptr)
51 , m_ui(nullptr)
52 , m_displayConverter(nullptr)
54{
55
56 m_ui.reset(new Ui_wdgSpecificColorSelectorWidget());
57 m_ui->setupUi(this);
58
59 // Set up "RGB/HSV" button group
60 m_hsvSelector = new QButtonGroup(this);
61 m_rgbButton = new QRadioButton("RGB", this);
62 m_hsxButton = new QRadioButton("HSV", this);
63 m_hsxModeComboBox = new QComboBox(this);
64
65 m_hsxButton->setText("");
66 m_rgbButton->setChecked(true);
67 m_hsxModeComboBox->addItem(i18n("HSV"));
68 m_hsxModeComboBox->addItem(i18n("HSL"));
69 m_hsxModeComboBox->addItem(i18n("HSI"));
70 m_hsxModeComboBox->addItem(i18n("HSY"));
71
72 connect(m_hsvSelector, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(hsvSelectorClicked(QAbstractButton*)));
73 connect(m_hsxModeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeHsxMode(int)));
74
75 m_hsvSelector->addButton(m_rgbButton);
76 m_hsvSelector->addButton(m_hsxButton);
77 m_hsvSelector->setExclusive(true);
78 m_rgbButton->setVisible(false);
79 m_hsxButton->setVisible(false);
80 m_hsxModeComboBox->setVisible(false);
81
82 QSpacerItem *hsvButtonSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
83 m_ui->hsvButtonsLayout->addWidget(m_rgbButton);
84 m_ui->hsvButtonsLayout->addWidget(m_hsxButton);
85 m_ui->hsvButtonsLayout->addWidget(m_hsxModeComboBox);
86 m_ui->hsvButtonsLayout->addItem(hsvButtonSpacer);
87
88 // Set up HSV sliders
90 m_hsvSlider->setVisible(false);
91
92 connect(m_hsvSlider, SIGNAL(updated()), this, SLOT(update()));
93 connect(this, SIGNAL(updated()), m_hsvSlider, SLOT(update()));
94
95 m_ui->hsvSlidersLayout->addWidget(m_hsvSlider);
96
97 connect(m_updateCompressor, SIGNAL(timeout()), SLOT(updateTimeout()));
98
100 connect(m_colorspaceSelector, SIGNAL(colorSpaceChanged(const KoColorSpace*)), this, SLOT(setCustomColorSpace(const KoColorSpace*)));
101
102 m_ui->colorspacePopupButton->setPopupWidget(m_colorspaceSelector);
103
104 m_ui->useSameColorSpace->setChecked(true);
105 setUseSameColorSpace(m_ui->useSameColorSpace->isChecked(), false);
106 connect(m_ui->useSameColorSpace, SIGNAL(toggled(bool)), this, SLOT(setUseSameColorSpace(bool)));
107
108 connect(m_ui->chkUsePercentage, SIGNAL(toggled(bool)), this, SLOT(onChkUsePercentageChanged(bool)));
109
110 KConfigGroup cfg = KSharedConfig::openConfig()->group(QString());
111 m_ui->chkUsePercentage->setChecked(cfg.readEntry("SpecificColorSelector/UsePercentage", false));
112 m_ui->chkUsePercentage->setIcon(KisIconUtils::loadIcon("ratio"));
113 m_hsxModeComboBox->setCurrentIndex(cfg.readEntry("SpecificColorSelector/HsxMode", 0));
114 m_hsxButton->setChecked(cfg.readEntry("SpecificColorSelector/UseHsx", false));
115
117
118 QSpacerItem *bottomSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
119 m_ui->spacerLayout->addItem(bottomSpacer);
120}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void showColorBrowserButton(bool showButton)
QScopedPointer< Ui_wdgSpecificColorSelectorWidget > m_ui
KisSignalAutoConnectionsStore m_converterConnection
void setUseSameColorSpace(bool locked, bool reloadColorSpace=true)
QIcon loadIcon(const QString &name)

References changeHsxMode(), connect(), hsvSelectorClicked(), KisIconUtils::loadIcon(), m_color, m_colorspaceSelector, m_hsvSelector, m_hsvSlider, m_hsxButton, m_hsxModeComboBox, m_rgbButton, m_ui, m_updateCompressor, onChkUsePercentageChanged(), setCustomColorSpace(), setUseSameColorSpace(), KisColorSpaceSelector::showColorBrowserButton(), update(), updated(), and updateTimeout().

◆ ~KisSpecificColorSelectorWidget()

KisSpecificColorSelectorWidget::~KisSpecificColorSelectorWidget ( )
override

Definition at line 122 of file kis_specific_color_selector_widget.cc.

123{
124 KConfigGroup cfg = KSharedConfig::openConfig()->group(QString());
125 cfg.writeEntry("SpecificColorSelector/UsePercentage", m_ui->chkUsePercentage->isChecked());
126 cfg.writeEntry("SpecificColorSelector/HsxMode", m_hsxModeComboBox->currentIndex());
127 cfg.writeEntry("SpecificColorSelector/UseHsx", m_hsxButton->isChecked());
128}

References m_hsxButton, m_hsxModeComboBox, and m_ui.

Member Function Documentation

◆ changeHsxMode

void KisSpecificColorSelectorWidget::changeHsxMode ( int index)
privateslot

Definition at line 335 of file kis_specific_color_selector_widget.cc.

335 {
337}
void setMixMode(KisHsvColorSlider::MIX_MODE mixMode)

References m_hsvSlider, and KisHsvColorInput::setMixMode().

◆ colorChanged

void KisSpecificColorSelectorWidget::colorChanged ( const KoColor & )
signal

◆ hsvSelectorClicked

void KisSpecificColorSelectorWidget::hsvSelectorClicked ( QAbstractButton * )
privateslot

Definition at line 330 of file kis_specific_color_selector_widget.cc.

331{
333}
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
virtual KoID colorModelId() const =0

References KoColorSpace::colorModelId(), m_colorSpace, RGBAColorModelID, and updateHsvSelector().

◆ onChkUsePercentageChanged

void KisSpecificColorSelectorWidget::onChkUsePercentageChanged ( bool isChecked)
privateslot

Definition at line 322 of file kis_specific_color_selector_widget.cc.

323{
324 for (auto input: m_inputs) {
325 input->setPercentageWise(isChecked);
326 }
327 emit(updated());
328}

References m_inputs, and updated().

◆ rereadCurrentColorSpace

void KisSpecificColorSelectorWidget::rereadCurrentColorSpace ( bool force = false)
privateslot

Definition at line 165 of file kis_specific_color_selector_widget.cc.

166{
167 if (m_displayConverter && m_ui->useSameColorSpace->isChecked()) {
169 } else {
171 }
172
174}
const KoColorSpace * paintingColorSpace() const
void setColorSpace(const KoColorSpace *cs, bool force=false)

References m_color, m_colorSpace, m_displayConverter, m_ui, KisDisplayColorConverter::paintingColorSpace(), setColor(), and setColorSpace().

◆ resizeEvent()

void KisSpecificColorSelectorWidget::resizeEvent ( QResizeEvent * event)
overrideprotected

Definition at line 138 of file kis_specific_color_selector_widget.cc.

139{
140 QWidget::resizeEvent(event);
141
142 if (m_colorSpace) {
143 QString elidedColorspaceName = m_ui->colorspacePopupButton->fontMetrics().elidedText(
144 m_colorSpace->name(), Qt::ElideRight,
145 m_ui->colorspacePopupButton->width()
146 );
147 m_ui->colorspacePopupButton->setText(elidedColorspaceName);
148 }
149}

References m_colorSpace, m_ui, and KoColorSpace::name.

◆ setColor

void KisSpecificColorSelectorWidget::setColor ( const KoColor & c)
slot

Definition at line 296 of file kis_specific_color_selector_widget.cc.

297{
298 m_updateAllowed = false;
300 emit(updated());
301 m_updateAllowed = true;
302}
void fromKoColor(const KoColor &src)
Definition KoColor.cpp:294

References KoColor::fromKoColor(), m_color, m_updateAllowed, and updated().

◆ setColorSpace

void KisSpecificColorSelectorWidget::setColorSpace ( const KoColorSpace * cs,
bool force = false )
slot

Definition at line 176 of file kis_specific_color_selector_widget.cc.

177{
178 Q_ASSERT(cs);
179 dbgPlugins << cs->id() << " " << cs->profile()->name();
180
181 if (m_colorSpace && *m_colorSpace == *cs && !force) {
182 Q_FOREACH (KisColorInput* input, m_inputs) {
183 input->update();
184 }
185
186 return;
187 }
188
190 m_ui->chkUsePercentage->setVisible(true);
191 } else {
192 m_ui->chkUsePercentage->setVisible(false);
193 }
194
196 Q_ASSERT(m_colorSpace);
197 Q_ASSERT(*m_colorSpace == *cs);
198
199 QString elidedColorspaceName = m_ui->colorspacePopupButton->fontMetrics().elidedText(
200 m_colorSpace->name(), Qt::ElideRight,
201 m_ui->colorspacePopupButton->width()
202 );
203 m_ui->colorspacePopupButton->setText(elidedColorspaceName);
204
206 Q_FOREACH (KisColorInput* input, m_inputs) {
207 delete input;
208 }
209 if (m_hexInput) {
210 delete m_hexInput;
211 m_hexInput = nullptr;
212 }
213 m_inputs.clear();
214
216
217 KoColorDisplayRendererInterface *displayRenderer =
221
222 Q_FOREACH (KoChannelInfo* channel, channels) {
223 if (channel->channelType() == KoChannelInfo::COLOR) {
224 KisColorInput* input = 0;
225 switch (channel->channelValueType()) {
229 input = new KisIntegerColorInput(this, channel, &m_color, displayRenderer, m_ui->chkUsePercentage->isChecked());
230 }
231 break;
234 input = new KisFloatColorInput(this, channel, &m_color, displayRenderer);
235 }
236 break;
237 default:
238 Q_ASSERT(false);
239 input = 0;
240 }
241 if (input) {
242 connect(input, SIGNAL(updated()), this, SLOT(update()));
243 connect(this, SIGNAL(updated()), input, SLOT(update()));
244
245 m_inputs.append(input);
246 m_ui->slidersLayout->addWidget(input);
247 }
248 }
249 }
250
251 QList<QLabel*> labels;
252 int labelWidth = 0;
253
254 Q_FOREACH (KisColorInput* input, m_inputs) {
255 Q_FOREACH (QLabel* label, input->findChildren<QLabel*>()) {
256 labels.append(label);
257 labelWidth = qMax(labelWidth, label->sizeHint().width());
258 }
259 }
260
261 Q_FOREACH (QLabel *label, labels) {
262 label->setMinimumWidth(labelWidth);
263 }
264
265 bool allChannels8Bit = true;
266 Q_FOREACH (KoChannelInfo* channel, channels) {
267 if (channel->channelType() == KoChannelInfo::COLOR && channel->channelValueType() != KoChannelInfo::UINT8) {
268 allChannels8Bit = false;
269 }
270 }
271 if (allChannels8Bit) {
272 // Set up the Hex input
273 m_hexInput = new KisHexColorInput(this, &m_color, displayRenderer, false, true);
274 m_ui->hexSelectorLayout->addWidget(m_hexInput);
275 connect(m_hexInput, SIGNAL(updated()), this, SLOT(update()));
276 connect(this, SIGNAL(updated()), m_hexInput, SLOT(update()));
277 }
278
280
281 m_colorspaceSelector->blockSignals(true);
283 m_colorspaceSelector->blockSignals(false);
284
285 m_updateAllowed = false;
286 emit(updated());
287 m_updateAllowed = true;
288}
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
void setCurrentColorSpace(const KoColorSpace *colorSpace)
KoColorDisplayRendererInterface * displayRendererInterface() const
static KisDisplayColorConverter * dumbConverterInstance()
@ COLOR
The channel represents a color.
@ UINT8
use this for an unsigned integer 8bits channel
@ UINT16
use this for an integer 16bits channel
@ FLOAT32
use this for a float 32bits channel
@ FLOAT16
use this for a float 16bits channel
@ UINT32
use this for an unsigned integer 21bits channel
enumChannelType channelType() const
enumChannelValueType channelValueType() const
static QList< KoChannelInfo * > displayOrderSorted(const QList< KoChannelInfo * > &channels)
QList< KoChannelInfo * > channels
virtual KoID colorDepthId() const =0
virtual const KoColorProfile * profile() const =0
QString id() const
Definition KoID.cpp:63
#define dbgPlugins
Definition kis_debug.h:51
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
static KoColorSpaceRegistry * instance()

References KoColorSpace::channels, KoChannelInfo::channelType(), KoChannelInfo::channelValueType(), KoChannelInfo::COLOR, KoColorSpace::colorDepthId(), KoColorSpace::colorModelId(), KoColorSpaceRegistry::colorSpace(), connect(), dbgPlugins, KoChannelInfo::displayOrderSorted(), KisDisplayColorConverter::displayRendererInterface(), KisDisplayColorConverter::dumbConverterInstance(), KoChannelInfo::FLOAT16, KoChannelInfo::FLOAT32, KoID::id(), KoColorSpace::id, KoColorSpaceRegistry::instance(), Integer16BitsColorDepthID, Integer8BitsColorDepthID, m_color, m_colorSpace, m_colorspaceSelector, m_displayConverter, m_FGColor, m_hexInput, m_inputs, m_ui, m_updateAllowed, KoColorProfile::name, KoColorSpace::name, KoColorSpace::profile(), RGBAColorModelID, KisColorSpaceSelector::setCurrentColorSpace(), KoChannelInfo::UINT16, KoChannelInfo::UINT32, KoChannelInfo::UINT8, update(), updated(), and updateHsvSelector().

◆ setCustomColorSpace

void KisSpecificColorSelectorWidget::setCustomColorSpace ( const KoColorSpace * colorSpace)
privateslot

Definition at line 315 of file kis_specific_color_selector_widget.cc.

316{
317 m_ui->useSameColorSpace->setChecked(false);
318 setColorSpace(colorSpace);
320}

References m_color, m_ui, setColor(), and setColorSpace().

◆ setDisplayConverter

void KisSpecificColorSelectorWidget::setDisplayConverter ( KisDisplayColorConverter * colorConverter)
slot

Definition at line 151 of file kis_specific_color_selector_widget.cc.

152{
153 const bool needsForceUpdate = m_displayConverter != displayConverter;
154
155 m_displayConverter = displayConverter;
156
157 if (m_displayConverter) {
159 m_converterConnection.addConnection(m_displayConverter, SIGNAL(displayConfigurationChanged()), this, SLOT(rereadCurrentColorSpace()), Qt::UniqueConnection);
160 }
161
162 rereadCurrentColorSpace(needsForceUpdate);
163}
void addConnection(Sender sender, Signal signal, Receiver receiver, Method method, Qt::ConnectionType type=Qt::AutoConnection)

References KisSignalAutoConnectionsStore::addConnection(), KisSignalAutoConnectionsStore::clear(), m_converterConnection, m_displayConverter, and rereadCurrentColorSpace().

◆ setFGColor

void KisSpecificColorSelectorWidget::setFGColor ( const KoColor & c)
slot

Definition at line 304 of file kis_specific_color_selector_widget.cc.

305{
306 m_FGColor = c;
307}

References m_FGColor.

◆ setUseSameColorSpace

void KisSpecificColorSelectorWidget::setUseSameColorSpace ( bool locked,
bool reloadColorSpace = true )
privateslot

Definition at line 130 of file kis_specific_color_selector_widget.cc.

131{
132 m_ui->useSameColorSpace->setIcon(locked ? KisIconUtils::loadIcon("chain-icon") : KisIconUtils::loadIcon("chain-broken-icon"));
133 if (locked && reloadColorSpace) {
135 }
136}

References KisIconUtils::loadIcon(), m_ui, and rereadCurrentColorSpace().

◆ update

void KisSpecificColorSelectorWidget::update ( )
privateslot

◆ updated

void KisSpecificColorSelectorWidget::updated ( )
signal

◆ updateHsvSelector()

void KisSpecificColorSelectorWidget::updateHsvSelector ( bool isRgbColorSpace)
private

Definition at line 339 of file kis_specific_color_selector_widget.cc.

340{
341 m_rgbButton->setVisible(isRgbColorSpace);
342 m_hsxButton->setVisible(isRgbColorSpace);
343 m_hsxModeComboBox->setVisible(isRgbColorSpace);
344
345 if (!isRgbColorSpace) {
346 // Force to be RGB only
347 m_hsvSlider->setVisible(false);
348 Q_FOREACH (KisColorInput* input, m_inputs) {
349 input->setVisible(true);
350 }
351 m_ui->chkUsePercentage->setEnabled(true);
352
353 return;
354 }
355
356 Q_FOREACH (KisColorInput* input, m_inputs) {
357 input->setVisible(m_rgbButton->isChecked());
358 }
359 m_ui->chkUsePercentage->setEnabled(m_rgbButton->isChecked());
360
361 m_hsvSlider->setVisible(m_hsxButton->isChecked());
362}

References m_hsvSlider, m_hsxButton, m_hsxModeComboBox, m_inputs, m_rgbButton, and m_ui.

◆ updateTimeout

void KisSpecificColorSelectorWidget::updateTimeout ( )
privateslot

Definition at line 310 of file kis_specific_color_selector_widget.cc.

311{
312 emit(colorChanged(m_color));
313}
void colorChanged(const KoColor &)

References colorChanged(), and m_color.

Member Data Documentation

◆ m_color

KoColor KisSpecificColorSelectorWidget::m_color
private

Definition at line 75 of file kis_specific_color_selector_widget.h.

◆ m_colorSpace

const KoColorSpace* KisSpecificColorSelectorWidget::m_colorSpace
private

Definition at line 74 of file kis_specific_color_selector_widget.h.

◆ m_colorspaceSelector

KisColorSpaceSelector* KisSpecificColorSelectorWidget::m_colorspaceSelector
private

Definition at line 79 of file kis_specific_color_selector_widget.h.

◆ m_converterConnection

KisSignalAutoConnectionsStore KisSpecificColorSelectorWidget::m_converterConnection
private

Definition at line 83 of file kis_specific_color_selector_widget.h.

◆ m_displayConverter

KisDisplayColorConverter* KisSpecificColorSelectorWidget::m_displayConverter
private

Definition at line 82 of file kis_specific_color_selector_widget.h.

◆ m_FGColor

KoColor KisSpecificColorSelectorWidget::m_FGColor
private

Definition at line 76 of file kis_specific_color_selector_widget.h.

◆ m_hexInput

KisHexColorInput* KisSpecificColorSelectorWidget::m_hexInput
private

Definition at line 68 of file kis_specific_color_selector_widget.h.

◆ m_hsvSelector

QButtonGroup* KisSpecificColorSelectorWidget::m_hsvSelector
private

Definition at line 73 of file kis_specific_color_selector_widget.h.

◆ m_hsvSlider

KisHsvColorInput* KisSpecificColorSelectorWidget::m_hsvSlider
private

Definition at line 69 of file kis_specific_color_selector_widget.h.

◆ m_hsxButton

QRadioButton* KisSpecificColorSelectorWidget::m_hsxButton
private

Definition at line 71 of file kis_specific_color_selector_widget.h.

◆ m_hsxModeComboBox

QComboBox* KisSpecificColorSelectorWidget::m_hsxModeComboBox
private

Definition at line 85 of file kis_specific_color_selector_widget.h.

◆ m_inputs

QList<KisColorInput *> KisSpecificColorSelectorWidget::m_inputs
private

Definition at line 67 of file kis_specific_color_selector_widget.h.

◆ m_rgbButton

QRadioButton* KisSpecificColorSelectorWidget::m_rgbButton
private

Definition at line 70 of file kis_specific_color_selector_widget.h.

◆ m_ui

QScopedPointer<Ui_wdgSpecificColorSelectorWidget> KisSpecificColorSelectorWidget::m_ui
private

Definition at line 80 of file kis_specific_color_selector_widget.h.

◆ m_updateAllowed

bool KisSpecificColorSelectorWidget::m_updateAllowed
private

Definition at line 77 of file kis_specific_color_selector_widget.h.

◆ m_updateCompressor

KisSignalCompressor* KisSpecificColorSelectorWidget::m_updateCompressor
private

Definition at line 78 of file kis_specific_color_selector_widget.h.


The documentation for this class was generated from the following files: