Krita Source Code Documentation
Loading...
Searching...
No Matches
KisBezierGradientMesh.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2020 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7#ifndef KISBEZIERGRADIENTMESH_H
8#define KISBEZIERGRADIENTMESH_H
9
10#include "kritaimage_export.h"
11#include <KisBezierMesh.h>
12
13#include <QColor>
14
16
17inline QColor lerp(const QColor &c1, const QColor &c2, qreal t) {
19
20 return QColor::fromRgbF(lerp(c1.redF(), c2.redF(), t),
21 lerp(c1.greenF(), c2.greenF(), t),
22 lerp(c1.blueF(), c2.blueF(), t),
23 lerp(c1.alphaF(), c2.alphaF(), t));
24}
25
27 std::array<QColor, 4> colors;
28};
29
30struct GradientMeshNode : public KisBezierMeshDetails::BaseMeshNode, public boost::equality_comparable<GradientMeshNode>
31{
32 using BaseMeshNode::BaseMeshNode;
33 QColor color;
34
35 bool operator==(const GradientMeshNode &rhs) const {
36 return static_cast<const KisBezierMeshDetails::BaseMeshNode&>(*this) ==
37 static_cast<const KisBezierMeshDetails::BaseMeshNode&>(rhs) &&
38 color == rhs.color;
39 }
40};
41
42inline void lerpNodeData(const GradientMeshNode &left, const GradientMeshNode &right, qreal t, GradientMeshNode &dst)
43{
44 dst.color = lerp(left.color, right.color, t);
45}
46
48 const QRectF &srcRect,
49 const GradientMeshNode &tl,
50 const GradientMeshNode &tr,
51 const GradientMeshNode &bl,
52 const GradientMeshNode &br)
53{
54 Q_UNUSED(srcRect);
55
56 patch->originalRect = QRectF(0.0, 0.0, 1.0, 1.0);
57 patch->colors[0] = tl.color;
58 patch->colors[1] = tr.color;
59 patch->colors[2] = bl.color;
60 patch->colors[3] = br.color;
61}
62
63class KRITAIMAGE_EXPORT KisBezierGradientMesh : public KisBezierMeshBase<GradientMeshNode, GradientMeshPatch>
64{
65public:
66
67 PatchIndex hitTestPatch(const QPointF &pt, QPointF *localPointResult) const;
68
69 static void renderPatch(const GradientMeshPatch &patch,
70 const QPoint &dstQImageOffset,
71 QImage *dstImage);
72
73 void renderMesh(const QPoint &dstQImageOffset,
74 QImage *dstImage) const;
75
76 friend KRITAIMAGE_EXPORT void saveValue(QDomElement *parent, const QString &tag, const KisBezierGradientMesh &mesh);
77 friend KRITAIMAGE_EXPORT bool loadValue(const QDomElement &parent, const QString &tag, KisBezierGradientMesh *mesh);
78};
79
80KRITAIMAGE_EXPORT
81void saveValue(QDomElement *parent, const QString &tag, const GradientMeshNode &node);
82
83KRITAIMAGE_EXPORT
84bool loadValue(const QDomElement &parent, GradientMeshNode *node);
85
86KRITAIMAGE_EXPORT
87void saveValue(QDomElement *parent, const QString &tag, const KisBezierGradientMesh &mesh);
88
89KRITAIMAGE_EXPORT
90bool loadValue(const QDomElement &parent, const QString &tag, KisBezierGradientMesh *mesh);
91}
92
93namespace KisDomUtils {
96}
97
99
100#endif // KISBEZIERGRADIENTMESH_H
Point lerp(const Point &pt1, const Point &pt2, qreal t)
QColor lerp(const QColor &c1, const QColor &c2, qreal t)
void lerpNodeData(const GradientMeshNode &left, const GradientMeshNode &right, qreal t, GradientMeshNode &dst)
bool loadValue(const QDomElement &parent, GradientMeshNode *node)
void assignPatchData(GradientMeshPatch *patch, const QRectF &srcRect, const GradientMeshNode &tl, const GradientMeshNode &tr, const GradientMeshNode &bl, const GradientMeshNode &br)
void saveValue(QDomElement *parent, const QString &tag, const GradientMeshNode &node)
bool operator==(const GradientMeshNode &rhs) const