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

#include <KisScreentoneConfigWidget.h>

+ Inheritance diagram for KisScreentoneConfigWidget:

Public Member Functions

KisPropertiesConfigurationSP configuration () const override
 
 KisScreentoneConfigWidget (QWidget *parent=0, const KoColorSpace *cs=KoColorSpaceRegistry::instance() ->rgb8())
 
void setConfiguration (const KisPropertiesConfigurationSP) override
 
void setView (KisViewManager *view) override
 
 ~KisScreentoneConfigWidget () override
 
- Public Member Functions inherited from KisConfigWidget
virtual KoCanvasResourcesInterfaceSP canvasResourcesInterface () const
 
virtual void setCanvasResourcesInterface (KoCanvasResourcesInterfaceSP canvasResourcesInterface)
 
 ~KisConfigWidget () override
 

Private Slots

void slot_buttonConstrainFrequency_keepAspectRatioChanged (bool keep)
 
void slot_buttonConstrainSize_keepAspectRatioChanged (bool keep)
 
void slot_buttonResolutionFromImage_clicked ()
 
void slot_buttonSizeModePixelBased_toggled (bool checked)
 
void slot_buttonSizeModeResolutionBased_toggled (bool checked)
 
void slot_comboBoxPattern_currentIndexChanged (int)
 
void slot_comboBoxShape_currentIndexChanged (int)
 
void slot_comboBoxUnits_currentIndexChanged (int index)
 
void slot_setFrequencyFromSize ()
 
void slot_setFrequencySlidersRanges ()
 
void slot_setSizeFromFrequency ()
 
void slot_sliderAlignToPixelGridX_valueChanged (int value)
 
void slot_sliderAlignToPixelGridY_valueChanged (int value)
 
void slot_sliderFrequencyX_valueChanged (qreal value)
 
void slot_sliderFrequencyY_valueChanged (qreal value)
 
void slot_sliderResolution_valueChanged (qreal value)
 
void slot_sliderSizeX_valueChanged (qreal value)
 
void slot_sliderSizeY_valueChanged (qreal value)
 

Private Member Functions

int comboIndexToShape (int patterIndex, int shapeIndex) const
 
void setupInterpolationComboBox ()
 
void setupPatternComboBox ()
 
void setupShapeComboBox ()
 
int shapeToComboIndex (int pattern, int shape) const
 

Private Attributes

const KoColorSpacem_colorSpace
 
QString m_lastSelectedInterpolationText
 
Ui_ScreentoneConfigWidget m_ui
 
KisViewManagerm_view
 

Static Private Attributes

static constexpr qreal maximumCellSize {1000.0}
 
static constexpr qreal minimumCellSize {1.0}
 

Additional Inherited Members

- Signals inherited from KisConfigWidget
void sigConfigurationItemChanged ()
 
void sigConfigurationUpdated ()
 
void sigDropLockedConfig (KisPropertiesConfigurationSP p)
 
void sigSaveLockedConfig (KisPropertiesConfigurationSP p)
 
