Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGradientGeneratorConfiguration.cpp
Go to the documentation of this file.
1/*
2 * KDE. Krita Project.
3 *
4 * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com>
5 * SPDX-FileCopyrightText: 2021 L. E. Segovia <amy@amyspark.me>
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10#include <QDomDocument>
11
12#include <KoSegmentGradient.h>
13
14#include <cmath>
15
17
19 : KisFilterConfiguration(defaultName(), version, resourcesInterface)
20{}
21
23 : KisFilterConfiguration(defaultName(), defaultVersion(), resourcesInterface)
24{}
25
29
34
39
44
46{
47 return getDouble("antialias_threshold", defaultAntiAliasThreshold());
48}
49
51{
52 return getBool("reverse", defaultReverse());
53}
54
56{
57 return getBool("dither", defaultDither());
58}
59
61{
62 return getDouble("start_position_x", defaultStartPositionX());
63}
64
66{
67 return getDouble("start_position_y", defaultStartPositionY());
68}
69
74
79
87
89{
90 return getDouble("end_position_x", defaultEndPositionX());
91}
92
94{
95 return getDouble("end_position_y", defaultEndPositionY());
96}
97
102
107
112
117
119{
120 return getDouble("end_position_angle", defaultEndPositionAngle());
121}
123{
124 return getDouble("end_position_distance", defaultEndPositionDistance());
125}
126
131
133{
134 QDomDocument document;
135 if (document.setContent(this->getString("gradient", ""))) {
136 const QDomElement gradientElement = document.firstChildElement();
137 if (!gradientElement.isNull()) {
138 const QString gradientType = gradientElement.attribute("type");
140 if (gradientType == "stop") {
141 gradient = KoStopGradient::fromXML(gradientElement).clone().dynamicCast<KoAbstractGradient>();
142 } else if (gradientType == "segment") {
143 gradient = KoSegmentGradient::fromXML(gradientElement).clone().dynamicCast<KoAbstractGradient>();
144 }
145 if (gradient) {
146 gradient->setName(gradientElement.attribute("name", ""));
147 gradient->setValid(true);
148 return gradient;
149 }
150 }
151 }
152 return fallbackGradient ? fallbackGradient : defaultGradient();
153}
154
155QPair<QPointF, QPointF> KisGradientGeneratorConfiguration::absoluteCartesianPositionsInPixels(int width, int height) const
156{
157 QPointF startPosition(
160 );
161 QPointF endPosition;
162
164 qreal angle = endPositionAngle() * M_PI / 180.0;
166 endPosition = startPosition + distance * QPointF(std::cos(angle), -std::sin(angle));
167 } else {
168 endPosition = QPointF(
171 );
172 endPosition += QPointF(
173 endPositionXPositioning() == PositioningRelative ? startPosition.x() : 0,
174 endPositionYPositioning() == PositioningRelative ? startPosition.y() : 0
175 );
176 }
177
178 return QPair<QPointF, QPointF>(startPosition, endPosition);
179}
180
185
190
192{
193 setProperty("antialias_threshold", newAntiAliasThreshold);
194}
195
197{
198 setProperty("dither", newDither);
199}
200
202{
203 setProperty("reverse", newReverse);
204}
205
207{
208 setProperty("start_position_x", newStartPositionX);
209}
210
212{
213 setProperty("start_position_y", newStartPositionY);
214}
215
217{
218 setProperty("start_position_x_units", spatialUnitsToString(newStartPositionXUnits));
219}
220
222{
223 setProperty("start_position_y_units", spatialUnitsToString(newStartPositionYUnits));
224}
225
227{
228 setProperty("end_position_coordinate_system", coordinateSystemToString(newEndPositionCoordinateSystem));
229}
230
232{
233 setProperty("end_position_x", newEndPositionX);
234}
235
237{
238 setProperty("end_position_y", newEndPositionY);
239}
240
242{
243 setProperty("end_position_x_units", spatialUnitsToString(newEndPositionXUnits));
244}
245
247{
248 setProperty("end_position_y_units", spatialUnitsToString(newEndPositionYUnits));
249}
250
252{
253 setProperty("end_position_x_positioning", positioningToString(newEndPositionXPositioning));
254}
255
257{
258 setProperty("end_position_y_positioning", positioningToString(newEndPositionYPositioning));
259}
260
262{
263 setProperty("end_position_angle", newEndPositionAngle);
264}
265
267{
268 setProperty("end_position_distance", newEndPositionDistance);
269}
270
272{
273 setProperty("end_position_distance_units", spatialUnitsToString(newEndPositionDistanceUnits));
274}
275
277{
278 if (!newGradient) {
279 setProperty("gradient", "");
280 return;
281 }
282
283 QDomDocument document;
284 QDomElement gradientElement = document.createElement("gradient");
285 gradientElement.setAttribute("name", newGradient->name());
286
287 if (dynamic_cast<KoStopGradient*>(newGradient.data())) {
288 KoStopGradient *gradient = dynamic_cast<KoStopGradient*>(newGradient.data());
289 gradient->toXML(document, gradientElement);
290 } else if (dynamic_cast<KoSegmentGradient*>(newGradient.data())) {
291 KoSegmentGradient *gradient = dynamic_cast<KoSegmentGradient*>(newGradient.data());
292 gradient->toXML(document, gradientElement);
293 }
294
295 document.appendChild(gradientElement);
296 setProperty("gradient", document.toString());
297}
298
qreal distance(const QPointF &p1, const QPointF &p2)
static constexpr SpatialUnits defaultStartPositionYUnits()
void setShape(KisGradientPainter::enumGradientShape newShape)
static constexpr Positioning defaultEndPositionXPositioning()
void setEndPositionYPositioning(Positioning newEndPositionYPositioning)
static constexpr SpatialUnits defaultEndPositionDistanceUnits()
void setEndPositionYUnits(SpatialUnits newEndPositionYUnits)
static KisGradientPainter::enumGradientRepeat stringToRepeat(QString const &repeatString, KisGradientPainter::enumGradientRepeat defaultRepeat=KisGradientPainter::GradientRepeatNone)
void setStartPositionYUnits(SpatialUnits newStartPositionYUnits)
static constexpr SpatialUnits defaultEndPositionYUnits()
static qreal convertUnitsToPixels(qreal x, SpatialUnits sourceUnits, int width, int height)
static constexpr Positioning defaultEndPositionYPositioning()
QPair< QPointF, QPointF > absoluteCartesianPositionsInPixels(int width, int height) const
static QString shapeToString(KisGradientPainter::enumGradientShape shape, const QString &defaultShapeString=QString())
static constexpr CoordinateSystem defaultEndPositionCoordinateSystem()
static QString coordinateSystemToString(CoordinateSystem coordinateSystem, const QString &defaultCoordinateSystemString=QString())
KisGradientPainter::enumGradientShape shape() const
KisGradientGeneratorConfiguration(qint32 version, KisResourcesInterfaceSP resourcesInterface)
static constexpr KisGradientPainter::enumGradientShape defaultShape()
void setRepeat(KisGradientPainter::enumGradientRepeat newRepeat)
KisGradientPainter::enumGradientRepeat repeat() const
void setEndPositionXPositioning(Positioning newEndPositionXPositioning)
void setAntiAliasThreshold(qreal newAntiAliasThreshold)
void setGradient(KoAbstractGradientSP newGradient)
static KisGradientPainter::enumGradientShape stringToShape(QString const &shapeString, KisGradientPainter::enumGradientShape defaultShape=KisGradientPainter::GradientShapeLinear)
static SpatialUnits stringToSpatialUnits(QString const &spatialUnitsString, SpatialUnits defaultSpatialUnits=SpatialUnitsPixels)
static QString spatialUnitsToString(SpatialUnits spatialUnits, const QString &defaultSpatialUnitsString=QString())
static Positioning stringToPositioning(QString const &positioningString, Positioning defaultPositioning=PositioningAbsolute)
void setEndPositionCoordinateSystem(CoordinateSystem newEndPositionCoordinateSystem)
static constexpr KisGradientPainter::enumGradientRepeat defaultRepeat()
KoAbstractGradientSP gradient(KoAbstractGradientSP fallbackGradient=nullptr) const
static CoordinateSystem stringToCoordinateSystem(QString const &coordinateSystemString, CoordinateSystem defaultCoordinateSystem=CoordinateSystemCartesian)
virtual KisFilterConfigurationSP clone() const override
static constexpr SpatialUnits defaultStartPositionXUnits()
static QString repeatToString(KisGradientPainter::enumGradientRepeat repeat, const QString &defaultRepeatString=QString())
static QString positioningToString(Positioning positioning, const QString &defaultPositioningString=QString())
void setStartPositionXUnits(SpatialUnits newStartPositionXUnits)
void setEndPositionXUnits(SpatialUnits newEndPositionXUnits)
void setEndPositionDistance(qreal newEndPositionDistance)
void setEndPositionDistanceUnits(SpatialUnits newEndPositionDistanceUnits)
static constexpr SpatialUnits defaultEndPositionXUnits()
KoResourceSP clone() const override
static KoSegmentGradient fromXML(const QDomElement &elt)
fromXML get a segment gradient from xml.
KoResourceSP clone() const override
static KoStopGradient fromXML(const QDomElement &elt)
fromXML convert a gradient from xml.
#define M_PI
Definition kis_global.h:111
QString getString(const QString &name, const QString &def=QString()) const
virtual bool hasProperty(const QString &name) const
virtual void setProperty(const QString &name, const QVariant &value)
bool getBool(const QString &name, bool def=false) const
double getDouble(const QString &name, double def=0.0) const