Krita Source Code Documentation
Loading...
Searching...
No Matches
KisHalftoneConfigWidget.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
10#include <kis_filter_registry.h>
12#include <KoChannelInfo.h>
15#include <kis_signals_blocker.h>
16#include <KisViewManager.h>
18
19
23
25 : KisConfigWidget(parent)
26 , m_paintDevice(dev)
27 , m_intensityWidget(nullptr)
28{
29 Q_ASSERT(m_paintDevice);
30
33
34 m_ui.setupUi(this);
35
36 const QString intensityString = i18nc("Brightness in HSI color model", "Intensity");
37 const QString independentChannelsString = i18n("Independent Channels");
38 const QString alphaString = KoColorSpaceRegistry::instance()->graya8()->channels().at(1)->name();
39 const QString grayString = KoColorSpaceRegistry::instance()->graya8()->channels().at(0)->name();
40
42 m_ui.comboBoxMode->addItem(alphaString);
43 } else if (m_colorModelId == GrayColorModelID.id()) {
44 m_ui.comboBoxMode->addItem(grayString);
45 } else if (m_colorModelId == GrayAColorModelID.id()) {
46 m_ui.comboBoxMode->addItem(grayString);
47 m_ui.comboBoxMode->addItem(alphaString);
48 } else {
49 m_ui.comboBoxMode->addItem(intensityString);
50 m_ui.comboBoxMode->addItem(independentChannelsString);
51 m_ui.comboBoxMode->addItem(alphaString);
53 m_intensityWidget->hide();
54 connect(m_intensityWidget, SIGNAL(signal_configurationUpdated()), this, SIGNAL(sigConfigurationItemChanged()));
55 }
56
57 int alphaPos = static_cast<int>(m_paintDevice->colorSpace()->alphaPos());
58 for (int i = 0; i < m_channelsInfo.size(); ++i)
59 {
62 w->hideColors();
63 if (i != alphaPos) {
64 w->setContentsMargins(10, 10, 10, 10);
65 }
66 } else {
67 if (i == alphaPos) {
68 w->hideColors();
69 }
70 }
71 w->hide();
72 m_channelWidgets.append(w);
73 connect(w, SIGNAL(signal_configurationUpdated()), this, SIGNAL(sigConfigurationItemChanged()));
74 }
75
76 connect(m_ui.comboBoxMode, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_comboBoxMode_currentIndexChanged(int)));
77}
78
81
83{
84 const KisHalftoneFilterConfigurationSP filterConfig =
86 dynamic_cast<const KisHalftoneFilterConfiguration*>(config.data())
87 );
88
89 {
90 KisSignalsBlocker signalsBlocker(this);
91
92 QString mode = filterConfig->mode();
93
95 m_channelWidgets[0]->setConfiguration(filterConfig, "alpha_");
96 m_ui.comboBoxMode->setCurrentIndex(0);
97 } else if (m_colorModelId == GrayColorModelID.id()) {
98 m_channelWidgets[0]->setConfiguration(filterConfig, "intensity_");
99 m_ui.comboBoxMode->setCurrentIndex(0);
100 } else if (m_colorModelId == GrayAColorModelID.id()) {
101 m_channelWidgets[0]->setConfiguration(filterConfig, "intensity_");
102 m_channelWidgets[1]->setConfiguration(filterConfig, "alpha_");
103
105 m_ui.comboBoxMode->setCurrentIndex(1);
106 } else {
107 m_ui.comboBoxMode->setCurrentIndex(0);
108 }
109 } else {
110 int alphaPos = m_paintDevice->colorSpace()->alphaPos();
111 m_intensityWidget->setConfiguration(filterConfig, "intensity_");
112 for (int i = 0; i < m_channelWidgets.size(); ++i) {
113 if (i != alphaPos) {
114 m_channelWidgets[i]->setConfiguration(filterConfig, m_colorModelId + "_channel" + QString::number(i) + "_");
115 }
116 }
117 m_channelWidgets[alphaPos]->setConfiguration(filterConfig, "alpha_");
118
120 m_ui.comboBoxMode->setCurrentIndex(2);
122 m_ui.comboBoxMode->setCurrentIndex(1);
123 } else {
124 m_ui.comboBoxMode->setCurrentIndex(0);
125 }
126 }
127
128 slot_comboBoxMode_currentIndexChanged(m_ui.comboBoxMode->currentIndex());
129 }
131}
132
134{
135 KisFilterSP filter = KisFilterRegistry::instance()->get("halftone");
137 dynamic_cast<KisHalftoneFilterConfiguration*>(
139 );
140
141 filterConfig->setColorModelId(m_colorModelId);
142
145 m_channelWidgets[0]->configuration(filterConfig, "alpha_");
146 } else if (m_colorModelId == GrayColorModelID.id()) {
148 m_channelWidgets[0]->configuration(filterConfig, "intensity_");
149 } else if (m_colorModelId == GrayAColorModelID.id()) {
150 if (m_ui.comboBoxMode->currentIndex() == 0) {
152 } else {
154 }
155 m_channelWidgets[0]->configuration(filterConfig, "intensity_");
156 m_channelWidgets[1]->configuration(filterConfig, "alpha_");
157 } else {
158 int alphaPos = m_paintDevice->colorSpace()->alphaPos();
159 if (m_ui.comboBoxMode->currentIndex() == 0) {
161 } else if (m_ui.comboBoxMode->currentIndex() == 1) {
163 } else {
165 }
166 m_intensityWidget->configuration(filterConfig, "intensity_");
167 for (int i = 0; i < m_channelWidgets.size(); ++i) {
168 if (i != alphaPos) {
169 m_channelWidgets[i]->configuration(filterConfig, m_colorModelId + "_channel" + QString::number(i) + "_");
170 }
171 }
172 m_channelWidgets[alphaPos]->configuration(filterConfig, "alpha_");
173 }
174
175 return filterConfig;
176}
177
179{
180 if (m_intensityWidget) {
182 }
183 for (KisHalftoneConfigPageWidget *configPageWidget : m_channelWidgets) {
184 if (configPageWidget) {
185 configPageWidget->setView(view);
186 }
187 }
188
191}
192
194{
195 if (m_intensityWidget) {
197 }
198 for (KisHalftoneConfigPageWidget *configPageWidget : m_channelWidgets) {
199 if (configPageWidget) {
200 configPageWidget->setCanvasResourcesInterface(canvasResourcesInterface);
201 }
202 }
203}
204
206{
207 while (m_ui.tabWidgetChannels->count()) {
208 m_ui.tabWidgetChannels->removeTab(0);
209 }
210
212 m_ui.tabWidgetChannels->addTab(m_channelWidgets[0], m_channelsInfo.at(0)->name());
213 } else if (m_colorModelId == GrayAColorModelID.id()) {
214 if (index == 0) {
215 m_ui.tabWidgetChannels->addTab(m_channelWidgets[0], m_channelsInfo.at(0)->name());
216 } else {
217 m_ui.tabWidgetChannels->addTab(m_channelWidgets[1], m_channelsInfo.at(1)->name());
218 }
219 } else {
220 int alphaPos = m_paintDevice->colorSpace()->alphaPos();
221 if (index == 0) {
222 m_ui.tabWidgetChannels->addTab(m_intensityWidget, i18nc("Brightness in HSI color model", "Intensity"));
223 } else if (index == 1) {
224 for (int i = 0; i < m_channelsInfo.size(); ++i) {
225 if (i != alphaPos) {
226 m_ui.tabWidgetChannels->addTab(m_channelWidgets[i], m_channelsInfo.at(i)->name());
227 }
228 }
229 } else {
230 m_ui.tabWidgetChannels->addTab(m_channelWidgets[alphaPos], m_channelsInfo.at(alphaPos)->name());
231 }
232 }
233
235}
const KoID GrayAColorModelID("GRAYA", ki18n("Grayscale/Alpha"))
const KoID AlphaColorModelID("A", ki18n("Alpha mask"))
const KoID GrayColorModelID("GRAY", ki18n("Grayscale (without transparency)"))
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KoCanvasResourceProvider * resourceManager()
void sigConfigurationItemChanged()
virtual KoCanvasResourcesInterfaceSP canvasResourcesInterface() const
static KisFilterRegistry * instance()
static KisResourcesInterfaceSP instance()
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
void setConfiguration(const KisHalftoneFilterConfigurationSP config, const QString &prefix)
void configuration(KisHalftoneFilterConfigurationSP config, const QString &prefix) const
KisPropertiesConfigurationSP configuration() const override
const KisPaintDeviceSP m_paintDevice
QList< KoChannelInfo * > m_channelsInfo
void setView(KisViewManager *view) override
KisHalftoneConfigWidget(QWidget *parent, const KisPaintDeviceSP dev)
KisHalftoneConfigPageWidget * m_intensityWidget
Ui_HalftoneConfigWidget m_ui
void setConfiguration(const KisPropertiesConfigurationSP config) override
void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface) override
QVector< KisHalftoneConfigPageWidget * > m_channelWidgets
void slot_comboBoxMode_currentIndexChanged(int index)
static constexpr const char * HalftoneMode_Alpha
static constexpr const char * HalftoneMode_IndependentChannels
static constexpr const char * HalftoneMode_Intensity
const KoColorSpace * colorSpace() const
KisCanvasResourceProvider * canvasResourceProvider()
KoCanvasResourcesInterfaceSP canvasResourcesInterface() const
virtual quint32 alphaPos() const =0
QList< KoChannelInfo * > channels
virtual KoID colorModelId() const =0
T get(const QString &id) const
QString id() const
Definition KoID.cpp:63
virtual KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const
static KoColorSpaceRegistry * instance()
const KoColorSpace * graya8(const QString &profile=QString())