- Protected Member Functions inherited from KisConfigWidget
 KisConfigWidget (QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
 

Detailed Description

Definition at line 21 of file KisScreentoneConfigWidget.h.

Constructor & Destructor Documentation

◆ KisScreentoneConfigWidget()

KisScreentoneConfigWidget::KisScreentoneConfigWidget ( QWidget * parent = 0,
const KoColorSpace * cs = KoColorSpaceRegistry::instance()->rgb8() )

Definition at line 23 of file KisScreentoneConfigWidget.cpp.

24 : KisConfigWidget(parent)
25 , m_view(nullptr)
26 , m_colorSpace(cs)
27{
28 m_ui.setupUi(this);
29
33
34 m_ui.buttonEqualizationNone->setGroupPosition(KoGroupButton::GroupLeft);
35 m_ui.buttonEqualizationFunctionBased->setGroupPosition(KoGroupButton::GroupCenter);
36 m_ui.buttonEqualizationTemplateBased->setGroupPosition(KoGroupButton::GroupRight);
37
38 m_ui.sliderForegroundOpacity->setRange(0, 100);
39 KisSpinBoxI18nHelper::setText(m_ui.sliderForegroundOpacity,
40 i18nc("{n} is the number value, % is the percent sign", "Opacity: {n}%"));
41
42 m_ui.sliderBackgroundOpacity->setRange(0, 100);
43 KisSpinBoxI18nHelper::setText(m_ui.sliderBackgroundOpacity,
44 i18nc("{n} is the number value, % is the percent sign", "Opacity: {n}%"));
45
46 m_ui.sliderBrightness->setRange(0.0, 100.0, 2);
47 m_ui.sliderBrightness->setSingleStep(1.0);
48 KisSpinBoxI18nHelper::setText(m_ui.sliderBrightness,
49 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
50
51 m_ui.sliderContrast->setRange(0.0, 100.0, 2);
52 m_ui.sliderContrast->setSingleStep(1.0);
53 KisSpinBoxI18nHelper::setText(m_ui.sliderContrast, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
54
55 m_ui.buttonSizeModeResolutionBased->setGroupPosition(KoGroupButton::GroupLeft);
56 m_ui.buttonSizeModePixelBased->setGroupPosition(KoGroupButton::GroupRight);
57
58 m_ui.sliderResolution->setRange(1.0, 9999.0, 2);
59 m_ui.sliderResolution->setSoftRange(72.0, 600.0);
60
61 m_ui.sliderFrequencyX->setPrefix(i18n("X: "));
62 m_ui.sliderFrequencyX->setSingleStep(1.0);
63
64 m_ui.sliderFrequencyY->setPrefix(i18n("Y: "));
65 m_ui.sliderFrequencyY->setSingleStep(1.0);
66
68
70
71 m_ui.sliderPositionX->setRange(-1000.0, 1000.0, 2);
72 m_ui.sliderPositionX->setSoftRange(-100.0, 100.0);
73 m_ui.sliderPositionX->setPrefix(i18n("X: "));
74 m_ui.sliderPositionX->setSuffix(i18n(" px"));
75 m_ui.sliderPositionX->setSingleStep(1.0);
76
77 m_ui.sliderPositionY->setRange(-1000.0, 1000.0, 2);
78 m_ui.sliderPositionY->setSoftRange(-100.0, 100.0);
79 m_ui.sliderPositionY->setPrefix(i18n("Y: "));
80 m_ui.sliderPositionY->setSuffix(i18n(" px"));
81 m_ui.sliderPositionY->setSingleStep(1.0);
82
83 m_ui.sliderSizeX->setRange(1.0, 1000.0, 2);
84 m_ui.sliderSizeX->setSoftRange(1.0, 100.0);
85 m_ui.sliderSizeX->setPrefix(i18n("X: "));
86 m_ui.sliderSizeX->setSuffix(i18n(" px"));
87 m_ui.sliderSizeX->setSingleStep(1.0);
88 m_ui.sliderSizeX->setExponentRatio(4.32);
89
90 m_ui.sliderSizeY->setRange(1.0, 1000.0, 2);
91 m_ui.sliderSizeY->setSoftRange(1.0, 100.0);
92 m_ui.sliderSizeY->setPrefix(i18n("Y: "));
93 m_ui.sliderSizeY->setSuffix(i18n(" px"));
94 m_ui.sliderSizeY->setSingleStep(1.0);
95 m_ui.sliderSizeY->setExponentRatio(4.32);
96
97 m_ui.sliderShearX->setRange(-10.0, 10.0, 2);
98 m_ui.sliderShearX->setSoftRange(-2.0, 2.0);
99 m_ui.sliderShearX->setPrefix(i18n("X: "));
100 m_ui.sliderShearX->setSingleStep(0.1);
101
102 m_ui.sliderShearY->setRange(-10.0, 10.0, 2);
103 m_ui.sliderShearY->setSoftRange(-2.0, 2.0);
104 m_ui.sliderShearY->setPrefix(i18n("Y: "));
105 m_ui.sliderShearY->setSingleStep(0.1);
106
107 m_ui.sliderAlignToPixelGridX->setRange(1, 20);
108 m_ui.sliderAlignToPixelGridY->setRange(1, 20);
109
110 KisSpinBoxI18nHelper::install(m_ui.sliderAlignToPixelGridX, [](int value) {
111 // i18n: This is meant to be used in a spinbox so keep the {n} in the text
112 // and it will be substituted by the number. The text before will be
113 // used as the prefix and the text after as the suffix
114 return i18ncp("Horizontal pixel grid alignment prefix/suffix for spinboxes in screentone generator", "Every {n} cell horizontally", "Every {n} cells horizontally", value);
115 });
116
117 KisSpinBoxI18nHelper::install(m_ui.sliderAlignToPixelGridY, [](int value) {
118 // i18n: This is meant to be used in a spinbox so keep the {n} in the text
119 // and it will be substituted by the number. The text before will be
120 // used as the prefix and the text after as the suffix
121 return i18ncp("Vertical pixel grid alignment prefix/suffix for spinboxes in screentone generator", "Every {n} cell vertically", "Every {n} cells vertically", value);
122 });
123
125
126 connect(m_ui.comboBoxPattern, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_comboBoxPattern_currentIndexChanged(int)));
127 connect(m_ui.comboBoxShape, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_comboBoxShape_currentIndexChanged(int)));
128 connect(m_ui.comboBoxInterpolation, SIGNAL(currentIndexChanged(int)), this, SIGNAL(sigConfigurationUpdated()));
129
130 connect(m_ui.buttonEqualizationNone, SIGNAL(toggled(bool)), this, SIGNAL(sigConfigurationUpdated()));
131 connect(m_ui.buttonEqualizationFunctionBased, SIGNAL(toggled(bool)), this, SIGNAL(sigConfigurationUpdated()));
132 connect(m_ui.buttonEqualizationTemplateBased, SIGNAL(toggled(bool)), this, SIGNAL(sigConfigurationUpdated()));
133
134 connect(m_ui.buttonForegroundColor, SIGNAL(changed(const KoColor&)), this, SIGNAL(sigConfigurationUpdated()));
135 connect(m_ui.sliderForegroundOpacity, SIGNAL(valueChanged(int)), this, SIGNAL(sigConfigurationUpdated()));
136
137 connect(m_ui.buttonBackgroundColor, SIGNAL(changed(const KoColor&)), this, SIGNAL(sigConfigurationUpdated()));
138 connect(m_ui.sliderBackgroundOpacity, SIGNAL(valueChanged(int)), this, SIGNAL(sigConfigurationUpdated()));
139
140 connect(m_ui.checkBoxInvert, SIGNAL(toggled(bool)), this, SIGNAL(sigConfigurationUpdated()));
141
142 connect(m_ui.sliderBrightness, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
143 connect(m_ui.sliderContrast, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
144
145 connect(m_ui.buttonSizeModeResolutionBased, SIGNAL(toggled(bool)), this, SLOT(slot_buttonSizeModeResolutionBased_toggled(bool)));
146 connect(m_ui.buttonSizeModePixelBased, SIGNAL(toggled(bool)), this, SLOT(slot_buttonSizeModePixelBased_toggled(bool)));
147
148 connect(m_ui.comboBoxUnits, SIGNAL(currentIndexChanged(int)), this, SLOT(slot_comboBoxUnits_currentIndexChanged(int)));
149
150 connect(m_ui.sliderResolution, SIGNAL(valueChanged(qreal)), this, SLOT(slot_sliderResolution_valueChanged(qreal)));
151 connect(m_ui.sliderResolution, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
152 connect(m_ui.buttonResolutionFromImage, SIGNAL(clicked()), this, SLOT(slot_buttonResolutionFromImage_clicked()));
153
154 connect(m_ui.sliderFrequencyX, SIGNAL(valueChanged(qreal)), this, SLOT(slot_sliderFrequencyX_valueChanged(qreal)));
155 connect(m_ui.sliderFrequencyY, SIGNAL(valueChanged(qreal)), this, SLOT(slot_sliderFrequencyY_valueChanged(qreal)));
156 connect(m_ui.buttonConstrainFrequency, SIGNAL(keepAspectRatioChanged(bool)), this, SLOT(slot_buttonConstrainFrequency_keepAspectRatioChanged(bool)));
157
158 connect(m_ui.sliderPositionX, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
159 connect(m_ui.sliderPositionY, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
160
161 connect(m_ui.sliderSizeX, SIGNAL(valueChanged(qreal)), this, SLOT(slot_sliderSizeX_valueChanged(qreal)));
162 connect(m_ui.sliderSizeY, SIGNAL(valueChanged(qreal)), this, SLOT(slot_sliderSizeY_valueChanged(qreal)));
163 connect(m_ui.buttonConstrainSize, SIGNAL(keepAspectRatioChanged(bool)), this, SLOT(slot_buttonConstrainSize_keepAspectRatioChanged(bool)));
164
165 connect(m_ui.sliderShearX, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
166 connect(m_ui.sliderShearY, SIGNAL(valueChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
167
168 connect(m_ui.angleSelectorRotation, SIGNAL(angleChanged(qreal)), this, SIGNAL(sigConfigurationUpdated()));
169
170 connect(m_ui.checkBoxAlignToPixelGrid, SIGNAL(toggled(bool)), this, SIGNAL(sigConfigurationUpdated()));
171 connect(m_ui.sliderAlignToPixelGridX, SIGNAL(valueChanged(int)), this, SLOT(slot_sliderAlignToPixelGridX_valueChanged(int)));
172 connect(m_ui.sliderAlignToPixelGridY, SIGNAL(valueChanged(int)), this, SLOT(slot_sliderAlignToPixelGridY_valueChanged(int)));
173}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisConfigWidget(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
void sigConfigurationUpdated()
void slot_sliderResolution_valueChanged(qreal value)
void slot_buttonConstrainFrequency_keepAspectRatioChanged(bool keep)
void slot_sliderAlignToPixelGridX_valueChanged(int value)
void slot_buttonSizeModePixelBased_toggled(bool checked)
void slot_sliderAlignToPixelGridY_valueChanged(int value)
void slot_buttonSizeModeResolutionBased_toggled(bool checked)
Ui_ScreentoneConfigWidget m_ui
void slot_sliderFrequencyX_valueChanged(qreal value)
void slot_buttonConstrainSize_keepAspectRatioChanged(bool keep)
void slot_sliderFrequencyY_valueChanged(qreal value)
@ GroupLeft
The button is at the left of the group, so it would have rounded the left part.
@ GroupRight
The button is at the right of the group, so it would have rounded the right part.
@ GroupCenter
The button is on the center of the group, so it would have separators on both sides.
void setText(QSpinBox *spinBox, const QStringView textTemplate)
void install(QSpinBox *spinBox, std::function< QString(int)> messageFn)

References connect(), KoGroupButton::GroupCenter, KoGroupButton::GroupLeft, KoGroupButton::GroupRight, KisSpinBoxI18nHelper::install(), m_ui, KisSpinBoxI18nHelper::setText(), setupInterpolationComboBox(), setupPatternComboBox(), setupShapeComboBox(), KisConfigWidget::sigConfigurationUpdated(), slot_buttonConstrainFrequency_keepAspectRatioChanged(), slot_buttonConstrainSize_keepAspectRatioChanged(), slot_buttonResolutionFromImage_clicked(), slot_buttonSizeModePixelBased_toggled(), slot_buttonSizeModeResolutionBased_toggled(), slot_comboBoxPattern_currentIndexChanged(), slot_comboBoxShape_currentIndexChanged(), slot_comboBoxUnits_currentIndexChanged(), slot_setFrequencySlidersRanges(), slot_sliderAlignToPixelGridX_valueChanged(), slot_sliderAlignToPixelGridY_valueChanged(), slot_sliderFrequencyX_valueChanged(), slot_sliderFrequencyY_valueChanged(), slot_sliderResolution_valueChanged(), slot_sliderSizeX_valueChanged(), slot_sliderSizeY_valueChanged(), and value().

◆ ~KisScreentoneConfigWidget()

KisScreentoneConfigWidget::~KisScreentoneConfigWidget ( )
override

Definition at line 175 of file KisScreentoneConfigWidget.cpp.

176{}

Member Function Documentation

◆ comboIndexToShape()

int KisScreentoneConfigWidget::comboIndexToShape ( int patterIndex,
int shapeIndex ) const
private

◆ configuration()

KisPropertiesConfigurationSP KisScreentoneConfigWidget::configuration ( ) const
overridevirtual
Returns
the configuration

Implements KisConfigWidget.

Definition at line 262 of file KisScreentoneConfigWidget.cpp.

263{
268 );
269
270 config->setPattern(m_ui.comboBoxPattern->currentIndex());
271 config->setShape(comboIndexToShape(m_ui.comboBoxPattern->currentIndex(), m_ui.comboBoxShape->currentIndex()));
272 config->setInterpolation(m_ui.comboBoxInterpolation->currentIndex());
273 if (m_ui.buttonEqualizationFunctionBased->isChecked()) {
274 config->setEqualizationMode(KisScreentoneEqualizationMode_FunctionBased);
275 } else if (m_ui.buttonEqualizationTemplateBased->isChecked()) {
276 config->setEqualizationMode(KisScreentoneEqualizationMode_TemplateBased);
277 } else {
278 config->setEqualizationMode(KisScreentoneEqualizationMode_None);
279 }
280
281 config->setForegroundColor(m_ui.buttonForegroundColor->color());
282 config->setForegroundOpacity(m_ui.sliderForegroundOpacity->value());
283 config->setBackgroundColor(m_ui.buttonBackgroundColor->color());
284 config->setBackgroundOpacity(m_ui.sliderBackgroundOpacity->value());
285 config->setInvert(m_ui.checkBoxInvert->isChecked());
286 config->setBrightness(m_ui.sliderBrightness->value());
287 config->setContrast(m_ui.sliderContrast->value());
288
289 config->setSizeMode(m_ui.buttonSizeModePixelBased->isChecked() ? KisScreentoneSizeMode_PixelBased
291 config->setUnits(m_ui.comboBoxUnits->currentIndex());
292 config->setResolution(m_ui.sliderResolution->value());
293 config->setFrequencyX(m_ui.sliderFrequencyX->value());
294 config->setFrequencyY(m_ui.sliderFrequencyY->value());
295 config->setConstrainFrequency(m_ui.buttonConstrainFrequency->keepAspectRatio());
296 config->setPositionX(m_ui.sliderPositionX->value());
297 config->setPositionY(m_ui.sliderPositionY->value());
298 config->setSizeX(m_ui.sliderSizeX->value());
299 config->setSizeY(m_ui.sliderSizeY->value());
300 config->setConstrainSize(m_ui.buttonConstrainSize->keepAspectRatio());
301 config->setShearX(m_ui.sliderShearX->value());
302 config->setShearY(m_ui.sliderShearY->value());
303 config->setRotation(m_ui.angleSelectorRotation->angle());
304 config->setAlignToPixelGrid(m_ui.checkBoxAlignToPixelGrid->isChecked());
305 config->setAlignToPixelGridX(m_ui.sliderAlignToPixelGridX->value());
306 config->setAlignToPixelGridY(m_ui.sliderAlignToPixelGridY->value());
307
308 return config;
309}
@ KisScreentoneEqualizationMode_TemplateBased
@ KisScreentoneEqualizationMode_FunctionBased
static KisGeneratorRegistry * instance()
static KisResourcesInterfaceSP instance()
int comboIndexToShape(int patterIndex, int shapeIndex) const
T get(const QString &id) const
virtual KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const

References comboIndexToShape(), KisSharedPtr< T >::data(), KisScreentoneGeneratorConfiguration::defaultName(), KisBaseProcessor::factoryConfiguration(), KoGenericRegistry< T >::get(), KisGeneratorRegistry::instance(), KisGlobalResourcesInterface::instance(), KisScreentoneEqualizationMode_FunctionBased, KisScreentoneEqualizationMode_None, KisScreentoneEqualizationMode_TemplateBased, KisScreentoneSizeMode_PixelBased, KisScreentoneSizeMode_ResolutionBased, and m_ui.

◆ setConfiguration()

void KisScreentoneConfigWidget::setConfiguration ( const KisPropertiesConfigurationSP config)
overridevirtual
Parameters
configthe configuration for this configuration widget.

Implements KisConfigWidget.

Definition at line 178 of file KisScreentoneConfigWidget.cpp.

179{
180 const KisScreentoneGeneratorConfiguration *generatorConfig =
181 dynamic_cast<const KisScreentoneGeneratorConfiguration*>(config.data());
182 KIS_ASSERT(generatorConfig);
183
184 {
185 KisSignalsBlocker blocker1(m_ui.buttonSizeModeResolutionBased, m_ui.buttonSizeModePixelBased,
186 m_ui.sliderResolution, m_ui.buttonConstrainFrequency,
187 m_ui.sliderFrequencyX, m_ui.sliderFrequencyY);
188 KisSignalsBlocker blocker2(m_ui.sliderSizeX, m_ui.sliderSizeY,
189 m_ui.buttonConstrainSize, m_ui.sliderAlignToPixelGridX,
190 m_ui.sliderAlignToPixelGridY, this);
191
192 m_ui.comboBoxPattern->setCurrentIndex(generatorConfig->pattern());
193 m_ui.comboBoxShape->setCurrentIndex(shapeToComboIndex(generatorConfig->pattern(), generatorConfig->shape()));
194 m_ui.comboBoxInterpolation->setCurrentIndex(generatorConfig->interpolation());
195 const int equalizationMode = generatorConfig->equalizationMode();
196 if (equalizationMode == KisScreentoneEqualizationMode_FunctionBased) {
197 m_ui.buttonEqualizationFunctionBased->setChecked(true);
198 } else if (equalizationMode == KisScreentoneEqualizationMode_TemplateBased) {
199 m_ui.buttonEqualizationTemplateBased->setChecked(true);
200 } else {
201 m_ui.buttonEqualizationNone->setChecked(true);
202 }
203
204 KoColor c;
205 c = generatorConfig->foregroundColor();
207 c.setOpacity(1.0);
208 m_ui.buttonForegroundColor->setColor(c);
209 m_ui.sliderForegroundOpacity->setValue(generatorConfig->foregroundOpacity());
210 c = generatorConfig->backgroundColor();
212 c.setOpacity(1.0);
213 m_ui.buttonBackgroundColor->setColor(c);
214 m_ui.sliderBackgroundOpacity->setValue(generatorConfig->backgroundOpacity());
215 m_ui.checkBoxInvert->setChecked(generatorConfig->invert());
216 m_ui.sliderBrightness->setValue(generatorConfig->brightness());
217 m_ui.sliderContrast->setValue(generatorConfig->contrast());
218
219 m_ui.comboBoxUnits->setCurrentIndex(generatorConfig->units());
220 m_ui.sliderResolution->setValue(generatorConfig->resolution());
222 m_ui.buttonConstrainFrequency->setKeepAspectRatio(generatorConfig->constrainFrequency());
223 m_ui.sliderFrequencyX->setValue(generatorConfig->frequencyX());
224 // Set the frequency y slider to the frequency y value only if the frequency is not constrained
225 if (m_ui.buttonConstrainFrequency->keepAspectRatio()) {
226 m_ui.sliderFrequencyY->setValue(generatorConfig->frequencyX());
227 } else {
228 m_ui.sliderFrequencyY->setValue(generatorConfig->frequencyY());
229 }
230 m_ui.sliderPositionX->setValue(generatorConfig->positionX());
231 m_ui.sliderPositionY->setValue(generatorConfig->positionY());
232 m_ui.buttonConstrainSize->setKeepAspectRatio(generatorConfig->constrainSize());
233 m_ui.sliderSizeX->setValue(generatorConfig->sizeX());
234 // Set the size y slider to the sithe y value only if the size must not be squared
235 if (m_ui.buttonConstrainSize->keepAspectRatio()) {
236 m_ui.sliderSizeY->setValue(generatorConfig->sizeX());
237 } else {
238 m_ui.sliderSizeY->setValue(generatorConfig->sizeY());
239 }
240 m_ui.sliderShearX->setValue(generatorConfig->shearX());
241 m_ui.sliderShearY->setValue(generatorConfig->shearY());
242 m_ui.angleSelectorRotation->setAngle(generatorConfig->rotation());
243 m_ui.checkBoxAlignToPixelGrid->setChecked(generatorConfig->alignToPixelGrid());
244 m_ui.sliderAlignToPixelGridX->setValue(generatorConfig->alignToPixelGridX());
245 m_ui.sliderAlignToPixelGridY->setValue(generatorConfig->alignToPixelGridY());
246 KisSpinBoxI18nHelper::update(m_ui.sliderAlignToPixelGridX);
247 KisSpinBoxI18nHelper::update(m_ui.sliderAlignToPixelGridY);
248
249 if (generatorConfig->sizeMode() == KisScreentoneSizeMode_PixelBased) {
250 m_ui.buttonSizeModePixelBased->setChecked(true);
253 } else {
254 m_ui.buttonSizeModeResolutionBased->setChecked(true);
257 }
258 }
260}
void sigConfigurationItemChanged()
int shapeToComboIndex(int pattern, int shape) const
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
Definition KoColor.cpp:136
void setOpacity(quint8 alpha)
Definition KoColor.cpp:333
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
bool update(QSpinBox *spinBox)

References KisScreentoneGeneratorConfiguration::alignToPixelGrid(), KisScreentoneGeneratorConfiguration::alignToPixelGridX(), KisScreentoneGeneratorConfiguration::alignToPixelGridY(), KisScreentoneGeneratorConfiguration::backgroundColor(), KisScreentoneGeneratorConfiguration::backgroundOpacity(), KisScreentoneGeneratorConfiguration::brightness(), KisScreentoneGeneratorConfiguration::constrainFrequency(), KisScreentoneGeneratorConfiguration::constrainSize(), KisScreentoneGeneratorConfiguration::contrast(), KoColor::convertTo(), KisSharedPtr< T >::data(), KisScreentoneGeneratorConfiguration::equalizationMode(), KisScreentoneGeneratorConfiguration::foregroundColor(), KisScreentoneGeneratorConfiguration::foregroundOpacity(), KisScreentoneGeneratorConfiguration::frequencyX(), KisScreentoneGeneratorConfiguration::frequencyY(), KisScreentoneGeneratorConfiguration::interpolation(), KisScreentoneGeneratorConfiguration::invert(), KIS_ASSERT, KisScreentoneEqualizationMode_FunctionBased, KisScreentoneEqualizationMode_TemplateBased, KisScreentoneSizeMode_PixelBased, m_colorSpace, m_ui, KisScreentoneGeneratorConfiguration::pattern(), KisScreentoneGeneratorConfiguration::positionX(), KisScreentoneGeneratorConfiguration::positionY(), KisScreentoneGeneratorConfiguration::resolution(), KisScreentoneGeneratorConfiguration::rotation(), KoColor::setOpacity(), KisScreentoneGeneratorConfiguration::shape(), shapeToComboIndex(), KisScreentoneGeneratorConfiguration::shearX(), KisScreentoneGeneratorConfiguration::shearY(), KisConfigWidget::sigConfigurationItemChanged(), KisScreentoneGeneratorConfiguration::sizeMode(), KisScreentoneGeneratorConfiguration::sizeX(), KisScreentoneGeneratorConfiguration::sizeY(), slot_buttonSizeModePixelBased_toggled(), slot_buttonSizeModeResolutionBased_toggled(), slot_setFrequencyFromSize(), slot_setFrequencySlidersRanges(), slot_setSizeFromFrequency(), KisScreentoneGeneratorConfiguration::units(), and KisSpinBoxI18nHelper::update().

◆ setupInterpolationComboBox()

void KisScreentoneConfigWidget::setupInterpolationComboBox ( )
private

Definition at line 340 of file KisScreentoneConfigWidget.cpp.

341{
342 if (m_ui.comboBoxInterpolation->count() > 0) {
343 m_lastSelectedInterpolationText = m_ui.comboBoxInterpolation->currentText();
344 m_ui.comboBoxInterpolation->clear();
345 }
346 QStringList names =
348 m_ui.comboBoxPattern->currentIndex(),
349 comboIndexToShape(m_ui.comboBoxPattern->currentIndex(), m_ui.comboBoxShape->currentIndex())
350 );
351 if (names.isEmpty()) {
352 m_ui.labelInterpolation->hide();
353 m_ui.comboBoxInterpolation->hide();
354 } else {
355 m_ui.comboBoxInterpolation->addItems(names);
356 int i = m_ui.comboBoxInterpolation->findText(m_lastSelectedInterpolationText);
357 m_ui.comboBoxInterpolation->setCurrentIndex(i != -1 ? i : KisScreentoneGeneratorConfiguration::defaultInterpolation());
358 m_ui.labelInterpolation->show();
359 m_ui.comboBoxInterpolation->show();
360 }
361}
QStringList screentoneInterpolationNames(int pattern, int shape)

References comboIndexToShape(), KisScreentoneGeneratorConfiguration::defaultInterpolation(), m_lastSelectedInterpolationText, m_ui, and screentoneInterpolationNames().

◆ setupPatternComboBox()

void KisScreentoneConfigWidget::setupPatternComboBox ( )
private

Definition at line 320 of file KisScreentoneConfigWidget.cpp.

321{
322 m_ui.comboBoxPattern->clear();
323 m_ui.comboBoxPattern->addItems(screentonePatternNames());
324}
QStringList screentonePatternNames()

References m_ui, and screentonePatternNames().

◆ setupShapeComboBox()

void KisScreentoneConfigWidget::setupShapeComboBox ( )
private

Definition at line 326 of file KisScreentoneConfigWidget.cpp.

327{
328 m_ui.comboBoxShape->clear();
329 QStringList names = screentoneShapeNames(m_ui.comboBoxPattern->currentIndex());
330 if (names.isEmpty()) {
331 m_ui.labelShape->hide();
332 m_ui.comboBoxShape->hide();
333 } else {
334 m_ui.comboBoxShape->addItems(names);
335 m_ui.labelShape->show();
336 m_ui.comboBoxShape->show();
337 }
338}
QStringList screentoneShapeNames(int pattern)

References m_ui, and screentoneShapeNames().

◆ setView()

void KisScreentoneConfigWidget::setView ( KisViewManager * view)
overridevirtual

Sets the view object that can be used by the configuration widget for richer functionality

TODO: remove this method from KisConfigWidget, since KisViewManager is from kritaui, but we are in kritaimage

Reimplemented from KisConfigWidget.

Definition at line 311 of file KisScreentoneConfigWidget.cpp.

312{
313 m_view = view;
314 m_ui.buttonResolutionFromImage->setEnabled(true);
315
318}
KoCanvasResourceProvider * resourceManager()
virtual void setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
virtual KoCanvasResourcesInterfaceSP canvasResourcesInterface() const
KisCanvasResourceProvider * canvasResourceProvider()
KoCanvasResourcesInterfaceSP canvasResourcesInterface() const

References KisViewManager::canvasResourceProvider(), KoCanvasResourceProvider::canvasResourcesInterface(), KisConfigWidget::canvasResourcesInterface(), m_ui, m_view, KisCanvasResourceProvider::resourceManager(), and KisConfigWidget::setCanvasResourcesInterface().

◆ shapeToComboIndex()

int KisScreentoneConfigWidget::shapeToComboIndex ( int pattern,
int shape ) const
private

Definition at line 363 of file KisScreentoneConfigWidget.cpp.

364{
365 if (pattern == KisScreentonePatternType_Lines) {
366 return shape;
367 }
369 return 0;
370 } else if (shape == KisScreentoneShapeType_EllipseDotsLegacy) {
371 return 1;
372 } else if (shape == KisScreentoneShapeType_EllipseDots) {
373 return 2;
374 } else if (shape == KisScreentoneShapeType_DiamondDots) {
375 return 3;
376 } else if (shape == KisScreentoneShapeType_SquareDots) {
377 return 4;
378 }
379 return -1;
380}

References KisScreentonePatternType_Lines, KisScreentoneShapeType_DiamondDots, KisScreentoneShapeType_EllipseDots, KisScreentoneShapeType_EllipseDotsLegacy, KisScreentoneShapeType_RoundDots, and KisScreentoneShapeType_SquareDots.

◆ slot_buttonConstrainFrequency_keepAspectRatioChanged

void KisScreentoneConfigWidget::slot_buttonConstrainFrequency_keepAspectRatioChanged ( bool keep)
privateslot

Definition at line 548 of file KisScreentoneConfigWidget.cpp.

549{
550 if (keep) {
551 slot_sliderFrequencyX_valueChanged(m_ui.sliderFrequencyX->value());
552 }
554}

References m_ui, slot_setSizeFromFrequency(), and slot_sliderFrequencyX_valueChanged().

◆ slot_buttonConstrainSize_keepAspectRatioChanged

void KisScreentoneConfigWidget::slot_buttonConstrainSize_keepAspectRatioChanged ( bool keep)
privateslot

Definition at line 576 of file KisScreentoneConfigWidget.cpp.

577{
578 if (keep) {
579 slot_sliderSizeX_valueChanged(m_ui.sliderSizeX->value());
580 }
582}

References m_ui, slot_setFrequencyFromSize(), and slot_sliderSizeX_valueChanged().

◆ slot_buttonResolutionFromImage_clicked

void KisScreentoneConfigWidget::slot_buttonResolutionFromImage_clicked ( )
privateslot

Definition at line 505 of file KisScreentoneConfigWidget.cpp.

506{
507 if (m_view) {
508 if (m_ui.comboBoxUnits->currentIndex() == 1) {
509 m_ui.sliderResolution->setValue(
511 );
512 } else {
513 m_ui.sliderResolution->setValue(
515 );
516 }
517 }
518}
double yRes() const
KisImageWSP image() const
Return the image this view is displaying.
static qreal convertFromUnitToUnit(const qreal value, const KoUnit &fromUnit, const KoUnit &toUnit, qreal factor=1.0)
Definition KoUnit.cpp:295
@ Point
Postscript point, 1/72th of an Inco.
Definition KoUnit.h:76
@ Centimeter
Definition KoUnit.h:78
@ Inch
Definition KoUnit.h:77

References KoUnit::Centimeter, KoUnit::convertFromUnitToUnit(), KisViewManager::image(), KoUnit::Inch, m_ui, m_view, KoUnit::Point, and KisImage::yRes().

◆ slot_buttonSizeModePixelBased_toggled

void KisScreentoneConfigWidget::slot_buttonSizeModePixelBased_toggled ( bool checked)
privateslot

Definition at line 443 of file KisScreentoneConfigWidget.cpp.

444{
445 if (!checked) {
446 return;
447 }
448
449 m_ui.tabTransformation->setUpdatesEnabled(false);
450
451 if (m_ui.layoutTransformation->indexOf(m_ui.containerResolution) != -1) {
452 m_ui.containerResolution->hide();
453 m_ui.containerFrequency->hide();
454 m_ui.labelResolution->hide();
455 m_ui.labelFrequency->hide();
456 m_ui.layoutTransformation->takeRow(m_ui.containerResolution);
457 m_ui.layoutTransformation->takeRow(m_ui.containerFrequency);
458 }
459
460 // Prevent adding the widgets if they are already in the layout
461 if (m_ui.layoutTransformation->indexOf(m_ui.containerSize) == -1) {
462 m_ui.layoutTransformation->insertRow(1, m_ui.labelSize, m_ui.containerSize);
463 m_ui.containerSize->show();
464 m_ui.labelSize->show();
465 }
466
468
469 m_ui.tabTransformation->setUpdatesEnabled(true);
470
472}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), and slot_setFrequencyFromSize().

◆ slot_buttonSizeModeResolutionBased_toggled

void KisScreentoneConfigWidget::slot_buttonSizeModeResolutionBased_toggled ( bool checked)
privateslot

Definition at line 412 of file KisScreentoneConfigWidget.cpp.

413{
414 if (!checked) {
415 return;
416 }
417
418 m_ui.tabTransformation->setUpdatesEnabled(false);
419
420 if (m_ui.layoutTransformation->indexOf(m_ui.containerSize) != -1) {
421 m_ui.containerSize->hide();
422 m_ui.labelSize->hide();
423 m_ui.layoutTransformation->takeRow(m_ui.containerSize);
424 }
425
426 // Prevent adding the widgets if they are already in the layout
427 if (m_ui.layoutTransformation->indexOf(m_ui.containerResolution) == -1) {
428 m_ui.layoutTransformation->insertRow(1, m_ui.labelResolution, m_ui.containerResolution);
429 m_ui.layoutTransformation->insertRow(2, m_ui.labelFrequency, m_ui.containerFrequency);
430 m_ui.containerResolution->show();
431 m_ui.containerFrequency->show();
432 m_ui.labelResolution->show();
433 m_ui.labelFrequency->show();
434 }
435
437
438 m_ui.tabTransformation->setUpdatesEnabled(true);
439
441}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), and slot_setSizeFromFrequency().

◆ slot_comboBoxPattern_currentIndexChanged

void KisScreentoneConfigWidget::slot_comboBoxPattern_currentIndexChanged ( int )
privateslot

◆ slot_comboBoxShape_currentIndexChanged

void KisScreentoneConfigWidget::slot_comboBoxShape_currentIndexChanged ( int )
privateslot

Definition at line 405 of file KisScreentoneConfigWidget.cpp.

406{
407 KisSignalsBlocker blocker(m_ui.comboBoxInterpolation);
410}

References m_ui, setupInterpolationComboBox(), and KisConfigWidget::sigConfigurationItemChanged().

◆ slot_comboBoxUnits_currentIndexChanged

void KisScreentoneConfigWidget::slot_comboBoxUnits_currentIndexChanged ( int index)
privateslot

Definition at line 474 of file KisScreentoneConfigWidget.cpp.

475{
476 const QString resSuffix =
477 index == 0
478 ? i18nc("Screentone generator resolution units - pixels/inch", " pixels/inch")
479 : i18nc("Screentone generator resolution units - pixels/cm", " pixels/cm");
480 const QString freqSuffix =
481 index == 0
482 ? i18nc("Screentone generator line units - lines/inch", " lines/inch")
483 : i18nc("Screentone generator line units - lines/cm", " lines/cm");
484 m_ui.sliderResolution->setSuffix(resSuffix);
485 m_ui.sliderFrequencyX->setSuffix(freqSuffix);
486 m_ui.sliderFrequencyY->setSuffix(freqSuffix);
487 {
488 KisSignalsBlocker blocker(m_ui.sliderResolution, m_ui.sliderFrequencyX, m_ui.sliderFrequencyY);
489 const KoUnit unitFrom = index == 1 ? KoUnit(KoUnit::Centimeter) : KoUnit(KoUnit::Inch);
490 const KoUnit unitTo = index == 1 ? KoUnit(KoUnit::Inch) : KoUnit(KoUnit::Centimeter);
491 m_ui.sliderResolution->setValue(
493 m_ui.sliderResolution->value(), unitFrom, unitTo)
494 );
495 m_ui.sliderFrequencyX->setValue(
496 KoUnit::convertFromUnitToUnit(m_ui.sliderFrequencyX->value(), unitFrom, unitTo)
497 );
498 m_ui.sliderFrequencyY->setValue(
499 KoUnit::convertFromUnitToUnit(m_ui.sliderFrequencyY->value(), unitFrom, unitTo)
500 );
501 }
503}

References KoUnit::Centimeter, KoUnit::convertFromUnitToUnit(), KoUnit::Inch, m_ui, and KisConfigWidget::sigConfigurationItemChanged().

◆ slot_setFrequencyFromSize

void KisScreentoneConfigWidget::slot_setFrequencyFromSize ( )
privateslot

Definition at line 619 of file KisScreentoneConfigWidget.cpp.

620{
621 KisSignalsBlocker blocker(m_ui.sliderFrequencyX, m_ui.sliderFrequencyY, m_ui.buttonConstrainFrequency);
622 m_ui.sliderFrequencyX->setValue(m_ui.sliderResolution->value() / m_ui.sliderSizeX->value());
623 m_ui.sliderFrequencyY->setValue(m_ui.sliderResolution->value() / m_ui.sliderSizeY->value());
624 m_ui.buttonConstrainFrequency->setKeepAspectRatio(m_ui.buttonConstrainSize->keepAspectRatio());
625}

References m_ui.

◆ slot_setFrequencySlidersRanges

void KisScreentoneConfigWidget::slot_setFrequencySlidersRanges ( )
privateslot

Definition at line 600 of file KisScreentoneConfigWidget.cpp.

601{
602 KisSignalsBlocker blocker(m_ui.sliderFrequencyX, m_ui.sliderFrequencyY);
603 const qreal minimumFrequency = m_ui.sliderResolution->value() / maximumCellSize;
604 const qreal maximumFrequency = m_ui.sliderResolution->value() / minimumCellSize;
605 m_ui.sliderFrequencyX->setRange(minimumFrequency, maximumFrequency, 2);
606 m_ui.sliderFrequencyX->setSoftRange(qMax(minimumFrequency, 1.0), qMin(maximumFrequency, 100.0));
607 m_ui.sliderFrequencyY->setRange(minimumFrequency, maximumFrequency, 2);
608 m_ui.sliderFrequencyY->setSoftRange(qMax(minimumFrequency, 1.0), qMin(maximumFrequency, 100.0));
609}
static constexpr qreal maximumCellSize
static constexpr qreal minimumCellSize

References m_ui, maximumCellSize, and minimumCellSize.

◆ slot_setSizeFromFrequency

void KisScreentoneConfigWidget::slot_setSizeFromFrequency ( )
privateslot

Definition at line 611 of file KisScreentoneConfigWidget.cpp.

612{
613 KisSignalsBlocker blocker(m_ui.sliderSizeX, m_ui.sliderSizeY, m_ui.buttonConstrainSize);
614 m_ui.sliderSizeX->setValue(m_ui.sliderResolution->value() / m_ui.sliderFrequencyX->value());
615 m_ui.sliderSizeY->setValue(m_ui.sliderResolution->value() / m_ui.sliderFrequencyY->value());
616 m_ui.buttonConstrainSize->setKeepAspectRatio(m_ui.buttonConstrainFrequency->keepAspectRatio());
617}

References m_ui.

◆ slot_sliderAlignToPixelGridX_valueChanged

void KisScreentoneConfigWidget::slot_sliderAlignToPixelGridX_valueChanged ( int value)
privateslot

Definition at line 584 of file KisScreentoneConfigWidget.cpp.

585{
586 Q_UNUSED(value);
587 if (m_ui.checkBoxAlignToPixelGrid->isChecked()) {
589 }
590}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), and value().

◆ slot_sliderAlignToPixelGridY_valueChanged

void KisScreentoneConfigWidget::slot_sliderAlignToPixelGridY_valueChanged ( int value)
privateslot

Definition at line 592 of file KisScreentoneConfigWidget.cpp.

593{
594 Q_UNUSED(value);
595 if (m_ui.checkBoxAlignToPixelGrid->isChecked()) {
597 }
598}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), and value().

◆ slot_sliderFrequencyX_valueChanged

void KisScreentoneConfigWidget::slot_sliderFrequencyX_valueChanged ( qreal value)
privateslot

Definition at line 528 of file KisScreentoneConfigWidget.cpp.

529{
530 if (m_ui.buttonConstrainFrequency->keepAspectRatio()) {
531 KisSignalsBlocker blocker(m_ui.sliderFrequencyY);
532 m_ui.sliderFrequencyY->setValue(value);
533 }
536}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), slot_setSizeFromFrequency(), and value().

◆ slot_sliderFrequencyY_valueChanged

void KisScreentoneConfigWidget::slot_sliderFrequencyY_valueChanged ( qreal value)
privateslot

Definition at line 538 of file KisScreentoneConfigWidget.cpp.

539{
540 if (m_ui.buttonConstrainFrequency->keepAspectRatio()) {
541 KisSignalsBlocker blocker(m_ui.sliderFrequencyX);
542 m_ui.sliderFrequencyX->setValue(value);
543 }
546}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), slot_setSizeFromFrequency(), and value().

◆ slot_sliderResolution_valueChanged

void KisScreentoneConfigWidget::slot_sliderResolution_valueChanged ( qreal value)
privateslot

◆ slot_sliderSizeX_valueChanged

void KisScreentoneConfigWidget::slot_sliderSizeX_valueChanged ( qreal value)
privateslot

Definition at line 556 of file KisScreentoneConfigWidget.cpp.

557{
558 if (m_ui.buttonConstrainSize->keepAspectRatio()) {
559 KisSignalsBlocker blocker(m_ui.sliderSizeY);
560 m_ui.sliderSizeY->setValue(value);
561 }
564}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), slot_setFrequencyFromSize(), and value().

