Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGradientGeneratorConfiguration.h
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#ifndef KISGRADIENTGENERATORCONFIGURATION_H
11#define KISGRADIENTGENERATORCONFIGURATION_H
12
13#include <QString>
14
17#include <KoAbstractGradient.h>
18#include <KoStopGradient.h>
20
23
25{
26public:
32
41
47
53
57
58 virtual KisFilterConfigurationSP clone() const override;
59
60 static inline QString defaultName()
61 {
62 return "gradient";
63 }
64
65 static constexpr qint32 defaultVersion()
66 {
67 return 1;
68 }
69
74
79
80 static constexpr qreal defaultAntiAliasThreshold()
81 {
82 return 0.0;
83 }
84
85 static constexpr bool defaultDither()
86 {
87 return false;
88 }
89
90 static constexpr bool defaultReverse()
91 {
92 return false;
93 }
94
95 static constexpr qreal defaultStartPositionX()
96 {
97 return 0.0;
98 }
99
100 static constexpr qreal defaultStartPositionY()
101 {
102 return 50.0;
103 }
104
106 {
108 }
109
111 {
113 }
114
119
120 static constexpr qreal defaultEndPositionX()
121 {
122 return 100.0;
123 }
124
125 static constexpr qreal defaultEndPositionY()
126 {
127 return 50.0;
128 }
129
131 {
133 }
134
136 {
138 }
139
141 {
142 return PositioningAbsolute;
143 }
144
146 {
147 return PositioningAbsolute;
148 }
149
150 static constexpr qreal defaultEndPositionAngle()
151 {
152 return 0.0;
153 }
154
155 static constexpr qreal defaultEndPositionDistance()
156 {
157 return 100.0;
158 }
159
164
166 {
168 gradient->setStops(
172 );
173 gradient->setName(i18nc("Default gradient name for the gradient generator", "Unnamed"));
174 gradient->setValid(true);
175 return gradient;
176 }
177
180 qreal antiAliasThreshold() const;
181 bool dither() const;
182 bool reverse() const;
183 qreal startPositionX() const;
184 qreal startPositionY() const;
188 qreal endPositionX() const;
189 qreal endPositionY() const;
194 qreal endPositionAngle() const;
195 qreal endPositionDistance() const;
197 KoAbstractGradientSP gradient(KoAbstractGradientSP fallbackGradient = nullptr) const;
198
199 QPair<QPointF, QPointF> absoluteCartesianPositionsInPixels(int width, int height) const;
200
203 void setAntiAliasThreshold(qreal newAntiAliasThreshold);
204 void setDither(bool newDither);
205 void setReverse(bool newReverse);
206 void setStartPositionX(qreal newStartPositionX);
207 void setStartPositionY(qreal newStartPositionY);
208 void setStartPositionXUnits(SpatialUnits newStartPositionXUnits);
209 void setStartPositionYUnits(SpatialUnits newStartPositionYUnits);
210 void setEndPositionCoordinateSystem(CoordinateSystem newEndPositionCoordinateSystem);
211 void setEndPositionX(qreal newEndPositionX);
212 void setEndPositionY(qreal newEndPositionY);
213 void setEndPositionXUnits(SpatialUnits newEndPositionXUnits);
214 void setEndPositionYUnits(SpatialUnits newEndPositionYUnits);
215 void setEndPositionXPositioning(Positioning newEndPositionXPositioning);
216 void setEndPositionYPositioning(Positioning newEndPositionYPositioning);
217 void setEndPositionAngle(qreal newEndPositionAngle);
218 void setEndPositionDistance(qreal newEndPositionDistance);
219 void setEndPositionDistanceUnits(SpatialUnits newEndPositionDistanceUnits);
220 void setGradient(KoAbstractGradientSP newGradient);
221 void setDefaults();
222
224 const QString & defaultShapeString = QString())
225 {
227 return "linear";
229 return "bilinear";
231 return "radial";
233 return "square";
235 return "conical";
237 return "conical_symetric";
239 return "spiral";
241 return "reverse_spiral";
243 return "polygonal";
244 }
245 return defaultShapeString;
246 }
247
248 static inline KisGradientPainter::enumGradientShape stringToShape(QString const & shapeString,
250 {
251 if (shapeString == "linear") {
253 } else if (shapeString == "bilinear") {
255 } else if (shapeString == "radial") {
257 } else if (shapeString == "square") {
259 } else if (shapeString == "conical") {
261 } else if (shapeString == "conical_symetric") {
263 } else if (shapeString == "spiral") {
265 } else if (shapeString == "reverse_spiral") {
267 } else if (shapeString == "polygonal") {
269 }
270 return defaultShape;
271 }
272
274 const QString & defaultRepeatString = QString())
275 {
277 return "none";
279 return "forwards";
281 return "alternate";
282 }
283 return defaultRepeatString;
284 }
285
286 static inline KisGradientPainter::enumGradientRepeat stringToRepeat(QString const & repeatString,
288 {
289 if (repeatString == "none") {
291 } else if (repeatString == "forwards") {
293 } else if (repeatString == "alternate") {
295 }
296 return defaultRepeat;
297 }
298
299 static inline QString coordinateSystemToString(CoordinateSystem coordinateSystem,
300 const QString &defaultCoordinateSystemString = QString())
301 {
302 if (coordinateSystem == CoordinateSystemCartesian) {
303 return "cartesian";
304 } else if (coordinateSystem == CoordinateSystemPolar) {
305 return "polar";
306 }
307 return defaultCoordinateSystemString;
308 }
309
310 static inline CoordinateSystem stringToCoordinateSystem(QString const & coordinateSystemString,
311 CoordinateSystem defaultCoordinateSystem = CoordinateSystemCartesian)
312 {
313 if (coordinateSystemString == "cartesian") {
315 } else if (coordinateSystemString == "polar") {
317 }
318 return defaultCoordinateSystem;
319 }
320
321 static inline QString spatialUnitsToString(SpatialUnits spatialUnits,
322 const QString &defaultSpatialUnitsString = QString())
323 {
324 if (spatialUnits == SpatialUnitsPixels) {
325 return "pixels";
326 } else if (spatialUnits == SpatialUnitsPercentOfWidth) {
327 return "percent_of_width";
328 } else if (spatialUnits == SpatialUnitsPercentOfHeight) {
329 return "percent_of_height";
330 } else if (spatialUnits == SpatialUnitsPercentOfLongestSide) {
331 return "percent_of_longest_side";
332 } else if (spatialUnits == SpatialUnitsPercentOfShortestSide) {
333 return "percent_of_shortest_side";
334 }
335 return defaultSpatialUnitsString;
336 }
337
338 static inline SpatialUnits stringToSpatialUnits(QString const & spatialUnitsString,
339 SpatialUnits defaultSpatialUnits = SpatialUnitsPixels)
340 {
341 if (spatialUnitsString == "pixels") {
342 return SpatialUnitsPixels;
343 } else if (spatialUnitsString == "percent_of_width") {
345 } else if (spatialUnitsString == "percent_of_height") {
347 } else if (spatialUnitsString == "percent_of_longest_side") {
349 } else if (spatialUnitsString == "percent_of_shortest_side") {
351 }
352 return defaultSpatialUnits;
353 }
354
355 static inline QString positioningToString(Positioning positioning,
356 const QString &defaultPositioningString = QString())
357 {
358 if (positioning == PositioningAbsolute) {
359 return "absolute";
360 } else if (positioning == PositioningRelative) {
361 return "relative";
362 }
363 return defaultPositioningString;
364 }
365
366 static inline Positioning stringToPositioning(QString const & positioningString,
367 Positioning defaultPositioning = PositioningAbsolute)
368 {
369 if (positioningString == "absolute") {
370 return PositioningAbsolute;
371 } else if (positioningString == "relative") {
372 return PositioningRelative;
373 }
374 return defaultPositioning;
375 }
376
377private:
378 static inline qreal convertUnitsToPixels(qreal x, SpatialUnits sourceUnits, int width, int height)
379 {
380 if (sourceUnits == SpatialUnitsPercentOfWidth) {
381 return x * static_cast<qreal>(width) / 100.0;
382 } else if (sourceUnits == SpatialUnitsPercentOfHeight) {
383 return x * static_cast<qreal>(height) / 100.0;
384 } else if (sourceUnits == SpatialUnitsPercentOfLongestSide) {
385 return x * static_cast<qreal>(qMax(width, height)) / 100.0;
386 } else if (sourceUnits == SpatialUnitsPercentOfShortestSide) {
387 return x * static_cast<qreal>(qMin(width, height)) / 100.0;
388 }
389 return x;
390 }
391};
392
393#endif
KisPinnedSharedPtr< KisGradientGeneratorConfiguration > KisGradientGeneratorConfigurationSP
@ FOREGROUNDSTOP
@ BACKGROUNDSTOP
QSharedPointer< KoStopGradient > KoStopGradientSP
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()
KisResourcesInterfaceSP resourcesInterface
static KoColorSpaceRegistry * instance()