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
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
16class KisColorSelectorComboBoxPrivate : public QWidget {
17public:
21
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
42
43
44
51
52
59
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 }
112protected:
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);
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 }
156
157};
158
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);
169
170 // 30 pixels for the arrow of the combobox
172 auto sizePolicy = this->sizePolicy();
173 sizePolicy.setWidthForHeight(true);
174 setSizePolicy(sizePolicy);
175}
176
180
182{
183 QComboBox::hidePopup();
184 m_private->hide();
185}
186
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
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 }
206 update();
207}
208
213
215{
216 QComboBox::paintEvent(e);
217}
218
226
228
229 m_private->setList(model);
230}
const KoColorSpace * colorSpace() const
void mousePressEvent(QMouseEvent *e) override
KisColorSelectorConfiguration m_lastActiveConfiguration
void setConfiguration(KisColorSelectorConfiguration)
KisColorSelectorConfiguration m_configuration
void paintEvent(QPaintEvent *e) override
KisColorSelectorComboBoxPrivate * m_private
KisColorSelectorConfiguration configuration() const
void setColorSpace(const KoColorSpace *colorSpace)
void setColorSpace(KisColor::Type type)
void setDisplayBlip(bool disp)
void setColor(const KoColor &color) override
KisColorSelectorConfiguration configuration() const
void setConfiguration(KisColorSelectorConfiguration conf)
rgba palette[MAX_PALETTE]
Definition palette.c:35