Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_deform_paintop_settings.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2008, 2009, 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
10
12
13#include "KisDeformOptionData.h"
14
19
27
31
33{
35 option.read(this);
36 option.brushDiameter = value;
37 option.write(this);
38}
39
41{
43 option.read(this);
44 return option.brushDiameter;
45}
46
48{
49 Q_UNUSED(value);
50}
51
53{
54 return 0.0;
55}
56
58{
59 return true;
60}
61
63{
64 // version 2.3
67 }
68 else {
69 return getBool("Deform/useMovementPaint");
70 }
71}
72
74{
76 if (mode.isVisible) {
77 qreal width = getInt("Brush/diameter");
78 qreal height = getInt("Brush/diameter") * getDouble("Brush/aspect");
79 path = ellipseOutline(width, height, getDouble("Brush/scale"), -getDouble("Brush/rotation"));
80
81 path = outlineFetcher()->fetchOutline(info, this, path, mode, alignForZoom);
82
83 if (mode.showTiltDecoration) {
84 QPainterPath tiltLine = makeTiltIndicator(info, QPointF(0.0, 0.0), width * 0.5, 3.0);
85 path.addPath(outlineFetcher()->fetchOutline(info, this, tiltLine, mode, alignForZoom, 1.0, 0.0, true, 0, 0));
86 }
87 }
88 return path;
89}
90
91
94#include "kis_paintop_preset.h"
97
98
100{
102 listWeakToStrong(m_d->uniformProperties);
103
104 if (props.isEmpty()) {
105 {
107 new KisDoubleSliderBasedPaintOpPropertyCallback(KisDoubleSliderBasedPaintOpPropertyCallback::Double,
108 KoID("deform_amount", i18n("Amount")),
109 settings,
110 0);
111
112 prop->setRange(0.01, 1.0);
113 prop->setSingleStep(0.01);
114 prop->setDecimals(2);
115
116 prop->setReadCallback(
117 [](KisUniformPaintOpProperty *prop) {
118 KisDeformOptionData option;
119 option.read(prop->settings().data());
120 prop->setValue(option.deformAmount);
121 });
122 prop->setWriteCallback(
123 [](KisUniformPaintOpProperty *prop) {
124 KisDeformOptionData option;
125 option.read(prop->settings().data());
126 option.deformAmount = prop->value().toReal();
127 option.write(prop->settings().data());
128 });
129
130 QObject::connect(updateProxy, SIGNAL(sigSettingsChanged()), prop, SLOT(requestReadValue()));
131 prop->requestReadValue();
132 props << toQShared(prop);
133 }
134
135 {
136 KisComboBasedPaintOpPropertyCallback *prop = new KisComboBasedPaintOpPropertyCallback(KoID("deform_mode", i18n("Deform Mode")), settings, 0);
137
138 QList<QString> modes;
139 modes << i18nc("Grow as in deform brush engine", "Grow");
140 modes << i18nc("Shrink as in deform brush engine", "Shrink");
141 modes << i18n("Swirl CW");
142 modes << i18n("Swirl CCW");
143 modes << i18n("Move");
144 modes << i18n("Lens Zoom In");
145 modes << i18n("Lens Zoom Out");
146 modes << i18nc("Rearrange the positions of the pixels under the cursor", "Color Deformation");
147
148 prop->setItems(modes);
149
150 prop->setReadCallback(
151 [](KisUniformPaintOpProperty *prop) {
152 KisDeformOptionData option;
153 option.read(prop->settings().data());
154 prop->setValue(int(option.deformAction) - 1); // DeformModes start at 1, combobox indices start at 0
155 });
156 prop->setWriteCallback(
157 [](KisUniformPaintOpProperty *prop) {
158 KisDeformOptionData option;
159 option.read(prop->settings().data());
160 option.deformAction = (DeformModes)(prop->value().toInt() + 1); // Combobox indices start at 0, DeformModes start at 1
161 option.write(prop->settings().data());
162 });
163
164 QObject::connect(updateProxy, SIGNAL(sigSettingsChanged()), prop, SLOT(requestReadValue()));
165 prop->requestReadValue();
166 props << toQShared(prop);
167 }
168
169
170 {
172 new KisIntSliderBasedPaintOpPropertyCallback(KisIntSliderBasedPaintOpPropertyCallback::Int,
173 KisIntSliderBasedPaintOpPropertyCallback::SubType_Angle,
174 KoID("deform_angle", i18n("Angle")),
175 settings,
176 0);
177
178 const QString degree(QStringLiteral("°"));
179 prop->setRange(0, 360);
180 prop->setSingleStep(1);
181 prop->setSuffix(degree);
182
183 prop->setReadCallback(
184 [](KisUniformPaintOpProperty *prop) {
186 option.read(prop->settings().data());
187
188 prop->setValue(int(option.brushRotation));
189 });
190 prop->setWriteCallback(
191 [](KisUniformPaintOpProperty *prop) {
193 option.read(prop->settings().data());
194 option.brushRotation = prop->value().toInt();
195 option.write(prop->settings().data());
196 });
197
198 QObject::connect(updateProxy, SIGNAL(sigSettingsChanged()), prop, SLOT(requestReadValue()));
199 prop->requestReadValue();
200 props << toQShared(prop);
201 }
202 }
203
204 {
206
207 Q_FOREACH (KisUniformPaintOpPropertySP prop, KisPaintOpSettings::uniformProperties(settings, updateProxy)) {
208 if (prop->id() == opacity.id() ||
209 prop->id() == size.id()) {
210 props.prepend(prop);
211 }
212 }
213 }
214
215 return props;
216}
float value(const T *src, size_t ch)
KisOptimizedBrushOutline fetchOutline(const KisPaintInformation &info, const KisPaintOpSettingsSP settings, const KisOptimizedBrushOutline &originalOutline, const KisPaintOpSettings::OutlineMode &mode, qreal alignForZoom, qreal additionalScale=1.0, qreal additionalRotation=0.0, bool tilt=false, qreal tiltcenterx=1.0, qreal tiltcentery=1.0) const
void setPaintOpSize(qreal value) override
void setPaintOpAngle(qreal value) override
KisDeformPaintOpSettings(KisResourcesInterfaceSP resourcesInterface)
const QScopedPointer< Private > m_d
KisOptimizedBrushOutline brushOutline(const KisPaintInformation &info, const OutlineMode &mode, qreal alignForZoom) override
const KisCurrentOutlineFetcher * outlineFetcher() const
Definition KoID.h:30
KisCallbackBasedPaintopProperty< KisComboBasedPaintOpProperty > KisComboBasedPaintOpPropertyCallback
const QString AIRBRUSH_ENABLED
QSharedPointer< T > toQShared(T *ptr)
Container< QSharedPointer< T > > listWeakToStrong(const Container< QWeakPointer< T > > &container, bool allOrNothing=true)
KisCallbackBasedPaintopProperty< KisSliderBasedPaintOpProperty< int > > KisIntSliderBasedPaintOpPropertyCallback
KisCallbackBasedPaintopProperty< KisSliderBasedPaintOpProperty< qreal > > KisDoubleSliderBasedPaintOpPropertyCallback
void write(KisPropertiesConfiguration *setting) const
bool read(const KisPropertiesConfiguration *setting)
bool read(const KisPropertiesConfiguration *setting)
void write(KisPropertiesConfiguration *setting) const
QList< KisUniformPaintOpPropertyWSP > uniformProperties
static QPainterPath makeTiltIndicator(KisPaintInformation const &info, QPointF const &start, qreal lengthScale, qreal angle)
static KisOptimizedBrushOutline ellipseOutline(qreal width, qreal height, qreal scale, qreal rotation)
QList< KisUniformPaintOpPropertyWSP > uniformProperties
virtual bool hasProperty(const QString &name) const
bool getBool(const QString &name, bool def=false) const
int getInt(const QString &name, int def=0) const
double getDouble(const QString &name, double def=0.0) const