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

#include <kis_auto_brush_widget.h>

+ Inheritance diagram for KisAutoBrushWidget:

Classes

struct  Private
 

Public Member Functions

KisBrushSP brush ()
 
 KisAutoBrushWidget (int maxBrushSize, KisAutoBrushModel *model, QWidget *parent, const char *name)
 
 ~KisAutoBrushWidget () override
 
- Public Member Functions inherited from KisWdgAutoBrush
 KisWdgAutoBrush (QWidget *parent, const char *name)
 

Protected Member Functions

void resizeEvent (QResizeEvent *) override
 

Private Slots

void setStackedWidget (int)
 
void slotCurvePropertyChanged (const QString &value)
 
void slotCurveWidgetChanged ()
 
void slotUpdateBrushPreview ()
 

Private Attributes

const QScopedPointer< Privatem_d
 
QScopedPointer< KisAspectRatioLockerm_fadeAspectLocker
 

Detailed Description

Definition at line 37 of file kis_auto_brush_widget.h.

Constructor & Destructor Documentation

◆ KisAutoBrushWidget()

KisAutoBrushWidget::KisAutoBrushWidget ( int maxBrushSize,
KisAutoBrushModel * model,
QWidget * parent,
const char * name )

Definition at line 46 of file kis_auto_brush_widget.cpp.

49 : KisWdgAutoBrush(parent, name)
51 , m_d(new Private(model))
52
53{
54 connectControl(comboBoxShape, m_d->model, "shape");
55 connectControl(comboBoxMaskType, m_d->model, "type");
56
57 inputRadius->setRange(0.01, maxBrushSize, 2);
58 inputRadius->setExponentRatio(3.0);
59 inputRadius->setSingleStep(1);
60 inputRadius->setValue(5);
61 inputRadius->setSuffix(i18n(" px"));
62 inputRadius->setBlockUpdateSignalOnDrag(true);
63 connectControl(inputRadius, m_d->model, "diameter");
64
65 inputRatio->setRange(0.01, 1.0, 2);
66 inputRatio->setSingleStep(0.01);
67 inputRatio->setValue(1.0);
68 inputRatio->setBlockUpdateSignalOnDrag(true);
69 connectControl(inputRatio, m_d->model, "ratio");
70
71 inputHFade->setRange(0.0, 1.0, 2);
72 inputHFade->setSingleStep(0.01);
73 inputHFade->setValue(0.5);
74
75 inputVFade->setRange(0.0, 1.0, 2);
76 inputVFade->setSingleStep(0.01);
77 inputVFade->setValue(0.5);
78
79 aspectButton->setKeepAspectRatio(true);
80
81 m_fadeAspectLocker->connectSpinBoxes(inputHFade, inputVFade, aspectButton);
82 m_fadeAspectLocker->setBlockUpdateSignalOnDrag(false);
83
85 [this] () {
86 m_d->model->sethorizontalFade(inputHFade->value());
87 m_d->model->setverticalFade(inputVFade->value());
88 });
89
90 m_d->model->LAGER_QT(horizontalFade).bind([this] (qreal value) {
91 KisSignalsBlocker b(inputHFade);
92 inputHFade->setValue(value);
93 m_fadeAspectLocker->updateAspect();
94 });
95
96 m_d->model->LAGER_QT(verticalFade).bind([this] (qreal value) {
97 KisSignalsBlocker b(inputVFade);
98 inputVFade->setValue(value);
99 m_fadeAspectLocker->updateAspect();
100 });
101
102 inputSpikes->setRange(2, 20);
103 inputSpikes->setValue(2);
104 inputSpikes->setBlockUpdateSignalOnDrag(true);
105 connectControl(inputSpikes, m_d->model, "spikes");
106
107 inputRandomness->setRange(0, 100);
108 inputRandomness->setValue(0);
109 inputRandomness->setBlockUpdateSignalOnDrag(true);
110 connectControl(inputRandomness, m_d->model, "randomness");
111
112 inputAngle->setDecimals(0);
113 connectControl(inputAngle, m_d->model, "angle");
114 connectControl(spacingWidget, m_d->model, "aggregatedSpacing");
115
116 density->setRange(0, 100, 0);
117 density->setSingleStep(1);
118 density->setValue(100);
119 KisSpinBoxI18nHelper::setText(density, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
120 density->setBlockUpdateSignalOnDrag(true);
121 connectControl(density, m_d->model, "density");
122
124 connect(m_d->model, &KisAutoBrushModel::curveStringChanged, this, &KisAutoBrushWidget::slotCurvePropertyChanged);
125 m_d->model->LAGER_QT(curveString).nudge();
126
128 for (int i = 0; i < ids.size(); i++) {
129 comboBoxMaskType->insertItem(i, ids[i].name());
130 }
131
132 connect(m_d->model, &KisAutoBrushModel::typeChanged, this, &KisAutoBrushWidget::setStackedWidget);
133 setStackedWidget(m_d->model->type());
134
135 brushPreview->setIconSize(QSize(100, 100));
136
137 connectControl(btnAntialiasing, m_d->model, "antialiasEdges");
138
139 lager::watch(m_d->model->m_commonData, std::bind(&KisSignalCompressor::start, &m_d->previewCompressor));
140 lager::watch(m_d->model->m_autoBrushData, std::bind(&KisSignalCompressor::start, &m_d->previewCompressor));
141 lager::watch(m_d->model->m_commonBrushSizeData, std::bind(&KisSignalCompressor::start, &m_d->previewCompressor));
142
144
146}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
QScopedPointer< KisAspectRatioLocker > m_fadeAspectLocker
const QScopedPointer< Private > m_d
void slotCurvePropertyChanged(const QString &value)
void modified(void)
static QList< KoID > maskGeneratorIds()
KisWdgAutoBrush(QWidget *parent, const char *name)
const char * name(StandardAction id)
void setText(QSpinBox *spinBox, const QStringView textTemplate)
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)

