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

#include <WGSelectorConfigGrid.h>

+ Inheritance diagram for WGSelectorConfigGrid:

Signals

void sigConfigSelected (const KisColorSelectorConfiguration &cfg)
 

Public Member Functions

void clear ()
 
KisColorSelectorConfiguration currentConfiguration () const
 
QIcon currentIcon () const
 
QIcon generateIcon (const KisColorSelectorConfiguration &configuration, qreal pixelRatio=1.0, bool dualState=false) const
 
QVector< KisColorSelectorConfigurationselectedConfigurations () const
 
void setChecked (const KisColorSelectorConfiguration &configuration)
 
void setColorModel (KisVisualColorModel::ColorModel model)
 
void setConfigurations (const QVector< KisColorSelectorConfiguration > &configurations)
 
 WGSelectorConfigGrid (QWidget *parent=nullptr, bool multiSelect=false)
 

Static Public Member Functions

static QVector< KisColorSelectorConfigurationhueBasedConfigurations ()
 

Protected Member Functions

bool event (QEvent *event) override
 

Private Slots

void slotActionTriggered (QAction *action)
 

Private Member Functions

void updateIcons ()
 

Private Attributes

QActionGroup * m_actionGroup
 
int m_columns {4}
 
QAction * m_currentAction {0}
 
QAction * m_dummyAction {0}
 
int m_iconSize {96}
 
QGridLayout * m_layout
 
KisVisualColorSelectorm_selector
 

Detailed Description

Definition at line 21 of file WGSelectorConfigGrid.h.

Constructor & Destructor Documentation

◆ WGSelectorConfigGrid()

WGSelectorConfigGrid::WGSelectorConfigGrid ( QWidget * parent = nullptr,
bool multiSelect = false )
explicit

Definition at line 38 of file WGSelectorConfigGrid.cpp.

39 : QWidget(parent)
40 , m_layout(new QGridLayout(this))
41 , m_actionGroup(new QActionGroup(this))
43{
44 m_actionGroup->setExclusive(!multiSelect);
45 connect(m_actionGroup, SIGNAL(triggered(QAction*)), SLOT(slotActionTriggered(QAction*)));
46
48 m_selector->setGeometry(0, 0, m_iconSize, m_iconSize - 2);
49 m_selector->setVisible(false);
50 m_selector->setEnabled(false);
52 m_selector->slotSetColor(KoColor(QColor(255, 0, 0), KoColorSpaceRegistry::instance()->rgb8()));
53}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
The KisVisualColorSelector class.
void slotSetColorSpace(const KoColorSpace *cs) override
void slotSetColor(const KoColor &c) override
void slotActionTriggered(QAction *action)
KisVisualColorSelector * m_selector
static KoColorSpaceRegistry * instance()

References connect(), KoColorSpaceRegistry::instance(), m_actionGroup, m_iconSize, m_selector, KisVisualColorSelector::setMinimumSliderWidth(), slotActionTriggered(), KisVisualColorSelector::slotSetColor(), and KisVisualColorSelector::slotSetColorSpace().

Member Function Documentation

◆ clear()

void WGSelectorConfigGrid::clear ( )

Definition at line 55 of file WGSelectorConfigGrid.cpp.

56{
57 while (QLayoutItem *child = m_layout->takeAt(0)) {
58 delete child->widget();
59 delete child;
60 }
61 qDeleteAll(m_actionGroup->actions());
62}

References m_actionGroup, and m_layout.

◆ currentConfiguration()

KisColorSelectorConfiguration WGSelectorConfigGrid::currentConfiguration ( ) const

◆ currentIcon()

QIcon WGSelectorConfigGrid::currentIcon ( ) const

Definition at line 64 of file WGSelectorConfigGrid.cpp.

65{
66 return (m_currentAction && m_currentAction != m_dummyAction) ? m_currentAction->icon() : QIcon();
67}

References m_currentAction, and m_dummyAction.

◆ event()

bool WGSelectorConfigGrid::event ( QEvent * event)
overrideprotected

Definition at line 180 of file WGSelectorConfigGrid.cpp.

181{
182 bool handled = QWidget::event(event);
183 if (event->type() == QEvent::PaletteChange) {
184 // For some reason, Qt doesn't like if we recreate the icons from this
185 // even handler and randomly crashes somewhere after this function returns
186 QTimer::singleShot(0, this, &WGSelectorConfigGrid::updateIcons);
187 event->accept();
188 handled = true;
189 }
190 return handled;
191}
bool event(QEvent *event) override

