Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_color_selector_combo_box.cpp
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2010 Adam Celarek <kdedev at xibo dot at>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
#include "
kis_color_selector_combo_box.h
"
8
#include <QGridLayout>
9
#include <QPainter>
10
#include <QApplication>
11
#include <QMouseEvent>
12
13
#include "
kis_color_selector.h
"
14
#include "
kis_canvas2.h
"
15
16
class
KisColorSelectorComboBoxPrivate
:
public
QWidget {
17
public
:
18
int
spacing
;
19
int
selectorSize
;
20
QRect
highlightArea
;
21
22
KisColorSelectorComboBoxPrivate
(QWidget* parent) :
23
QWidget(parent, Qt::Popup),
24
spacing
(20),
25
selectorSize
(100),
26
highlightArea
(-1,-1,0,0)
27
{
28
setMouseTracking(
true
);
29
30
QGridLayout* layout =
new
QGridLayout(
this
);
31
layout->setSpacing(
spacing
);
32
33
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Triangle
,
KisColorSelectorConfiguration::Ring
,
KisColorSelectorConfiguration::SL
,
KisColorSelectorConfiguration::H
),
this
), 0,0);
34
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Ring
,
KisColorSelectorConfiguration::SV
,
KisColorSelectorConfiguration::H
),
this
), 0,1);
35
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Ring
,
KisColorSelectorConfiguration::SV2
,
KisColorSelectorConfiguration::H
),
this
), 0,2);
36
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::VH
,
KisColorSelectorConfiguration::hsvS
),
this
), 0,3);
37
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hsvSH
,
KisColorSelectorConfiguration::V
),
this
), 0,4);
38
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::SV2
,
KisColorSelectorConfiguration::H
),
this
), 1,0);
39
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::SV
,
KisColorSelectorConfiguration::H
),
this
), 1,1);
40
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::VH
,
KisColorSelectorConfiguration::hsvS
),
this
), 1,2);
41
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hsvSH
,
KisColorSelectorConfiguration::V
),
this
), 1,3);
42
43
44
45
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Ring
,
KisColorSelectorConfiguration::SL
,
KisColorSelectorConfiguration::H
),
this
), 0,1);
46
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::LH
,
KisColorSelectorConfiguration::hslS
),
this
), 0,2);
47
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hslSH
,
KisColorSelectorConfiguration::L
),
this
), 0,3);
48
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::SL
,
KisColorSelectorConfiguration::H
),
this
), 1,0);
49
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::LH
,
KisColorSelectorConfiguration::hslS
),
this
), 1,1);
50
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hslSH
,
KisColorSelectorConfiguration::L
),
this
), 1,2);
51
52
53
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Ring
,
KisColorSelectorConfiguration::SI
,
KisColorSelectorConfiguration::H
),
this
), 0,1);
54
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::IH
,
KisColorSelectorConfiguration::hsiS
),
this
), 0,2);
55
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hsiSH
,
KisColorSelectorConfiguration::I
),
this
), 0,3);
56
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::SI
,
KisColorSelectorConfiguration::H
),
this
), 1,0);
57
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::IH
,
KisColorSelectorConfiguration::hsiS
),
this
), 1,1);
58
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hsiSH
,
KisColorSelectorConfiguration::I
),
this
), 1,2);
59
60
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Ring
,
KisColorSelectorConfiguration::SY
,
KisColorSelectorConfiguration::H
),
this
), 0,1);
61
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::YH
,
KisColorSelectorConfiguration::hsyS
),
this
), 0,2);
62
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Wheel
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hsySH
,
KisColorSelectorConfiguration::Y
),
this
), 0,3);
63
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::SY
,
KisColorSelectorConfiguration::H
),
this
), 1,0);
64
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::YH
,
KisColorSelectorConfiguration::hsyS
),
this
), 1,1);
65
layout->addWidget(
new
KisColorSelector
(
KisColorSelectorConfiguration
(
KisColorSelectorConfiguration::Square
,
KisColorSelectorConfiguration::Slider
,
KisColorSelectorConfiguration::hsySH
,
KisColorSelectorConfiguration::Y
),
this
), 1,2);
66
setList
(0);
67
68
for
(
int
i=0; i<this->layout()->count(); i++) {
69
KisColorSelector
* item =
dynamic_cast<
KisColorSelector
*
>
(this->layout()->itemAt(i)->widget());
70
Q_ASSERT(item);
71
if
(item!=0) {
72
item->setMaximumSize(
selectorSize
,
selectorSize
);
73
item->setMinimumSize(
selectorSize
,
selectorSize
);
74
item->setMouseTracking(
true
);
75
item->setEnabled(
false
);
76
item->
setColor
(
KoColor
(QColor(255,0,0), item->
colorSpace
()));
77
item->
setDisplayBlip
(
false
);
78
}
79
}
80
}
81
82
83
void
setList
(
int
model){
84
for
(
int
i=1; i<layout()->count(); i++) {
85
layout()->itemAt(i)->widget()->hide();
86
}
87
88
if
(model==0){
89
for
(
int
i=1; i<9; i++) {
90
layout()->itemAt(i)->widget()->show();
91
}
92
}
93
94
if
(model==1){
95
for
(
int
i=9; i<15; i++) {
96
layout()->itemAt(i)->widget()->show();
97
}
98
}
99
100
if
(model==2){
101
for
(
int
i=15; i<21; i++) {
102
layout()->itemAt(i)->widget()->show();
103
}
104
}
105
106
if
(model==3){
107
for
(
int
i=21; i<layout()->count(); i++) {
108
layout()->itemAt(i)->widget()->show();
109
}
110
}
111
}
112
protected
:
113
void
paintEvent
(QPaintEvent *)
override
114
{
115
QPainter painter(
this
);
116
painter.fillRect(0,0,width(), height(), QColor(128,128,128));
117
painter.fillRect(
highlightArea
,
palette
().highlight());
118
}
119
120
void
mouseMoveEvent
(QMouseEvent * e)
override
121
{
122
if
(
rect
().contains(e->pos())) {
123
for
(
int
i=0; i<layout()->count(); i++) {
124
125
KisColorSelector
* item =
dynamic_cast<
KisColorSelector
*
>
(layout()->itemAt(i)->widget());
126
Q_ASSERT(item);
127
128
129
if
(layout()->itemAt(i)->widget()->isVisible()==
true
&& item->geometry().adjusted(-
spacing
/2, -
spacing
/2,
spacing
/2,
spacing
/2).contains(e->pos())) {
130
QRect oldArea=
highlightArea
;
131
highlightArea
=item->geometry().adjusted(-
spacing
/2, -
spacing
/2,
spacing
/2,
spacing
/2);
132
m_lastActiveConfiguration
=item->
configuration
();
133
update(
highlightArea
);
134
update(oldArea);
135
}
136
}
137
}
138
else
{
139
highlightArea
.setRect(-1,-1,0,0);
140
}
141
}
142
143
void
mousePressEvent
(QMouseEvent* e)
override
144
{
145
if
(
rect
().contains(e->pos())) {
146
KisColorSelectorComboBox
* parent =
dynamic_cast<
KisColorSelectorComboBox
*
>
(this->parent());
147
Q_ASSERT(parent);
148
parent->setConfiguration(
m_lastActiveConfiguration
);
149
//setList(parent->m_model);
150
}
151
//dbgKrita<<"mousepress";
152
hide();
153
e->accept();
154
}
155
KisColorSelectorConfiguration
m_lastActiveConfiguration
;
156
157
};
158
159
KisColorSelectorComboBox::KisColorSelectorComboBox
(QWidget* parent) :
160
QComboBox(parent),
161
m_private(new
KisColorSelectorComboBoxPrivate
(this)),
162
m_currentSelector(this)
163
{
164
QLayout* layout =
new
QGridLayout(
this
);
165
layout->addWidget(&
m_currentSelector
);
166
m_currentSelector
.setEnabled(
false
);
167
m_currentSelector
.
setDisplayBlip
(
false
);
168
m_currentSelector
.
setColor
(
KoColor
(QColor(255,0,0),
m_currentSelector
.
colorSpace
()));
169
170
// 30 pixels for the arrow of the combobox
171
setMinimumSize(
m_private
->
selectorSize
+
m_private
->
spacing
+30,
m_private
->
selectorSize
+
m_private
->
spacing
);
172
auto
sizePolicy = this->sizePolicy();
173
sizePolicy.setWidthForHeight(
true
);
174
setSizePolicy(sizePolicy);
175
}
176
177
KisColorSelectorComboBox::~KisColorSelectorComboBox
()
178
{
179
}
180
181
void
KisColorSelectorComboBox::hidePopup
()
182
{
183
QComboBox::hidePopup();
184
m_private
->hide();
185
}
186
187
void
KisColorSelectorComboBox::showPopup
()
188
{
189
// only show if this is not the popup
190
QComboBox::showPopup();
191
m_private
->move(mapToGlobal(QPoint(0,0)));
192
m_private
->show();
193
}
194
195
void
KisColorSelectorComboBox::setColorSpace
(
const
KoColorSpace
*colorSpace)
196
{
197
//this is not the popup, but we should set the canvas for all popup selectors
198
for
(
int
i=0; i<
m_private
->layout()->count(); i++) {
199
KisColorSelector
* item =
dynamic_cast<
KisColorSelector
*
>
(
m_private
->layout()->itemAt(i)->widget());
200
Q_ASSERT(item);
201
if
(item!=0) {
202
item->
setColorSpace
(colorSpace);
203
}
204
}
205
m_currentSelector
.
setColorSpace
(colorSpace);
206
update();
207
}
208
209
KisColorSelectorConfiguration
KisColorSelectorComboBox::configuration
()
const
210
{
211
return
m_configuration
;
212
}
213
214
void
KisColorSelectorComboBox::paintEvent
(QPaintEvent *e)
215
{
216
QComboBox::paintEvent(e);
217
}
218
219
void
KisColorSelectorComboBox::setConfiguration
(
KisColorSelectorConfiguration
conf)
220
{
221
m_configuration
=conf;
222
m_currentSelector
.
setConfiguration
(conf);
223
m_currentSelector
.
setColor
(
KoColor
(QColor(255,0,0),
m_currentSelector
.
colorSpace
()));
224
update();
225
}
226
227
void
KisColorSelectorComboBox::setList
(
int
model) {
228
229
m_private
->
setList
(model);
230
}
kis_color_selector.h
KisColorSelectorBase::colorSpace
const KoColorSpace * colorSpace() const
Definition
kis_color_selector_base.cpp:480
KisColorSelectorComboBoxPrivate
Definition
kis_color_selector_combo_box.cpp:16
KisColorSelectorComboBoxPrivate::mouseMoveEvent
void mouseMoveEvent(QMouseEvent *e) override
Definition
kis_color_selector_combo_box.cpp:120
KisColorSelectorComboBoxPrivate::spacing
int spacing
Definition
kis_color_selector_combo_box.cpp:18
KisColorSelectorComboBoxPrivate::paintEvent
void paintEvent(QPaintEvent *) override
Definition
kis_color_selector_combo_box.cpp:113
KisColorSelectorComboBoxPrivate::mousePressEvent
void mousePressEvent(QMouseEvent *e) override
Definition
kis_color_selector_combo_box.cpp:143
KisColorSelectorComboBoxPrivate::highlightArea
QRect highlightArea
Definition
kis_color_selector_combo_box.cpp:20
KisColorSelectorComboBoxPrivate::selectorSize
int selectorSize
Definition
kis_color_selector_combo_box.cpp:19
KisColorSelectorComboBoxPrivate::m_lastActiveConfiguration
KisColorSelectorConfiguration m_lastActiveConfiguration
Definition
kis_color_selector_combo_box.cpp:155
KisColorSelectorComboBoxPrivate::KisColorSelectorComboBoxPrivate
KisColorSelectorComboBoxPrivate(QWidget *parent)
Definition
kis_color_selector_combo_box.cpp:22
KisColorSelectorComboBoxPrivate::setList
void setList(int model)
Definition
kis_color_selector_combo_box.cpp:83
KisColorSelectorComboBox
Definition
kis_color_selector_combo_box.h:17
KisColorSelectorComboBox::setList
void setList(int model)
Definition
kis_color_selector_combo_box.cpp:227
KisColorSelectorComboBox::setConfiguration
void setConfiguration(KisColorSelectorConfiguration)
Definition
kis_color_selector_combo_box.cpp:219
KisColorSelectorComboBox::m_configuration
KisColorSelectorConfiguration m_configuration
Definition
kis_color_selector_combo_box.h:34
KisColorSelectorComboBox::showPopup
void showPopup() override
Definition
kis_color_selector_combo_box.cpp:187
KisColorSelectorComboBox::paintEvent
void paintEvent(QPaintEvent *e) override
Definition
kis_color_selector_combo_box.cpp:214
KisColorSelectorComboBox::KisColorSelectorComboBox
KisColorSelectorComboBox(QWidget *parent=0)
Definition
kis_color_selector_combo_box.cpp:159
KisColorSelectorComboBox::m_private
KisColorSelectorComboBoxPrivate * m_private
Definition
kis_color_selector_combo_box.h:33
KisColorSelectorComboBox::hidePopup
void hidePopup() override
Definition
kis_color_selector_combo_box.cpp:181
KisColorSelectorComboBox::configuration
KisColorSelectorConfiguration configuration() const
Definition
kis_color_selector_combo_box.cpp:209
KisColorSelectorComboBox::setColorSpace
void setColorSpace(const KoColorSpace *colorSpace)
Definition
kis_color_selector_combo_box.cpp:195
KisColorSelectorComboBox::~KisColorSelectorComboBox
~KisColorSelectorComboBox() override
Definition
kis_color_selector_combo_box.cpp:177
KisColorSelectorComboBox::m_currentSelector
KisColorSelector m_currentSelector
Definition
kis_color_selector_combo_box.h:35
KisColorSelectorConfiguration
Definition
KisColorSelectorConfiguration.h:16
KisColorSelectorConfiguration::SV2
@ SV2
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hsySH
@ hsySH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hslS
@ hslS
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::V
@ V
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::Y
@ Y
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::L
@ L
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hsvSH
@ hsvSH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hsiSH
@ hsiSH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hsyS
@ hsyS
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::SY
@ SY
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hsvS
@ hsvS
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::VH
@ VH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::IH
@ IH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hsiS
@ hsiS
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::YH
@ YH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::SV
@ SV
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::H
@ H
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::I
@ I
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::SI
@ SI
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::LH
@ LH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::hslSH
@ hslSH
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::SL
@ SL
Definition
KisColorSelectorConfiguration.h:21
KisColorSelectorConfiguration::Ring
@ Ring
Definition
KisColorSelectorConfiguration.h:20
KisColorSelectorConfiguration::Square
@ Square
Definition
KisColorSelectorConfiguration.h:20
KisColorSelectorConfiguration::Slider
@ Slider
Definition
KisColorSelectorConfiguration.h:20
KisColorSelectorConfiguration::Wheel
@ Wheel
Definition
KisColorSelectorConfiguration.h:20
KisColorSelectorConfiguration::Triangle
@ Triangle
Definition
KisColorSelectorConfiguration.h:20
KisColorSelector
Definition
kis_color_selector.h:23
KisColorSelector::setColorSpace
void setColorSpace(KisColor::Type type)
Definition
kis_color_selector.cpp:60
KisColorSelector::setDisplayBlip
void setDisplayBlip(bool disp)
Definition
kis_color_selector.h:91
KisColorSelector::setColor
void setColor(const KoColor &color) override
Definition
kis_color_selector.cpp:367
KisColorSelector::configuration
KisColorSelectorConfiguration configuration() const
Definition
kis_color_selector.cpp:136
KisColorSelector::setConfiguration
void setConfiguration(KisColorSelectorConfiguration conf)
Definition
kis_color_selector.cpp:79
KoColorSpace
Definition
KoColorSpace.h:78
KoColor
Definition
KoColor.h:31
kis_canvas2.h
kis_color_selector_combo_box.h
palette
rgba palette[MAX_PALETTE]
Definition
palette.c:35
rect
Definition
xcftools.h:129
plugins
dockers
advancedcolorselector
kis_color_selector_combo_box.cpp
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52