Krita Source Code Documentation
Loading...
Searching...
No Matches
KisHalftoneConfigPageWidget.cpp
Go to the documentation of this file.
1/*
2 * KDE. Krita Project.
3 *
4 * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
11#include <KoColor.h>
14#include <kis_config_widget.h>
15#include <kis_signals_blocker.h>
17
18#include <QScrollBar>
19#include <QResizeEvent>
20
22
24 : QWidget(parent)
25 , m_paintDevice(dev)
26 , m_generatorWidget(nullptr)
27 , m_view(nullptr)
28{
29 Q_ASSERT(m_paintDevice);
30
31 ui()->setupUi(this);
32
34 m_generatorIds.sort();
35
36 ui()->comboBoxGenerator->addItem(i18n("None"));
37 for (const QString &generatorId : m_generatorIds) {
38 KisGeneratorSP generator = KisGeneratorRegistry::instance()->get(generatorId);
39 ui()->comboBoxGenerator->addItem(generator->name());
40 }
41
42 QVBoxLayout *generatorContainerLayout = new QVBoxLayout(ui()->widgetGeneratorContainer);
43 generatorContainerLayout->setContentsMargins(0, 0, 0, 0);
44
45 ui()->sliderHardness->setRange(0.0, 100.0, 2);
46 ui()->sliderHardness->setSingleStep(1.0);
47 KisSpinBoxI18nHelper::setText(ui()->sliderHardness,
48 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
49
50 ui()->sliderForegroundOpacity->setRange(0, 100);
51 KisSpinBoxI18nHelper::setText(ui()->sliderForegroundOpacity,
52 i18nc("{n} is the number value, % is the percent sign", "Opacity: {n}%"));
53 ui()->sliderBackgroundOpacity->setRange(0, 100);
54 KisSpinBoxI18nHelper::setText(ui()->sliderBackgroundOpacity,
55 i18nc("{n} is the number value, % is the percent sign", "Opacity: {n}%"));
56
57 connect(ui()->comboBoxGenerator, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_comboBoxGenerator_currentIndexChanged(int)));
58 connect(ui()->sliderHardness, SIGNAL(valueChanged(qreal)), this, SIGNAL(signal_configurationUpdated()));
59 connect(ui()->checkBoxInvert, SIGNAL(toggled(bool)), this, SIGNAL(signal_configurationUpdated()));
60 connect(ui()->buttonForegroundColor, SIGNAL(changed(const KoColor&)), this, SIGNAL(signal_configurationUpdated()));
61 connect(ui()->sliderForegroundOpacity, SIGNAL(valueChanged(int)), this, SIGNAL(signal_configurationUpdated()));
62 connect(ui()->buttonBackgroundColor, SIGNAL(changed(const KoColor&)), this, SIGNAL(signal_configurationUpdated()));
63 connect(ui()->sliderBackgroundOpacity, SIGNAL(valueChanged(int)), this, SIGNAL(signal_configurationUpdated()));
64}
65
68
69const Ui_HalftoneConfigPageWidget * KisHalftoneConfigPageWidget::ui() const
70{
71 return &m_ui;
72}
73
74Ui_HalftoneConfigPageWidget * KisHalftoneConfigPageWidget::ui()
75{
76 return &m_ui;
77}
78
83
88
90{
91 ui()->labelForeground->setVisible(show);
92 ui()->buttonForegroundColor->setVisible(show);
93 ui()->sliderForegroundOpacity->setVisible(show);
94 ui()->labelBackground->setVisible(show);
95 ui()->buttonBackgroundColor->setVisible(show);
96 ui()->sliderBackgroundOpacity->setVisible(show);
97}
98
100{
101 {
102 KisSignalsBlocker signalsBlocker(this, ui()->comboBoxGenerator);
103
104 QString generatorId = config->generatorId(prefix);
105 int generatorIndex = m_generatorIds.indexOf(generatorId);
106 if (generatorIndex == -1) {
107 ui()->comboBoxGenerator->setCurrentIndex(0);
108 setGenerator("", nullptr);
109 } else {
110 ui()->comboBoxGenerator->setCurrentIndex(generatorIndex + 1);
111 KisFilterConfigurationSP generatorConfiguration = config->generatorConfiguration(prefix);
112 setGenerator(generatorId, generatorConfiguration);
113 }
114
115 ui()->sliderHardness->setValue(config->hardness(prefix));
116 ui()->checkBoxInvert->setChecked(config->invert(prefix));
117 ui()->buttonForegroundColor->setColor(config->foregroundColor(prefix));
118 ui()->sliderForegroundOpacity->setValue(config->foregroundOpacity(prefix));
119 ui()->buttonBackgroundColor->setColor(config->backgroundColor(prefix));
120 ui()->sliderBackgroundOpacity->setValue(config->backgroundOpacity(prefix));
121 }
123}
124
126{
127 if (ui()->comboBoxGenerator->currentIndex() == 0) {
128 config->setGeneratorId(prefix, "");
129 } else {
130 QString generatorId = m_generatorIds.at(ui()->comboBoxGenerator->currentIndex() - 1);
131 config->setGeneratorId(prefix, generatorId);
132 if (m_generatorWidget) {
133 config->setGeneratorConfiguration(
135 );
136 }
137 }
138
139 config->setHardness(prefix, ui()->sliderHardness->value());
140 config->setInvert(prefix, ui()->checkBoxInvert->isChecked());
141 config->setForegroundColor(prefix, ui()->buttonForegroundColor->color());
142 config->setForegroundOpacity(prefix, ui()->sliderForegroundOpacity->value());
143 config->setBackgroundColor(prefix, ui()->buttonBackgroundColor->color());
144 config->setBackgroundOpacity(prefix, ui()->sliderBackgroundOpacity->value());
145}
146
148{
149 if (m_generatorWidget && m_currentGeneratorId != generatorId) {
150 ui()->widgetGeneratorContainer->layout()->removeWidget(m_generatorWidget);
151 delete m_generatorWidget;
152 m_generatorWidget = nullptr;
153 }
154
155 KisGeneratorSP generator = KisGeneratorRegistry::instance()->get(generatorId);
156 if (generator && !m_generatorWidget) {
157 KisConfigWidget *generatorWidget = generator->createConfigurationWidget(this, m_paintDevice, false);
158 if (generatorWidget) {
159 ui()->widgetGeneratorContainer->layout()->addWidget(generatorWidget);
160
161 if (m_view) {
162 generatorWidget->setView(m_view);
163 } else {
165 }
166
167 m_generatorWidget = generatorWidget;
168 connect(generatorWidget, SIGNAL(sigConfigurationUpdated()), this, SIGNAL(signal_configurationUpdated()));
169 }
170 }
171
172 m_currentGeneratorId = generatorId;
173
174 if (m_generatorWidget) {
175 if (config) {
177 } else {
178 KisFilterConfigurationSP generatorConfig =
180 if (generatorId == "screentone") {
181 generatorConfig->setProperty("rotation", 45.0);
182 generatorConfig->setProperty("contrast", 50.0);
183 }
184 m_generatorWidget->setConfiguration(generatorConfig);
185 }
186 }
187}
188
197
199{
200 m_canvasResourcesInterface = canvasResourcesInterface;
201
202 if (m_generatorWidget) {
203 m_generatorWidget->setCanvasResourcesInterface(canvasResourcesInterface);
204 }
205}
206
208{
209 if (index < 0 || index > m_generatorIds.size()) {
210 return;
211 }
212
213 if (index == 0) {
214 setGenerator("", nullptr);
215 } else {
216 QString generatorId = m_generatorIds.at(index - 1);
217 setGenerator(generatorId, nullptr);
218 }
219
221}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
virtual void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
virtual void setView(KisViewManager *view)
virtual KisPropertiesConfigurationSP configuration() const =0
virtual void setConfiguration(const KisPropertiesConfigurationSP config)=0
static KisGeneratorRegistry * instance()
static KisResourcesInterfaceSP instance()
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
const Ui_HalftoneConfigPageWidget * ui() const
void setConfiguration(const KisHalftoneFilterConfigurationSP config, const QString &prefix)
void configuration(KisHalftoneFilterConfigurationSP config, const QString &prefix) const
KoCanvasResourcesInterfaceSP m_canvasResourcesInterface
KisHalftoneConfigPageWidget(QWidget *parent, const KisPaintDeviceSP dev)
void setGenerator(const QString &generatorId, const KisFilterConfigurationSP config)
T get(const QString &id) const
QList< QString > keys() const
void setText(QSpinBox *spinBox, const QStringView textTemplate)
virtual KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const
virtual KisFilterConfigurationSP defaultConfiguration(KisResourcesInterfaceSP resourcesInterface) const