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
4#ifndef QSVGFILTER_P_H
5#define QSVGFILTER_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qsvgnode_p.h"
19#include "qtsvgglobal_p.h"
21#include "qgenericmatrix.h"
22
23#include "QtCore/qlist.h"
24#include "QtCore/qhash.h"
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 {
49 return m_input;
50 }
51 QString result() const {
52 return m_result;
53 }
54
55 static const QSvgFeFilterPrimitive *castToFilterPrimitive(const QSvgNode *node);
56
57protected:
58 QString m_input;
59 QString m_result;
60 QSvgRectF m_rect;
61
62
63};
64
65class Q_SVG_EXPORT QSvgFeColorMatrix : public QSvgFeFilterPrimitive
66{
67public:
68 enum class ColorShiftType : quint8 {
69 Matrix,
70 Saturate,
71 HueRotate,
72 LuminanceToAlpha
73 };
74
75 typedef QGenericMatrix<5, 5, qreal> Matrix;
76 typedef QGenericMatrix<5, 1, qreal> Vector;
77
78 QSvgFeColorMatrix(QSvgNode *parent, const QString &input, const QString &result,
79 const QSvgRectF &rect, ColorShiftType type, const Matrix &matrix);
80 Type type() const override;
81 QImage apply(const QMap<QString, QImage> &sources,
82 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
83 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
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;
104private:
105 qreal m_stdDeviationX;
106 qreal m_stdDeviationY;
107 EdgeMode m_edgemode; // TODO: Unused. Start using it when there's a reference implementation.
108};
109
110class Q_SVG_EXPORT QSvgFeOffset : public QSvgFeFilterPrimitive
111{
112public:
113 QSvgFeOffset(QSvgNode *parent, const QString &input, const QString &result,
114 const QSvgRectF &rect, qreal dx, qreal dy);
115 Type type() const override;
116 QImage apply(const QMap<QString, QImage> &sources,
117 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
118 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
119private:
120 qreal m_dx;
121 qreal m_dy;
122};
123
124class Q_SVG_EXPORT QSvgFeMerge : public QSvgFeFilterPrimitive
125{
126public:
127 QSvgFeMerge(QSvgNode *parent, const QString &input,
128 const QString &result, const QSvgRectF &rect);
129 Type type() const override;
130 QImage apply(const QMap<QString, QImage> &sources,
131 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
132 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
133 bool requiresSourceAlpha() const override;
134};
135
136class Q_SVG_EXPORT QSvgFeMergeNode : public QSvgFeFilterPrimitive
137{
138public:
139 QSvgFeMergeNode(QSvgNode *parent, const QString &input,
140 const QString &result, const QSvgRectF &rect);
141 Type type() const override;
142 QImage apply(const QMap<QString, QImage> &sources,
143 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
144 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
145};
146
147class Q_SVG_EXPORT QSvgFeComposite : public QSvgFeFilterPrimitive
148{
149public:
150 enum class Operator : quint8 {
151 Over,
152 In,
153 Out,
154 Atop,
155 Xor,
156 Lighter,
157 Arithmetic
158 };
159 QSvgFeComposite(QSvgNode *parent, const QString &input, const QString &result,
160 const QSvgRectF &rect, const QString &input2, Operator op, const QVector4D &k);
161 Type type() const override;
162 QImage apply(const QMap<QString, QImage> &sources,
163 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
164 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
165 bool requiresSourceAlpha() const override;
166private:
167 QString m_input2;
168 Operator m_operator;
169 QVector4D m_k;
170};
171
172class Q_SVG_EXPORT QSvgFeFlood : public QSvgFeFilterPrimitive
173{
174public:
175 QSvgFeFlood(QSvgNode *parent, const QString &input, const QString &result,
176 const QSvgRectF &rect, const QColor &color);
177 Type type() const override;
178 QImage apply(const QMap<QString, QImage> &sources,
179 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
180 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
181private:
182 QColor m_color;
183};
184
185class Q_SVG_EXPORT QSvgFeBlend : public QSvgFeFilterPrimitive
186{
187public:
188 enum class Mode : quint8 {
189 Normal,
190 Multiply,
191 Screen,
192 Darken,
193 Lighten
194 };
195 QSvgFeBlend(QSvgNode *parent, const QString &input, const QString &result,
196 const QSvgRectF &rect, const QString &input2, Mode mode);
197 Type type() const override;
198 QImage apply(const QMap<QString, QImage> &sources,
199 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
200 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
201 bool requiresSourceAlpha() const override;
202private:
203 QString m_input2;
204 Mode m_mode;
205
206};
207
208class Q_SVG_EXPORT QSvgFeUnsupported : public QSvgFeFilterPrimitive
209{
210public:
211 QSvgFeUnsupported(QSvgNode *parent, const QString &input,
212 const QString &result, const QSvgRectF &rect);
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};
218
219QT_END_NAMESPACE
220
221#endif // QSVGFILTER_P_H