References event(), and updateIcons().

◆ generateIcon()

QIcon WGSelectorConfigGrid::generateIcon ( const KisColorSelectorConfiguration & configuration,
qreal pixelRatio = 1.0,
bool dualState = false ) const

Definition at line 140 of file WGSelectorConfigGrid.cpp.

141{
142 QSize sz(m_selector->width() * pixelRatio, m_selector->height() * pixelRatio);
143 QPixmap pixmap(sz);
144 pixmap.setDevicePixelRatio(pixelRatio);
145 pixmap.fill(Qt::transparent);
146 m_selector->setConfiguration(&configuration);
147 QPoint offset(0, dualState ? 2 : 1);
148 m_selector->render(&pixmap, offset, QRegion(), RenderFlag::DrawChildren);
149 QIcon icon(pixmap);
150
151 if (!dualState) {
152 return icon;
153 }
154
155 // highlight bar for on-icon
156 QPainter painter(&pixmap);
157 painter.setRenderHint(QPainter::Antialiasing);
158 QBrush highlight(palette().brush(QPalette::Active, QPalette::Highlight));
159 painter.setPen(QPen(highlight, 2.0, Qt::SolidLine, Qt::RoundCap));
160 painter.drawLine(1, 1, m_iconSize-1, 1);
161 painter.end();
162 icon.addPixmap(pixmap, QIcon::Normal, QIcon::On);
163 return icon;
164}
void setConfiguration(const KisColorSelectorConfiguration *config)
Explicitly set the shape configuration. Accepts all valid combinations of Advanced Color Selector,...
rgba palette[MAX_PALETTE]
Definition palette.c:35

References m_iconSize, m_selector, palette, and KisVisualColorSelector::setConfiguration().

◆ hueBasedConfigurations()

QVector< KisColorSelectorConfiguration > WGSelectorConfigGrid::hueBasedConfigurations ( )
static

Definition at line 166 of file WGSelectorConfigGrid.cpp.

167{
169 QVector<KCSC> configs;
170 configs.push_back(KCSC(KCSC::Triangle, KCSC::Ring, KCSC::SV, KCSC::H));
171 configs.push_back(KCSC(KCSC::Square, KCSC::Ring, KCSC::SV, KCSC::H));
172 configs.push_back(KCSC(KCSC::Wheel, KCSC::Slider, KCSC::VH, KCSC::hsvS));
173 configs.push_back(KCSC(KCSC::Wheel, KCSC::Slider, KCSC::hsvSH, KCSC::V));
174 configs.push_back(KCSC(KCSC::Square, KCSC::Slider, KCSC::SV, KCSC::H));
175 configs.push_back(KCSC(KCSC::Square, KCSC::Slider, KCSC::VH, KCSC::hsvS));
176 configs.push_back(KCSC(KCSC::Square, KCSC::Slider, KCSC::hsvSH, KCSC::V));
177 return configs;
178}

◆ selectedConfigurations()

QVector< KisColorSelectorConfiguration > WGSelectorConfigGrid::selectedConfigurations ( ) const

Definition at line 80 of file WGSelectorConfigGrid.cpp.

81{
83 const QList<QAction*> actions = m_actionGroup->actions();
84 for (QAction *action : actions) {
85 SelectorConfigAction *sa = dynamic_cast<SelectorConfigAction *>(action);
86 if (sa && sa->isChecked()) {
87 configurations.append(sa->configuration());
88 }
89 }
90 return configurations;
91}

References SelectorConfigAction::configuration(), and m_actionGroup.

◆ setChecked()

void WGSelectorConfigGrid::setChecked ( const KisColorSelectorConfiguration & configuration)

Definition at line 125 of file WGSelectorConfigGrid.cpp.

126{
127 const QList<QAction*> actions = m_actionGroup->actions();
128 for (QAction *action : actions) {
129 SelectorConfigAction *sa = dynamic_cast<SelectorConfigAction *>(action);
130 if (sa && sa->configuration() == configuration) {
131 sa->setChecked(true);
132 m_currentAction = action;
133 return;
134 }
135 }
136 m_dummyAction->setChecked(true);
138}

References SelectorConfigAction::configuration(), m_actionGroup, m_currentAction, and m_dummyAction.

◆ setColorModel()

void WGSelectorConfigGrid::setColorModel ( KisVisualColorModel::ColorModel model)

Definition at line 93 of file WGSelectorConfigGrid.cpp.

