Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_spray_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
7#include <cmath>
8
10#include <KisColorOptionData.h>
11
16
21
22
30
34
36{
38 option.read(this);
39 option.diameter = value;
40 option.write(this);
41}
42
44{
45
47 option.read(this);
48
49 return option.diameter;
50}
51
53{
54 Q_UNUSED(value);
55}
56
58{
59 return 0.0;
60}
61
68
69
71{
73 if (mode.isVisible) {
74 qreal width = getInt(SPRAY_DIAMETER);
77
78 path = outlineFetcher()->fetchOutline(info, this, path, mode, alignForZoom);
79
80 if (mode.forceFullSize) {
81 QPainterPath tiltLine =
82 makeTiltIndicator(info, QPointF(0.0, 0.0), width * 0.5, 3.0);
83 path.addPath(outlineFetcher()->fetchOutline(info, this, tiltLine, mode, alignForZoom, 1.0, 0.0, true, 0, 0));
84 }
85 }
86 return path;
87}
88
90#include "kis_paintop_preset.h"
93
94
96{
98 listWeakToStrong(m_d->uniformProperties);
99
100 if (props.isEmpty()) {
101 {
103 new KisDoubleSliderBasedPaintOpPropertyCallback(KisDoubleSliderBasedPaintOpPropertyCallback::Double,
104 KoID("spacing", i18n("Spacing")),
105 settings,
106 0);
107
108 prop->setRange(0.01, 10);
109 prop->setSingleStep(0.01);
110 prop->setExponentRatio(3.0);
111
112 prop->setReadCallback(
113 [](KisUniformPaintOpProperty *prop) {
115 option.read(prop->settings().data());
116
117 prop->setValue(option.spacing);
118 });
119 prop->setWriteCallback(
120 [](KisUniformPaintOpProperty *prop) {
122 option.read(prop->settings().data());
123 option.spacing = prop->value().toReal();
124 option.write(prop->settings().data());
125 });
126
127 QObject::connect(updateProxy, SIGNAL(sigSettingsChanged()), prop, SLOT(requestReadValue()));
128 prop->requestReadValue();
129 props << toQShared(prop);
130 }
131 {
132 KisIntSliderBasedPaintOpPropertyCallback *prop = new KisIntSliderBasedPaintOpPropertyCallback(KisIntSliderBasedPaintOpPropertyCallback::Int,
133 KoID("spray_particlecount", i18n("Particle Count")),
134 settings,
135 0);
136
137 prop->setRange(0, 1000);
138 prop->setExponentRatio(3);
139
140 prop->setReadCallback(
141 [](KisUniformPaintOpProperty *prop) {
143 option.read(prop->settings().data());
144
145 prop->setValue(int(option.particleCount));
146 });
147 prop->setWriteCallback(
148 [](KisUniformPaintOpProperty *prop) {
150 option.read(prop->settings().data());
151 option.particleCount = prop->value().toInt();
152 option.write(prop->settings().data());
153 });
155 [](const KisUniformPaintOpProperty *prop) {
157 option.read(prop->settings().data());
158 return !option.useDensity;
159 });
160
161 QObject::connect(updateProxy, SIGNAL(sigSettingsChanged()), prop, SLOT(requestReadValue()));
162 prop->requestReadValue();
163 props << toQShared(prop);
164 }
165 {
167 new KisDoubleSliderBasedPaintOpPropertyCallback(KisDoubleSliderBasedPaintOpPropertyCallback::Double,
168 KoID("spray_density", i18n("Density")),
169 settings,
170 0);
171
172 prop->setRange(0.1, 100);
173 prop->setSingleStep(0.01);
174 prop->setDecimals(2);
175 prop->setExponentRatio(3);
176 prop->setSuffix("%");
177 prop->setReadCallback(
178 [](KisUniformPaintOpProperty *prop) {
180 option.read(prop->settings().data());
181 prop->setValue(option.coverage);
182 });
183 prop->setWriteCallback(
184 [](KisUniformPaintOpProperty *prop) {
186 option.read(prop->settings().data());
187 option.coverage = prop->value().toReal();
188 option.write(prop->settings().data());
189 });
191 [](const KisUniformPaintOpProperty *prop) {
193 option.read(prop->settings().data());
194 return option.useDensity;
195 });
196 QObject::connect(updateProxy, SIGNAL(sigSettingsChanged()), prop, SLOT(requestReadValue()));
197 prop->requestReadValue();
198 props << toQShared(prop);
199 }
200 }
201 {
203
204 Q_FOREACH (KisUniformPaintOpPropertySP prop, KisPaintOpSettings::uniformProperties(settings, updateProxy)) {
205 if (prop->id() == opacity.id() ||
206 prop->id() == size.id()) {
207
208 props.prepend(prop);
209 }
210 }
211 }
212
213 return props;
214}
float value(const T *src, size_t ch)
const QString SPRAY_DIAMETER
const QString SPRAY_ASPECT
const QString SPRAY_ROTATION
const QString SPRAY_SCALE
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
const KisCurrentOutlineFetcher * outlineFetcher() const
void setPaintOpSize(qreal value) override
void setPaintOpAngle(qreal value) override
KisOptimizedBrushOutline brushOutline(const KisPaintInformation &info, const OutlineMode &mode, qreal alignForZoom) override
KisSprayPaintOpSettings(KisResourcesInterfaceSP resourcesInterface)
const QScopedPointer< Private > m_d
Definition KoID.h:30
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
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
bool read(const KisPropertiesConfiguration *setting)
int getInt(const QString &name, int def=0) const
double getDouble(const QString &name, double def=0.0) const
bool read(const KisPropertiesConfiguration *setting)
void write(KisPropertiesConfiguration *setting) const
QList< KisUniformPaintOpPropertyWSP > uniformProperties