Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qsvgfilter_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5
6#ifndef QSVGFILTER_P_H
7#define QSVGFILTER_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include "qsvgnode_p.h"
21#include "qtsvgglobal_p.h"
23#include "qgenericmatrix.h"
24
25#include "QtGui/qvector4d.h"
26
27QT_BEGIN_NAMESPACE
28
29class Q_SVG_EXPORT QSvgFeFilterPrimitive : public QSvgStructureNode
30{
31public:
32 QSvgFeFilterPrimitive(QSvgNode *parent, const QString &input,
33 const QString &result, const QSvgRectF &rect);
34 void drawCommand(QPainter *, QSvgExtraStates &) override {};
35 bool shouldDrawNode(QPainter *, QSvgExtraStates &) const override;
36 QRectF internalFastBounds(QPainter *, QSvgExtraStates &) const override { return QRectF(); }
37 QRectF internalBounds(QPainter *, QSvgExtraStates &) const override { return QRectF(); }
38 QRectF localSubRegion(const QRectF &itemBounds, const QRectF &filterBounds,
39 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const;
40 QRectF globalSubRegion(QPainter *p,
41 const QRectF &itemBounds, const QRectF &filterBounds,
42 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const;
43 void clipToTransformedBounds(QImage *buffer, QPainter *p, const QRectF &localRect) const;
44 virtual QImage apply(const QMap<QString, QImage> &sources,
45 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
46 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const = 0;
47 virtual bool requiresSourceAlpha() const;
48 QString input() const { return m_input; }
49 QString result() const { return m_result; }
50 QSvgRectF rect() const { return m_rect; }
51
52 static const QSvgFeFilterPrimitive *castToFilterPrimitive(const QSvgNode *node);
53
54protected:
55 QString m_input;
56 QString m_result;
57 QSvgRectF m_rect;
58};
59
60class Q_SVG_EXPORT QSvgFeColorMatrix : public QSvgFeFilterPrimitive
61{
62public:
63 enum class ColorShiftType : quint8 {
64 Matrix,
65 Saturate,
66 HueRotate,
67 LuminanceToAlpha
68 };
69
70 typedef QGenericMatrix<5, 5, qreal> Matrix;
71 typedef QGenericMatrix<5, 1, qreal> Vector;
72
73 QSvgFeColorMatrix(QSvgNode *parent, const QString &input, const QString &result,
74 const QSvgRectF &rect, ColorShiftType type, const Matrix &matrix);
75 Type type() const override;
76 QImage apply(const QMap<QString, QImage> &sources,
77 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
78 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
79 Matrix matrix() const
80 {
81 return m_matrix;
82 }
83
84private:
85 Matrix m_matrix;
86};
87
88class Q_SVG_EXPORT QSvgFeGaussianBlur : public QSvgFeFilterPrimitive
89{
90public:
91 enum class EdgeMode : quint8 {
92 Duplicate,
93 Wrap,
94 None
95 };
96
97 QSvgFeGaussianBlur(QSvgNode *parent, const QString &input, const QString &result,
98 const QSvgRectF &rect, qreal stdDeviationX, qreal stdDeviationY,
99 EdgeMode edgemode);
100 Type type() const override;
101 QImage apply(const QMap<QString, QImage> &sources,
102 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
103 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
104
105 qreal stdDeviationX() const { return m_stdDeviationX; }
106 qreal stdDeviationY() const { return m_stdDeviationY; }
107 EdgeMode edgeMode() const { return m_edgemode; }
108
109private:
110 qreal m_stdDeviationX;
111 qreal m_stdDeviationY;
112 EdgeMode m_edgemode; // TODO: Unused. Start using it when there's a reference implementation.
113};
114
115class Q_SVG_EXPORT QSvgFeOffset : public QSvgFeFilterPrimitive
116{
117public:
118 QSvgFeOffset(QSvgNode *parent, const QString &input, const QString &result,
119 const QSvgRectF &rect, qreal dx, qreal dy);
120 Type type() const override;
121 QImage apply(const QMap<QString, QImage> &sources,
122 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
123 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
124
125 qreal dx() const { return m_dx; }
126 qreal dy() const { return m_dy; }
127
128private:
129 qreal m_dx;
130 qreal m_dy;
131};
132
133class Q_SVG_EXPORT QSvgFeMerge : public QSvgFeFilterPrimitive
134{
135public:
136 QSvgFeMerge(QSvgNode *parent, const QString &input,
137 const QString &result, const QSvgRectF &rect);
138 Type type() const override;
139 QImage apply(const QMap<QString, QImage> &sources,
140 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
141 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
142 bool requiresSourceAlpha() const override;
143};
144
145class Q_SVG_EXPORT QSvgFeMergeNode : public QSvgFeFilterPrimitive
146{
147public:
148 QSvgFeMergeNode(QSvgNode *parent, const QString &input,
149 const QString &result, const QSvgRectF &rect);
150 Type type() const override;
151 QImage apply(const QMap<QString, QImage> &sources,
152 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
153 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
154};
155
156class Q_SVG_EXPORT QSvgFeComposite : public QSvgFeFilterPrimitive
157{
158public:
159 enum class Operator : quint8 {
160 Over,
161 In,
162 Out,
163 Atop,
164 Xor,
165 Lighter,
166 Arithmetic
167 };
168 QSvgFeComposite(QSvgNode *parent, const QString &input, const QString &result,
169 const QSvgRectF &rect, const QString &input2, Operator op, const QVector4D &k);
170 Type type() const override;
171 QImage apply(const QMap<QString, QImage> &sources,
172 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
173 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
174 bool requiresSourceAlpha() const override;
175
176 QString input2() const { return m_input2; }
177 Operator compositionOperator() const { return m_operator; }
178 QVector4D k() const { return m_k; }
179
180private:
181 QString m_input2;
182 Operator m_operator;
183 QVector4D m_k;
184};
185
186class Q_SVG_EXPORT QSvgFeFlood : public QSvgFeFilterPrimitive
187{
188public:
189 QSvgFeFlood(QSvgNode *parent, const QString &input, const QString &result,
190 const QSvgRectF &rect, const QColor &color);
191 Type type() const override;
192 QImage apply(const QMap<QString, QImage> &sources,
193 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
194 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
195
196 QColor color() const { return m_color; }
197private:
198 QColor m_color;
199};
200
201class Q_SVG_EXPORT QSvgFeBlend : public QSvgFeFilterPrimitive
202{
203public:
204 enum class Mode : quint8 {
205 Normal,
206 Multiply,
207 Screen,
208 Darken,
209 Lighten
210 };
211 QSvgFeBlend(QSvgNode *parent, const QString &input, const QString &result,
212 const QSvgRectF &rect, const QString &input2, Mode mode);
213 Type type() const override;
214 QImage apply(const QMap<QString, QImage> &sources,
215 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
216 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
217 bool requiresSourceAlpha() const override;
218
219 QString input2() const { return m_input2; }
220 Mode mode() const { return m_mode; }
221
222private:
223 QString m_input2;
224 Mode m_mode;
225
226};
227
228class Q_SVG_EXPORT QSvgFeUnsupported : public QSvgFeFilterPrimitive
229{
230public:
231 QSvgFeUnsupported(QSvgNode *parent, const QString &input,
232 const QString &result, const QSvgRectF &rect);
233 Type type() const override;
234 QImage apply(const QMap<QString, QImage> &sources,
235 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
236 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
237};
238
239QT_END_NAMESPACE
240
241#endif // QSVGFILTER_P_H
ColorValues & operator-=(const ColorValues &other)
ColorValues & operator+=(const ColorValues &other)
ColorValues(QRgb rgb)
ColorValues()=default
ColorValues operator+(const ColorValues &other)
ColorValues operator/=(uint64_t div)
ColorValues operator-(const ColorValues &other)
Combined button and popup list for selecting options.
QGenericMatrix< 3, 3, qreal > Matrix3x3