Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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"
20#include "qsvgstructure_p.h"
21#include "qgenericmatrix.h"
22
23#include "QtCore/qlist.h"
24#include "QtCore/qhash.h"
25#include "QtGui/qvector4d.h"
26
28
29class Q_SVG_EXPORT QSvgFeFilterPrimitive : public QSvgStructureNode
30{
31public:
33 void drawCommand(QPainter *, QSvgExtraStates &) override {};
34 bool shouldDrawNode(QPainter *, QSvgExtraStates &) const override;
35 QRectF fastBounds(QPainter *, QSvgExtraStates &) const override { return QRectF(); }
36 QRectF bounds(QPainter *, QSvgExtraStates &) const override { return QRectF(); }
37 QRectF localFilterBoundingBox(QSvgNode *item,
38 const QRectF &itemBounds, const QRectF &filterBounds,
39 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const;
40 QRectF globalFilterBoundingBox(QSvgNode *item, 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(QSvgNode *item, 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:
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
80 Type type() const override;
81 QImage apply(QSvgNode *item, 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 ColorShiftType m_type;
86 Matrix m_matrix;
87};
88
89class Q_SVG_EXPORT QSvgFeGaussianBlur : public QSvgFeFilterPrimitive
90{
91public:
92 enum class EdgeMode : quint8 {
93 Duplicate,
94 Wrap,
95 None
96 };
97
99 qreal stdDeviationX, qreal stdDeviationY, EdgeMode edgemode);
100 Type type() const override;
101 QImage apply(QSvgNode *item, 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;
108};
109
110class Q_SVG_EXPORT QSvgFeOffset : public QSvgFeFilterPrimitive
111{
112public:
114 qreal dx, qreal dy);
115 Type type() const override;
116 QImage apply(QSvgNode *item, 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:
128 Type type() const override;
129 QImage apply(QSvgNode *item, const QMap<QString, QImage> &sources,
130 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
131 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
132 bool requiresSourceAlpha() const override;
133};
134
135class Q_SVG_EXPORT QSvgFeMergeNode : public QSvgFeFilterPrimitive
136{
137public:
139 Type type() const override;
140 QImage apply(QSvgNode *item, const QMap<QString, QImage> &sources,
141 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
142 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
143};
144
145class Q_SVG_EXPORT QSvgFeComposite : public QSvgFeFilterPrimitive
146{
147public:
148 enum class Operator : quint8 {
149 Over,
150 In,
151 Out,
152 Atop,
153 Xor,
154 Lighter,
155 Arithmetic
156 };
158 QString input2, Operator op, QVector4D k);
159 Type type() const override;
160 QImage apply(QSvgNode *item, const QMap<QString, QImage> &sources,
161 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
162 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
163 bool requiresSourceAlpha() const override;
164private:
165 QString m_input2;
166 Operator m_operator;
167 QVector4D m_k;
168};
169
170class Q_SVG_EXPORT QSvgFeFlood : public QSvgFeFilterPrimitive
171{
172public:
174 Type type() const override;
175 QImage apply(QSvgNode *item, const QMap<QString, QImage> &sources,
176 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
177 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
178private:
179 QColor m_color;
180};
181
182class Q_SVG_EXPORT QSvgFeUnsupported : public QSvgFeFilterPrimitive
183{
184public:
186 Type type() const override;
187 QImage apply(QSvgNode *item, const QMap<QString, QImage> &sources,
188 QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds,
189 QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const override;
190};
191
193
194#endif // QSVGFILTER_P_H
The QColor class provides colors based on RGB, HSV or CMYK values.
Definition qcolor.h:31
\inmodule QtGui
Definition qimage.h:37
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
\inmodule QtCore\reentrant
Definition qrect.h:484
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QGenericMatrix< 5, 1, qreal > Vector
QGenericMatrix< 5, 5, qreal > Matrix
QString input() const
virtual QImage apply(QSvgNode *item, const QMap< QString, QImage > &sources, QPainter *p, const QRectF &itemBounds, const QRectF &filterBounds, QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const =0
QString result() const
QRectF fastBounds(QPainter *, QSvgExtraStates &) const override
void drawCommand(QPainter *, QSvgExtraStates &) override
QRectF bounds(QPainter *, QSvgExtraStates &) const override
The QVector4D class represents a vector or vertex in 4D space.
Definition qvectornd.h:330
rect
[4]
Combined button and popup list for selecting options.
@ None
Definition qhash.cpp:531
GLenum GLuint buffer
GLuint color
[2]
GLenum type
GLsizei GLenum * sources
GLuint GLenum matrix
GLuint64EXT * result
[6]
GLfloat GLfloat p
[1]
GLenum GLenum GLenum input
double qreal
Definition qtypes.h:187
unsigned char quint8
Definition qtypes.h:46
QGraphicsItem * item
Definition moc.h:23