Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_shade_selector_line_combo_box_popup.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Adam Celarek <kdedev at xibo dot at>
3 * SPDX-FileCopyrightText: 2013 Dmitry Kazakov <dimula73@gmail.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
10
11#include <QVBoxLayout>
12#include <QMouseEvent>
13#include <QPainter>
14#include <QApplication>
15#include <kconfig.h>
16#include <ksharedconfig.h>
17#include <kconfiggroup.h>
18
19#include "kis_global.h"
23
24
26 : QWidget(parent, Qt::Popup),
27 spacing(10),
28 m_lastHighlightedItem(0),
29 m_lastSelectedItem(0),
30 m_lineEditor(0),
31 m_parentProxy(new KisColorSelectorBaseProxyNoop())
32{
33 setMouseTracking(true);
34
35 QVBoxLayout* layout = new QVBoxLayout(this);
36 layout->setSpacing(spacing);
37
38 layout->addWidget(new KisShadeSelectorLine(1.0, 0.0, 0.0, m_parentProxy.data(), this));
39 layout->addWidget(new KisShadeSelectorLine(0.1, 0.0, 0.0, m_parentProxy.data(), this));
40 layout->addWidget(new KisShadeSelectorLine(0.2, 0.0, 0.0, m_parentProxy.data(), this));
41 layout->addWidget(new KisShadeSelectorLine(0.0, 0.5, 0.0, m_parentProxy.data(), this));
42 layout->addWidget(new KisShadeSelectorLine(0.0, 1.0, 0.0, m_parentProxy.data(), this));
43 layout->addWidget(new KisShadeSelectorLine(0.0, 0.0, 0.5, m_parentProxy.data(), this));
44 layout->addWidget(new KisShadeSelectorLine(0.0, 0.0, 1.0, m_parentProxy.data(), this));
45 layout->addWidget(new KisShadeSelectorLine(0.0, 0.5, 0.5, m_parentProxy.data(), this));
46 layout->addWidget(new KisShadeSelectorLine(0.0, 1.0, 1.0, m_parentProxy.data(), this));
47 layout->addWidget(new KisShadeSelectorLine(0.0, -0.5, 0.5, m_parentProxy.data(), this));
48 layout->addWidget(new KisShadeSelectorLine(0.0, -1.0, 1.0, m_parentProxy.data(), this));
49 layout->addWidget(new KisShadeSelectorLine(0.0, 0.5, 0.5, m_parentProxy.data(), this, -0.04));
50 layout->addWidget(new KisShadeSelectorLine(0.0, 0.5, 0.5, m_parentProxy.data(), this, +0.04));
51 layout->addWidget(new KisShadeSelectorLine(0.0, -0.5, 0.5, m_parentProxy.data(), this, -0.04));
52
53 KisShadeSelectorLine* preview = new KisShadeSelectorLine(0.0, -0.5, 0.5, m_parentProxy.data(), this, +0.04);
54 m_lineEditor = new KisShadeSelectorLineEditor(this, preview);
55 layout->addWidget(preview);
56 layout->addWidget(m_lineEditor);
57
58 connect(m_lineEditor, SIGNAL(requestActivateLine(QWidget*)), SLOT(activateItem(QWidget*)));
59
60 for(int i=0; i<this->layout()->count(); i++) {
61 KisShadeSelectorLine* item = dynamic_cast<KisShadeSelectorLine*>(this->layout()->itemAt(i)->widget());
62 if(item!=0) {
63 item->setMouseTracking(true);
64 item->setAttribute(Qt::WA_TransparentForMouseEvents);
65 KoColor color;
66 color.fromQColor(QColor(190, 50, 50));
67 item->setColor(color);
68 item->showHelpText();
69 }
70 }
71}
72
76
78{
79 m_lineEditor->fromString(string);
80}
81
83{
84 QRect oldSelectedArea = m_selectedArea;
85 m_selectedArea = newRect;
86 update(oldSelectedArea);
87 update(m_selectedArea);
88}
89
91{
92 QRect oldHighlightArea = m_highlightedArea;
93 m_highlightedArea = newRect;
94 update(oldHighlightArea);
95 update(m_highlightedArea);
96}
97
99{
100 KisShadeSelectorLineBase* item = dynamic_cast<KisShadeSelectorLineBase*>(widget);
102
103 QRect itemRect = kisGrowRect(item->geometry(), spacing / 2 - 1);
104 m_lastSelectedItem = item;
105
106 updateSelectedArea(itemRect);
107}
108
110{
111 QPainter painter(this);
112 QPainter p(this);
113 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
114
115 if (cfg.readEntry("useCustomColorForBackground", false)) {
116 p.fillRect(0,0,width(), height(), cfg.readEntry("customSelectorBackgroundColor", QColor(Qt::gray)));
117 } else {
118 p.fillRect(0,0,width(), height(), qApp->palette().window().color());
119 }
120 painter.fillRect(m_selectedArea, palette().highlight());
121
122 painter.setPen(QPen(palette().highlight(), 2));
123 painter.drawRect(m_highlightedArea);
124}
125
127{
128 if(rect().contains(e->pos())) {
129 for(int i = 0; i < layout()->count(); i++) {
130 KisShadeSelectorLineBase* item = dynamic_cast<KisShadeSelectorLineBase*>(layout()->itemAt(i)->widget());
132
133 QRect itemRect = kisGrowRect(item->geometry(), spacing / 2 - 1);
134 if(itemRect.contains(e->pos())) {
136
137 updateHighlightedArea(itemRect);
138 }
139 }
140 }
141 else {
142 updateHighlightedArea(QRect());
143 }
144}
145
147{
148 if(rect().contains(e->pos())) {
150
152
154 m_lineEditor->blockSignals(true);
156 m_lineEditor->blockSignals(false);
157 }
159 }
160 if (m_lastSelectedItem) {
161 KisShadeSelectorLineComboBox *parent = dynamic_cast<KisShadeSelectorLineComboBox*>(this->parent());
162 Q_ASSERT(parent);
163 parent->setConfiguration(m_lastSelectedItem->toString());
164 }
165 e->accept();
166
167 this->parentWidget()->update();
168 hide();
169}
170
const Params2D p
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
virtual QString toString() const =0
QScopedPointer< KisColorSelectorBaseProxy > m_parentProxy
void fromString(const QString &string) override
void setColor(const KoColor &color)
void fromQColor(const QColor &c)
Convenient function for converting from a QColor.
Definition KoColor.cpp:213
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75
T kisGrowRect(const T &rect, U offset)
Definition kis_global.h:186
rgba palette[MAX_PALETTE]
Definition palette.c:35