Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGamutMaskToolbar.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018 Anna Medonosova <anna.medonosova@gmail.com>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#include <QWidget>
8#include <QToolTip>
10#include <kis_icon_utils.h>
12#include <kis_signals_blocker.h>
13
16 : selectedMask(nullptr)
17 , selfUpdate(false)
18 {}
19
21
24
25 QString textNoMask;
27
29};
30
31KisGamutMaskToolbar::KisGamutMaskToolbar(QWidget* parent) : QWidget(parent)
32 , m_d(new Private())
33{
34 m_ui.reset(new Ui_wdgGamutMaskToolbar());
35 m_ui->setupUi(this);
36
37 m_d->iconMaskOff = KisIconUtils::loadIcon("gamut-mask-off");
38 m_d->iconMaskOn = KisIconUtils::loadIcon("gamut-mask-on");
39
40 m_d->textNoMask = i18n("Select a mask in \"Gamut Masks\" docker");
41 m_d->textMaskDisabled = i18n("Mask is disabled");
42
43 m_ui->labelMaskName->hide();
44
45 m_ui->bnToggleMask->setChecked(false);
46 m_ui->bnToggleMask->setIcon(m_d->iconMaskOn);
47
48 m_ui->rotationAngleSelector->setDecimals(0);
49 m_ui->rotationAngleSelector->setIncreasingDirection(KisAngleGauge::IncreasingDirection_Clockwise);
50 m_ui->rotationAngleSelector->hide();
51
52 // gamut mask connections
53 connect(m_ui->bnToggleMask, SIGNAL(toggled(bool)), SLOT(slotGamutMaskToggle(bool)));
54 connect(m_ui->rotationAngleSelector, SIGNAL(angleChanged(qreal)), SLOT(slotGamutMaskRotate(qreal)));
55}
56
61
63{
64 connect(resourceProvider, SIGNAL(sigGamutMaskChanged(KoGamutMaskSP)),
65 this, SLOT(slotGamutMaskSet(KoGamutMaskSP)), Qt::UniqueConnection);
66
67 connect(resourceProvider, SIGNAL(sigGamutMaskUnset()),
68 this, SLOT(slotGamutMaskUnset()), Qt::UniqueConnection);
69
71 resourceProvider, SLOT(slotGamutMaskActivated(KoGamutMaskSP)), Qt::UniqueConnection);
72
73 connect(this, SIGNAL(sigGamutMaskDeactivated()),
74 resourceProvider, SLOT(slotGamutMaskDeactivate()), Qt::UniqueConnection);
75
76 connect(resourceProvider, SIGNAL(sigGamutMaskDeactivated()),
77 this, SLOT(slotGamutMaskDeactivate()), Qt::UniqueConnection);
78
79}
80
82{
83 if (!mask) {
84 return;
85 }
86
87 if (m_d->selfUpdate) {
88 return;
89 }
90
91 m_d->selectedMask = mask;
92
93 if (m_d->selectedMask) {
94 updateMaskState(true, false);
95 } else {
96 updateMaskState(false, false);
97 }
98}
99
101{
102 m_d->selectedMask = nullptr;
103 m_ui->rotationAngleSelector->hide();
104 m_ui->bnToggleMask->setIcon(m_d->iconMaskOn);
105}
106
108{
109 if (m_d->selfUpdate) {
110 return;
111 }
112
113 updateMaskState(false, false);
114}
115
117{
118 if (m_d->selectedMask) {
119 updateMaskState(state, true);
120 } else {
121 QToolTip::showText(QCursor::pos(), m_d->textNoMask, m_ui->bnToggleMask, m_ui->bnToggleMask->geometry());
122 }
123}
124
126{
127 if (!m_d->selectedMask) {
128 return;
129 }
130
131 m_d->selectedMask->setRotation(angle);
132 m_d->selfUpdate = true;
133 Q_EMIT sigGamutMaskChanged(m_d->selectedMask);
134 m_d->selfUpdate = false;
135}
136
137void KisGamutMaskToolbar::updateMaskState(bool maskEnabled, bool internalChange)
138{
139 bool enabled = (m_d->selectedMask) ? maskEnabled : false;
140
141 m_ui->bnToggleMask->setChecked(enabled);
142
143 if (enabled) {
144 m_ui->bnToggleMask->setEnabled(true);
145 m_ui->bnToggleMask->setIcon(m_d->iconMaskOn);
146 m_ui->labelMaskName->hide();
147 m_ui->rotationAngleSelector->show();
148
149 m_ui->rotationAngleSelector->blockSignals(true);
150 m_ui->rotationAngleSelector->setAngle(static_cast<qreal>(m_d->selectedMask->rotation()));
151 m_ui->rotationAngleSelector->blockSignals(false);
152
153 if (internalChange) {
154 m_d->selfUpdate = true;
155 Q_EMIT sigGamutMaskChanged(m_d->selectedMask);
156 m_d->selfUpdate = false;
157 }
158
159 } else {
160 m_ui->bnToggleMask->setIcon(m_d->iconMaskOff);
161 m_ui->rotationAngleSelector->hide();
162 m_ui->labelMaskName->show();
163 m_ui->labelMaskName->setText(m_d->textMaskDisabled);
164
165 if (internalChange) {
166 m_d->selfUpdate = true;
168 m_d->selfUpdate = false;
169 }
170 }
171}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
@ IncreasingDirection_Clockwise
void sigGamutMaskChanged(KoGamutMaskSP)
void slotGamutMaskSet(KoGamutMaskSP mask)
KisGamutMaskToolbar(QWidget *parent=nullptr)
const QScopedPointer< Private > m_d
void connectMaskSignals(KisCanvasResourceProvider *resourceProvider)
void updateMaskState(bool maskEnabled, bool internalChange)
void sigGamutMaskDeactivated()
void slotGamutMaskRotate(qreal angle)
QScopedPointer< Ui_wdgGamutMaskToolbar > m_ui
void slotGamutMaskToggle(bool state)
QIcon loadIcon(const QString &name)