Krita Source Code Documentation
Loading...
Searching...
No Matches
KoAbstractGradient.cpp
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2007 Sven Langkamp <sven.langkamp@gmail.com>
3 SPDX-FileCopyrightText: 2004 Adrian Page <adrian@pagenet.plus.com>
4 SPDX-FileCopyrightText: 2009 Jan Hambrecht <jaham@gmx.net>
5
6 SPDX-License-Identifier: LGPL-2.1-or-later
7 */
8
11
12#include <KoColor.h>
13
14#include <QBuffer>
15
16#define PREVIEW_WIDTH 2048
17#define PREVIEW_HEIGHT 1
18
19
20struct Q_DECL_HIDDEN KoAbstractGradient::Private {
22 QGradient::Spread spread;
23 QGradient::Type type;
24};
25
27 : KoResource(filename)
28 , d(new Private)
29{
30 d->colorSpace = KoColorSpaceRegistry::instance()->rgb8();
31 d->spread = QGradient::PadSpread;
32 d->type = QGradient::NoGradient;
33}
34
39
41 : KoResource(rhs)
42 , d(new Private(*rhs.d))
43{
44}
45
47{
48 KoAbstractGradientSP result = this->clone().dynamicCast<KoAbstractGradient>();
49 if (canvasResourcesInterface) {
50 result->bakeVariableColors(canvasResourcesInterface);
51 }
52 return result;
53}
54
56{
57 Q_UNUSED(canvasResourcesInterface);
58}
59
61{
62 KoAbstractGradientSP result = this->clone().dynamicCast<KoAbstractGradient>();
63 if (canvasResourcesInterface) {
64 result->updateVariableColors(canvasResourcesInterface);
65 }
66 return result;
67}
68
70{
71 Q_UNUSED(canvasResourcesInterface);
72}
73
75{
76 Q_UNUSED(t);
77}
78
80{
81 d->colorSpace = colorSpace;
82}
83
85{
86 return d->colorSpace;
87}
88
89void KoAbstractGradient::setSpread(QGradient::Spread spreadMethod)
90{
91 d->spread = spreadMethod;
92}
93
94QGradient::Spread KoAbstractGradient::spread() const
95{
96 return d->spread;
97}
98
99void KoAbstractGradient::setType(QGradient::Type repeatType)
100{
101 d->type = repeatType;
102}
103
104QGradient::Type KoAbstractGradient::type() const
105{
106 return d->type;
107}
108
109QImage KoAbstractGradient::generatePreview(int width, int height) const
110{
111 QImage image(width, height, QImage::Format_ARGB32);
112
113 QRgb * firstLine = reinterpret_cast<QRgb*>(image.scanLine(0));
114
115 KoColor c;
116 QColor color;
117 // first create a reference line
118 for (int x = 0; x < image.width(); ++x) {
119
120 qreal t = static_cast<qreal>(x) / (image.width() - 1);
121 colorAt(c, t);
122 c.toQColor(&color);
123
124 firstLine[x] = color.rgba();
125 }
126
127 int bytesPerLine = image.bytesPerLine();
128
129 // now copy lines accordingly
130 for (int y = 1; y < image.height(); ++y) {
131 QRgb * line = reinterpret_cast<QRgb*>(image.scanLine(y));
132
133 memcpy(line, firstLine, bytesPerLine);
134 }
135
136 return image;
137}
138
139QImage KoAbstractGradient::generatePreview(int width, int height, KoCanvasResourcesInterfaceSP canvasResourcesInterface) const
140{
141 QImage result;
142
143 if (!requiredCanvasResources().isEmpty()) {
144 KoAbstractGradientSP gradient = cloneAndBakeVariableColors(canvasResourcesInterface);
145 result = gradient->generatePreview(width, height);
146 } else {
147 result = generatePreview(width, height);
148 }
149
150 return result;
151}
152
#define PREVIEW_HEIGHT
#define PREVIEW_WIDTH
void toQColor(QColor *c) const
a convenience method for the above.
Definition KoColor.cpp:198
unsigned int QRgb
virtual void colorAt(KoColor &, qreal t) const
gets the color at position 0 <= t <= 1
void setSpread(QGradient::Spread spreadMethod)
QImage generatePreview(int width, int height) const
void setColorSpace(KoColorSpace *colorSpace)
KoAbstractGradientSP cloneAndBakeVariableColors(KoCanvasResourcesInterfaceSP canvasResourcesInterface) const
virtual void bakeVariableColors(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
const KoColorSpace * colorSpace
KoAbstractGradient(const QString &filename)
QGradient::Spread spread
virtual void updateVariableColors(KoCanvasResourcesInterfaceSP canvasResourcesInterface)
KoAbstractGradientSP cloneAndUpdateVariableColors(KoCanvasResourcesInterfaceSP canvasResourcesInterface) const
void setType(QGradient::Type repeatType)
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())
virtual KoResourceSP clone() const =0
virtual QList< int > requiredCanvasResources() const
QImage image
void setImage(const QImage &image)