◆ slot_sliderSizeY_valueChanged

void KisScreentoneConfigWidget::slot_sliderSizeY_valueChanged ( qreal value)
privateslot

Definition at line 566 of file KisScreentoneConfigWidget.cpp.

567{
568 if (m_ui.buttonConstrainSize->keepAspectRatio()) {
569 KisSignalsBlocker blocker(m_ui.sliderSizeX);
570 m_ui.sliderSizeX->setValue(value);
571 }
574}

References m_ui, KisConfigWidget::sigConfigurationItemChanged(), slot_setFrequencyFromSize(), and value().

Member Data Documentation

◆ m_colorSpace

const KoColorSpace* KisScreentoneConfigWidget::m_colorSpace
private

Definition at line 39 of file KisScreentoneConfigWidget.h.

◆ m_lastSelectedInterpolationText

QString KisScreentoneConfigWidget::m_lastSelectedInterpolationText
private

Definition at line 40 of file KisScreentoneConfigWidget.h.

◆ m_ui

Ui_ScreentoneConfigWidget KisScreentoneConfigWidget::m_ui
private

Definition at line 37 of file KisScreentoneConfigWidget.h.

◆ m_view

KisViewManager* KisScreentoneConfigWidget::m_view
private

Definition at line 38 of file KisScreentoneConfigWidget.h.

◆ maximumCellSize

constexpr qreal KisScreentoneConfigWidget::maximumCellSize {1000.0}
staticconstexprprivate

Definition at line 35 of file KisScreentoneConfigWidget.h.

35{1000.0};

◆ minimumCellSize

constexpr qreal KisScreentoneConfigWidget::minimumCellSize {1.0}
staticconstexprprivate

Definition at line 34 of file KisScreentoneConfigWidget.h.

34{1.0};

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