References connect(), KisWidgetConnectionUtils::connectControl(), m_d, m_fadeAspectLocker, KisMaskGenerator::maskGeneratorIds(), KisCurveWidget::modified(), setStackedWidget(), KisSpinBoxI18nHelper::setText(), KisAspectRatioLocker::sliderValueChanged(), slotCurvePropertyChanged(), slotCurveWidgetChanged(), slotUpdateBrushPreview(), KisSignalCompressor::start(), KisSignalCompressor::timeout(), and value().

◆ ~KisAutoBrushWidget()

KisAutoBrushWidget::~KisAutoBrushWidget ( )
override

Definition at line 148 of file kis_auto_brush_widget.cpp.

149{
150}

Member Function Documentation

◆ brush()

KisBrushSP KisAutoBrushWidget::brush ( )

Definition at line 217 of file kis_auto_brush_widget.cpp.

218{
219 KisAutoBrushFactory factory;
220
222 factory.createBrush(*m_d->model->m_commonData,
223 m_d->model->bakedOptionData(),
226
227 return brush;
228}
KoResourceLoadResult createBrush(const QDomElement &brushDefinition, KisResourcesInterfaceSP resourcesInterface) override
static KisResourcesInterfaceSP instance()
KoResourceSP resource() const noexcept

References brush(), KisAutoBrushFactory::createBrush(), KisGlobalResourcesInterface::instance(), m_d, and KoResourceLoadResult::resource().

◆ resizeEvent()

void KisAutoBrushWidget::resizeEvent ( QResizeEvent * )
overrideprotected

Definition at line 152 of file kis_auto_brush_widget.cpp.

153{
154 brushPreview->setMinimumHeight(brushPreview->width()); // dirty hack !
155 brushPreview->setMaximumHeight(brushPreview->width()); // dirty hack !
156}

◆ setStackedWidget

void KisAutoBrushWidget::setStackedWidget ( int index)
privateslot

Definition at line 158 of file kis_auto_brush_widget.cpp.

159{
160 if (index == 1) {
161 stackedWidget->setCurrentIndex(1);
162 }
163 else {
164 stackedWidget->setCurrentIndex(0);
165 }
166}

◆ slotCurvePropertyChanged

void KisAutoBrushWidget::slotCurvePropertyChanged ( const QString & value)
privateslot

Definition at line 173 of file kis_auto_brush_widget.cpp.

174{
175 KisCubicCurve curve;
176
177 if (!value.isEmpty()) {
178 curve = KisCubicCurve(value);
179 } else {
180 curve.setPointPosition(0, QPointF(0.0, 1.0));
181 curve.setPointPosition(1, QPointF(1.0, 0.0));
182 }
183
184 KisSignalsBlocker b(softnessCurve);
185 softnessCurve->setCurve(curve);
186}
void setPointPosition(int idx, const QPointF &position)

References KisCubicCurve::setPointPosition(), and value().

◆ slotCurveWidgetChanged

void KisAutoBrushWidget::slotCurveWidgetChanged ( )
privateslot

Definition at line 168 of file kis_auto_brush_widget.cpp.

169{
170 m_d->model->setcurveString(softnessCurve->curve().toString());
171}

References m_d.

◆ slotUpdateBrushPreview

void KisAutoBrushWidget::slotUpdateBrushPreview ( )
privateslot

Definition at line 188 of file kis_auto_brush_widget.cpp.

189{
190 KisAutoBrushFactory factory;
191
193 factory.createBrush(*m_d->model->m_commonData,
194 m_d->model->bakedOptionData(),
197
198 QImage pi(brush->image());
199
200 double coeff = 1.0;
201 int bPw = brushPreview->width() - 3;
202 if (pi.width() > bPw) {
203 coeff = bPw / (double)pi.width();
204 }
205 int bPh = brushPreview->height() - 3;
206 if (pi.height() > coeff * bPh) {
207 coeff = bPh / (double)pi.height();
208 }
209 if (coeff < 1.0) {
210 pi = pi.scaled((int)(coeff * pi.width()) , (int)(coeff * pi.height()), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
211 }
212
213 QPixmap p = QPixmap::fromImage(pi);
214 brushPreview->setIcon(QIcon(p));
215}
const Params2D p

References brush(), KisAutoBrushFactory::createBrush(), KisGlobalResourcesInterface::instance(), m_d, p, and KoResourceLoadResult::resource().

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisAutoBrushWidget::m_d
private

Definition at line 65 of file kis_auto_brush_widget.h.

◆ m_fadeAspectLocker

QScopedPointer<KisAspectRatioLocker> KisAutoBrushWidget::m_fadeAspectLocker
private

Definition at line 62 of file kis_auto_brush_widget.h.


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