94{
95 if (model != m_selector->selectorModel()->colorModel()) {
96 m_selector->selectorModel()->setRGBColorModel(model);
98 }
99}
KisVisualColorModelSP selectorModel() const

References m_selector, KisVisualColorSelector::selectorModel(), and updateIcons().

◆ setConfigurations()

void WGSelectorConfigGrid::setConfigurations ( const QVector< KisColorSelectorConfiguration > & configurations)

Definition at line 101 of file WGSelectorConfigGrid.cpp.

102{
103 clear();
104 // exclusive action groups have no nice way to set none as checked, and
105 // ExclusiveOptional is not what we want either, so use a dummy action
106 m_dummyAction = new QAction("dummy", m_actionGroup);
107 m_dummyAction->setCheckable(true);
108 m_dummyAction->setChecked(true);
110
111 for (int i = 0; i < configurations.size(); i++) {
112 const KisColorSelectorConfiguration &config = configurations.at(i);
114 //action->setText(QString("TBD %1").arg(i));
115 action->setIcon(generateIcon(config, devicePixelRatioF(), true));
116
117 QToolButton *button = new QToolButton(this);
118 button->setAutoRaise(true);
119 button->setDefaultAction(action);
120 button->setIconSize(QSize(m_iconSize, m_iconSize));
121 m_layout->addWidget(button, i/m_columns, i%m_columns);
122 }
123}
QIcon generateIcon(const KisColorSelectorConfiguration &configuration, qreal pixelRatio=1.0, bool dualState=false) const
QString button(const QWheelEvent &ev)

References button(), clear(), generateIcon(), m_actionGroup, m_columns, m_currentAction, m_dummyAction, m_iconSize, and m_layout.

◆ sigConfigSelected

void WGSelectorConfigGrid::sigConfigSelected ( const KisColorSelectorConfiguration & cfg)
signal

◆ slotActionTriggered

void WGSelectorConfigGrid::slotActionTriggered ( QAction * action)
privateslot

Definition at line 193 of file WGSelectorConfigGrid.cpp.

194{
195 // Unfortunately, exclusive QActionGroups don't filter out attempts to toggle
196 // an action that is already checked, so need to check ourselves if checked
197 // action really changed. Checking the hidden dummy also is a silent operation.
198 if (action == m_currentAction) {
199 return;
200 }
201 m_currentAction = action;
202 if (action != m_dummyAction) {
203 SelectorConfigAction *sa = dynamic_cast<SelectorConfigAction *>(action);
205
206 Q_EMIT sigConfigSelected(sa->configuration());
207 }
208}
void sigConfigSelected(const KisColorSelectorConfiguration &cfg)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References SelectorConfigAction::configuration(), KIS_SAFE_ASSERT_RECOVER_RETURN, m_currentAction, m_dummyAction, and sigConfigSelected().

◆ updateIcons()

void WGSelectorConfigGrid::updateIcons ( )
private

Definition at line 210 of file WGSelectorConfigGrid.cpp.

210 {
211 const QList<QAction*> actions = m_actionGroup->actions();
212 for (QAction *action : actions) {
213 SelectorConfigAction *sa = dynamic_cast<SelectorConfigAction *>(action);
214 if (sa) {
215 sa->setIcon(generateIcon(sa->configuration(), devicePixelRatioF(), true));
216 }
217 }
218}

References SelectorConfigAction::configuration(), generateIcon(), and m_actionGroup.

Member Data Documentation

◆ m_actionGroup

QActionGroup* WGSelectorConfigGrid::m_actionGroup
private

Definition at line 49 of file WGSelectorConfigGrid.h.

◆ m_columns

int WGSelectorConfigGrid::m_columns {4}
private

Definition at line 46 of file WGSelectorConfigGrid.h.

46{4};

◆ m_currentAction

QAction* WGSelectorConfigGrid::m_currentAction {0}
private

Definition at line 52 of file WGSelectorConfigGrid.h.

52{0};

◆ m_dummyAction

QAction* WGSelectorConfigGrid::m_dummyAction {0}
private

Definition at line 51 of file WGSelectorConfigGrid.h.

51{0};

◆ m_iconSize

int WGSelectorConfigGrid::m_iconSize {96}
private

Definition at line 47 of file WGSelectorConfigGrid.h.

47{96};

◆ m_layout

QGridLayout* WGSelectorConfigGrid::m_layout
private

Definition at line 48 of file WGSelectorConfigGrid.h.

◆ m_selector

KisVisualColorSelector* WGSelectorConfigGrid::m_selector
private

Definition at line 50 of file WGSelectorConfigGrid.h.


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