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

#include <KisPropagateColorsConfigWidget.h>

+ Inheritance diagram for KisPropagateColorsConfigWidget:

Classes

class  Private
 

Public Member Functions

KisPropertiesConfigurationSP configuration () const override
 
 KisPropagateColorsConfigWidget (QWidget *parent)
 
void setConfiguration (const KisPropertiesConfigurationSP config) override
 
 ~KisPropagateColorsConfigWidget () override
 
- Public Member Functions inherited from KisConfigWidget
virtual KoCanvasResourcesInterfaceSP canvasResourcesInterface () const
 
virtual void setCanvasResourcesInterface (KoCanvasResourcesInterfaceSP canvasResourcesInterface)
 
virtual void setView (KisViewManager *view)
 
 ~KisConfigWidget () override
 

Private Attributes

QScopedPointer< Privatem_d
 

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 16 of file KisPropagateColorsConfigWidget.h.

Constructor & Destructor Documentation

◆ KisPropagateColorsConfigWidget()

KisPropagateColorsConfigWidget::KisPropagateColorsConfigWidget ( QWidget * parent)

Definition at line 42 of file KisPropagateColorsConfigWidget.cpp.

43 : KisConfigWidget(parent)
44 , m_d(new Private)
45{
46 // Create widgets
47 KisOptionButtonStrip *optionButtonStripDistanceMetric = new KisOptionButtonStrip;
48 m_d->buttonDistanceMetricChessboard = optionButtonStripDistanceMetric->addButton(
49 i18nc("Expansion pattern button in propagate colors filter", "Rectangle")
50 );
51 m_d->buttonDistanceMetricCityBlock = optionButtonStripDistanceMetric->addButton(
52 i18nc("Expansion pattern button in propagate colors filter", "Diamond")
53 );
54 m_d->buttonDistanceMetricEuclidean = optionButtonStripDistanceMetric->addButton(
55 i18nc("Expansion pattern button in propagate colors filter", "Octagon")
56 );
57 m_d->buttonDistanceMetricEuclidean->setChecked(true);
58
59 KisOptionButtonStrip *optionButtonStripExpansionMode = new KisOptionButtonStrip;
60 m_d->buttonExpansionModeUnbounded = optionButtonStripExpansionMode->addButton(
61 i18nc("Expansion distance button in propagate colors filter", "Unrestricted")
62 );
63 m_d->buttonExpansionModeBounded = optionButtonStripExpansionMode->addButton(
64 i18nc("Expansion distance button in propagate colors filter", "Restricted")
65 );
66 m_d->buttonExpansionModeUnbounded->setChecked(true);
67
68 m_d->sliderExpansionAmount = new KisDoubleSliderSpinBox;
69 m_d->sliderExpansionAmount->setRange(0.0, 500.0, 2);
70 m_d->sliderExpansionAmount->setSoftMaximum(50.0);
71 m_d->sliderExpansionAmount->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
73 m_d->sliderExpansionAmount,
74 i18nc("The 'maximum distance' slider in propagate colors filter; {n} is the number value, px is the pixels suffix",
75 "Maximum Distance: {n}px")
76 );
77
78 KisOptionButtonStrip *optionButtonStripAlphaChannelMode = new KisOptionButtonStrip;
79 m_d->buttonAlphaChannelModeExpand = optionButtonStripAlphaChannelMode->addButton(
80 i18nc("Transparency behavior button in propagate colors filter", "Expand")
81 );
82 m_d->buttonAlphaChannelModePreserve = optionButtonStripAlphaChannelMode->addButton(
83 i18nc("Transparency behavior button in propagate colors filter", "Preserve")
84 );
85 m_d->buttonAlphaChannelModeExpand->setChecked(true);
86
87 // Set tooltips
88 m_d->buttonDistanceMetricChessboard->setToolTip(i18n("Expand the colors in a rectangular-like way"));
89 m_d->buttonDistanceMetricCityBlock->setToolTip(i18n("Expand the colors in a diamond-like way"));
90 m_d->buttonDistanceMetricEuclidean->setToolTip(i18n("Expand the colors in a octagonal-like way"));
91
92 m_d->buttonExpansionModeUnbounded->setToolTip(i18n("Expand the colors all the way until all transparent regions are filled"));
93 m_d->buttonExpansionModeBounded->setToolTip(i18n("Expand the colors only until a specific distance"));
94 m_d->sliderExpansionAmount->setToolTip(i18n("Specify the maximum distance to expand when the restricted mode is active"));
95
96 m_d->buttonAlphaChannelModeExpand->setToolTip(i18n("Expand the alpha channel as well as the color"));
97 m_d->buttonAlphaChannelModePreserve->setToolTip(i18n("Expand only the color, leaving the alpha channel untouched"));
98
99 // Construct the option widget
100 m_d->optionWidget = new KisOptionCollectionWidget;
101 m_d->optionWidget->setWidgetsMargin(0);
102
103 KisOptionCollectionWidgetWithHeader *sectionDistanceMetric =
105 i18nc("The 'distance metric' section label in propagate colors filter dialog", "Expansion Pattern")
106 );
107 sectionDistanceMetric->setWidgetsMargin(20);
108 sectionDistanceMetric->appendWidget("optionButtonStripDistanceMetric", optionButtonStripDistanceMetric);
109 m_d->optionWidget->appendWidget("sectionDistanceMetric", sectionDistanceMetric);
110
111 QWidget *separator1 = new QWidget;
112 separator1->setFixedHeight(5);
113 m_d->optionWidget->appendWidget("separator1", separator1);
114
115 KisOptionCollectionWidgetWithHeader *sectionExpansionMode =
117 i18nc("The 'expansion mode' section label in propagate colors filter dialog", "Expansion Distance")
118 );
119 sectionExpansionMode->setWidgetsMargin(20);
120 sectionExpansionMode->appendWidget("optionButtonStripExpansionMode", optionButtonStripExpansionMode);
121 sectionExpansionMode->appendWidget("sliderExpansionAmount", m_d->sliderExpansionAmount);
122 m_d->optionWidget->appendWidget("sectionExpansionMode", sectionExpansionMode);
123
124 QWidget *separator2 = new QWidget;
125 separator2->setFixedHeight(5);
126 m_d->optionWidget->appendWidget("separator2", separator2);
127
128 KisOptionCollectionWidgetWithHeader *sectionAlphaChannelMode =
130 i18nc("The 'transparency behavior' section label in propagate colors filter dialog", "Transparency Behavior")
131 );
132 sectionAlphaChannelMode->setWidgetsMargin(20);
133 sectionAlphaChannelMode->appendWidget("optionButtonStripAlphaChannelMode", optionButtonStripAlphaChannelMode);
134 m_d->optionWidget->appendWidget("sectionAlphaChannelMode", sectionAlphaChannelMode);
135
136 QVBoxLayout *layoutMain = new QVBoxLayout;
137 layoutMain->setContentsMargins(0, 0, 0, 0);
138 layoutMain->setSpacing(0);
139 layoutMain->addWidget(m_d->optionWidget, 0);
140 layoutMain->addStretch(1);
141
142 setLayout(layoutMain);
143
144 connect(optionButtonStripDistanceMetric,
145 QOverload<int, bool>::of(&KisOptionButtonStrip::buttonToggled),
146 this,
147 [this](int, bool c){ if (c) { Q_EMIT sigConfigurationItemChanged(); } });
148 connect(optionButtonStripExpansionMode,
149 QOverload<int, bool>::of(&KisOptionButtonStrip::buttonToggled),
150 this,
151 [this](int, bool c){ if (c) { Q_EMIT sigConfigurationItemChanged(); } });
152 connect(m_d->sliderExpansionAmount, SIGNAL(valueChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
153 connect(optionButtonStripAlphaChannelMode,
154 QOverload<int, bool>::of(&KisOptionButtonStrip::buttonToggled),
155 this,
156 [this](int, bool c){ if (c) { Q_EMIT sigConfigurationItemChanged(); } });
157}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void sigConfigurationItemChanged()
KisConfigWidget(QWidget *parent=0, Qt::WindowFlags f=Qt::WindowFlags(), int delay=200)
This class is a spinbox in which you can click and drag to set the value. A slider like bar is displa...
void setRange(qreal newMinimum, qreal newMaximum, int newNumberOfDecimals=0, bool computeNewFastSliderStep=true)
Set the minimum and the maximum values of the range.
Provides a list of consecutive tool buttons.
void buttonToggled(KoGroupButton *button, bool checked)
KoGroupButton * addButton(const QIcon &icon, const QString &text=QString())
Wrapper class around a KisOptionCollectionWidget that also provide a header with a title label and an...
void appendWidget(const QString &id, QWidget *widget)
Insert the given widget with the given id at the end of the list. The list widget takes ownership of ...
void setWidgetsMargin(int margin)
Set the margins of the widgets. This allows to indent the widgets with respect to the separators....
Class providing a list of widgets with some addons such as separators, orientation or individual widg...
void setWidgetsMargin(int margin)
Set the margins of the widgets. This allows to indent the widgets with respect to the separators....
void setText(QSpinBox *spinBox, const QStringView textTemplate)

References KisOptionButtonStrip::addButton(), KisOptionCollectionWidgetWithHeader::appendWidget(), KisOptionButtonStrip::buttonToggled(), connect(), m_d, KisDoubleSliderSpinBox::setRange(), KisSpinBoxI18nHelper::setText(), KisOptionCollectionWidget::setWidgetsMargin(), KisOptionCollectionWidgetWithHeader::setWidgetsMargin(), and KisConfigWidget::sigConfigurationItemChanged().

◆ ~KisPropagateColorsConfigWidget()

KisPropagateColorsConfigWidget::~KisPropagateColorsConfigWidget ( )
override

Definition at line 159 of file KisPropagateColorsConfigWidget.cpp.

160{}

Member Function Documentation

◆ configuration()

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

Implements KisConfigWidget.

Definition at line 207 of file KisPropagateColorsConfigWidget.cpp.

208{
211
212 config->setDistanceMetric(
213 m_d->buttonDistanceMetricChessboard->isChecked()
215 : m_d->buttonDistanceMetricCityBlock->isChecked()
216 ? KisPropagateColorsFilterConfiguration::DistanceMetric_CityBlock
217 : KisPropagateColorsFilterConfiguration::DistanceMetric_Euclidean
218 );
219
220 config->setExpansionMode(
221 m_d->buttonExpansionModeBounded->isChecked()
223 : KisPropagateColorsFilterConfiguration::ExpansionMode_Unbounded
224 );
225
226 config->setExpansionAmount(m_d->sliderExpansionAmount->value());
227
228 config->setAlphaChannelMode(
229 m_d->buttonAlphaChannelModePreserve->isChecked()
231 : KisPropagateColorsFilterConfiguration::AlphaChannelMode_Expand
232 );
233
234 return config;
235}
static KisResourcesInterfaceSP instance()
void setAlphaChannelMode(AlphaChannelMode newAlphaChannelMode)
void setDistanceMetric(DistanceMetric newDistanceMetric)

References KisPropagateColorsFilterConfiguration::AlphaChannelMode_Expand, KisPropagateColorsFilterConfiguration::AlphaChannelMode_Preserve, KisPropagateColorsFilterConfiguration::DistanceMetric_Chessboard, KisPropagateColorsFilterConfiguration::DistanceMetric_CityBlock, KisPropagateColorsFilterConfiguration::DistanceMetric_Euclidean, KisPropagateColorsFilterConfiguration::ExpansionMode_Bounded, KisPropagateColorsFilterConfiguration::ExpansionMode_Unbounded, KisGlobalResourcesInterface::instance(), m_d, KisPropagateColorsFilterConfiguration::setAlphaChannelMode(), KisPropagateColorsFilterConfiguration::setDistanceMetric(), KisPropagateColorsFilterConfiguration::setExpansionAmount(), and KisPropagateColorsFilterConfiguration::setExpansionMode().

◆ setConfiguration()

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

Implements KisConfigWidget.

Definition at line 162 of file KisPropagateColorsConfigWidget.cpp.

163{
164 const KisPropagateColorsFilterConfiguration *filterConfig =
165 dynamic_cast<const KisPropagateColorsFilterConfiguration *>(config.data());
166 KIS_SAFE_ASSERT_RECOVER_RETURN(filterConfig);
167
168 {
169 KisSignalsBlocker blocker1(m_d->buttonDistanceMetricChessboard, m_d->buttonDistanceMetricCityBlock,
170 m_d->buttonDistanceMetricEuclidean, m_d->buttonExpansionModeBounded,
171 m_d->buttonExpansionModeUnbounded, m_d->sliderExpansionAmount);
172 KisSignalsBlocker blocker2(m_d->buttonAlphaChannelModePreserve, m_d->buttonAlphaChannelModeExpand);
173
175 filterConfig->distanceMetric();
177 filterConfig->expansionMode();
178 const qreal expansionAmount = filterConfig->expansionAmount();
180 filterConfig->alphaChannelMode();
181
183 m_d->buttonDistanceMetricChessboard->setChecked(true);
185 m_d->buttonDistanceMetricCityBlock->setChecked(true);
186 } else {
187 m_d->buttonDistanceMetricEuclidean->setChecked(true);
188 }
189
191 m_d->buttonExpansionModeBounded->setChecked(true);
192 } else {
193 m_d->buttonExpansionModeUnbounded->setChecked(true);
194 }
195 m_d->sliderExpansionAmount->setValue(expansionAmount);
196
198 m_d->buttonAlphaChannelModePreserve->setChecked(true);
199 } else {
200 m_d->buttonAlphaChannelModeExpand->setChecked(true);
201 }
202 }
203
205}
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128

References KisPropagateColorsFilterConfiguration::alphaChannelMode(), KisPropagateColorsFilterConfiguration::AlphaChannelMode_Preserve, KisSharedPtr< T >::data(), KisPropagateColorsFilterConfiguration::distanceMetric(), KisPropagateColorsFilterConfiguration::DistanceMetric_Chessboard, KisPropagateColorsFilterConfiguration::DistanceMetric_CityBlock, KisPropagateColorsFilterConfiguration::expansionAmount(), KisPropagateColorsFilterConfiguration::expansionMode(), KisPropagateColorsFilterConfiguration::ExpansionMode_Bounded, KIS_SAFE_ASSERT_RECOVER_RETURN, m_d, and KisConfigWidget::sigConfigurationItemChanged().

Member Data Documentation

◆ m_d

QScopedPointer<Private> KisPropagateColorsConfigWidget::m_d
private

Definition at line 28 of file KisPropagateColorsConfigWidget.h.


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