Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qsvggraphics_p.h
Go to the documentation of this file.
1
// Copyright (C) 2016 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
QSVGGRAPHICS_P_H
7
#
define
QSVGGRAPHICS_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
22
#
include
"QtGui/qpainterpath.h"
23
#
include
"QtGui/qimage.h"
24
#
include
"QtGui/qtextlayout.h"
25
#
include
"QtCore/qloggingcategory.h"
26
#
include
"QtCore/qnumeric.h"
27
28
#
include
<
optional
>
29
30
QT_BEGIN_NAMESPACE
31
32
Q_DECLARE_LOGGING_CATEGORY(lcSvgDraw);
33
34
class
QSvgGlyph;
35
class
QTextCharFormat;
36
37
class
Q_SVG_EXPORT
QSvgDummyNode
:
public
QSvgNode
38
{
39
public
:
40
~QSvgDummyNode() override;
41
42
void
drawCommand(QPainter *, QSvgExtraStates &) override;
43
Type type()
const
override;
44
};
45
46
class
Q_SVG_EXPORT
QSvgEllipse
:
public
QSvgNode
47
{
48
public
:
49
QSvgEllipse(QSvgNode *parent,
const
QRectF &rect);
50
~QSvgEllipse() override;
51
52
bool
separateFillStroke(
const
QPainter *,
const
QSvgExtraStates &)
const
override;
53
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
54
Type type()
const
override;
55
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
56
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
57
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
58
QRectF rect()
const
{
return
m_bounds; }
59
private
:
60
QRectF m_bounds;
61
};
62
63
class
Q_SVG_EXPORT
QSvgCircle
:
public
QSvgEllipse
64
{
65
public
:
66
QSvgCircle(QSvgNode *parent,
const
QRectF &rect) : QSvgEllipse(parent, rect) { }
67
~QSvgCircle() override;
68
69
Type type()
const
override;
70
};
71
72
class
Q_SVG_EXPORT
QSvgImage
:
public
QSvgNode
73
{
74
public
:
75
QSvgImage(QSvgNode *parent,
76
const
QImage &image,
77
const
QString &filename,
78
const
QRectF &bounds);
79
~QSvgImage() override;
80
81
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
82
Type type()
const
override;
83
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
84
85
QRectF rect()
const
{
return
m_bounds; }
86
const
QImage &image()
const
{
return
m_image; }
87
QString filename()
const
{
return
m_filename; }
88
private
:
89
QString m_filename;
90
QImage m_image;
91
QRectF m_bounds;
92
};
93
94
class
Q_SVG_EXPORT
QSvgLine
:
public
QSvgNode
95
{
96
public
:
97
QSvgLine(QSvgNode *parent,
const
QLineF &line);
98
~QSvgLine() override;
99
100
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
101
Type type()
const
override;
102
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
103
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
104
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
105
bool
requiresGroupRendering()
const
override;
106
QLineF line()
const
{
return
m_line; }
107
private
:
108
QRectF internalBounds(QPainter *p, QSvgExtraStates &states, BoundsMode mode)
const
;
109
QLineF m_line;
110
};
111
112
class
Q_SVG_EXPORT
QSvgPath
:
public
QSvgNode
113
{
114
public
:
115
QSvgPath(QSvgNode *parent,
const
QPainterPath &qpath);
116
~QSvgPath() override;
117
118
bool
separateFillStroke(
const
QPainter *,
const
QSvgExtraStates &)
const
override;
119
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
120
Type type()
const
override;
121
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
122
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
123
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
124
bool
requiresGroupRendering()
const
override;
125
const
QPainterPath &path()
const
{
return
m_path; }
126
private
:
127
QPainterPath m_path;
128
};
129
130
class
Q_SVG_EXPORT
QSvgPolygon
:
public
QSvgNode
131
{
132
public
:
133
QSvgPolygon(QSvgNode *parent,
const
QPolygonF &poly);
134
~QSvgPolygon() override;
135
136
bool
separateFillStroke(
const
QPainter *,
const
QSvgExtraStates &)
const
override;
137
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
138
Type type()
const
override;
139
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
140
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
141
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
142
bool
requiresGroupRendering()
const
override;
143
const
QPolygonF &polygon()
const
{
return
m_poly; }
144
private
:
145
QRectF internalBounds(QPainter *p, QSvgExtraStates &states, BoundsMode mode)
const
;
146
QPolygonF m_poly;
147
};
148
149
class
Q_SVG_EXPORT
QSvgPolyline
:
public
QSvgNode
150
{
151
public
:
152
QSvgPolyline(QSvgNode *parent,
const
QPolygonF &poly);
153
~QSvgPolyline() override;
154
155
bool
separateFillStroke(
const
QPainter *,
const
QSvgExtraStates &)
const
override;
156
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
157
Type type()
const
override;
158
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
159
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
160
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
161
bool
requiresGroupRendering()
const
override;
162
const
QPolygonF &polygon()
const
{
return
m_poly; }
163
private
:
164
QRectF internalBounds(QPainter *p, QSvgExtraStates &states, BoundsMode mode)
const
;
165
QPolygonF m_poly;
166
};
167
168
class
Q_SVG_EXPORT
QSvgRect
:
public
QSvgNode
169
{
170
public
:
171
QSvgRect(QSvgNode *paren,
const
QRectF &rect, qreal rx=0, qreal ry=0);
172
~QSvgRect() override;
173
174
Type type()
const
override;
175
bool
separateFillStroke(
const
QPainter *,
const
QSvgExtraStates &)
const
override;
176
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
177
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
178
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
179
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
180
QRectF rect()
const
{
return
m_rect; }
181
QPointF radius()
const
{
return
{ m_rx, m_ry }; }
182
private
:
183
QRectF internalBounds(QPainter *p, QSvgExtraStates &states, BoundsMode mode)
const
;
184
QRectF m_rect;
185
qreal m_rx, m_ry;
186
};
187
188
class
QSvgTspan;
189
190
class
Q_SVG_EXPORT
QSvgText
:
public
QSvgNode
191
{
192
public
:
193
enum
WhitespaceMode
194
{
195
Default,
196
Preserve
197
};
198
199
QSvgText(QSvgNode *parent,
const
QPointF &coord);
200
~QSvgText() override;
201
202
void
setTextArea(
const
QSizeF &size);
203
204
void
drawCommand(QPainter *p, QSvgExtraStates &states) override;
205
bool
shouldDrawNode(QPainter *p, QSvgExtraStates &states)
const
override;
206
Type type()
const
override;
207
bool
separateFillStroke(
const
QPainter *,
const
QSvgExtraStates &)
const
override;
208
209
void
addTspan(QSvgTspan *tspan) {m_tspans.append(tspan);}
210
const
QList<QSvgTspan *> tspans()
const
{
return
m_tspans; }
211
void
addText(QStringView text);
212
void
addLineBreak() {m_tspans.append(LINEBREAK);}
213
void
setWhitespaceMode(WhitespaceMode mode) {m_mode = mode;}
214
215
QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states)
const
override;
216
QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const
override;
217
218
QPointF position()
const
{
return
m_coord; }
219
QSizeF size()
const
{
return
m_size; }
220
WhitespaceMode whitespaceMode()
const
{
return
m_mode; }
221
222
private
:
223
void
draw_helper(QPainter *p, QSvgExtraStates &states, QRectF *boundingRect =
nullptr
)
const
;
224
225
static
QSvgTspan *
const
LINEBREAK;
226
227
QPointF m_coord;
228
QSizeF m_size;
229
230
// 'm_tspans' is also used to store characters outside tspans and line breaks.
231
// If a 'm_tspan' item is null, it indicates a line break.
232
QList<QSvgTspan *> m_tspans;
233
234
Type m_type;
235
WhitespaceMode m_mode;
236
237
mutable
std::optional<QList<
const
QSvgGlyph *> > m_glyphsToDraw;
238
};
239
240
class
Q_SVG_EXPORT
QSvgTspan
:
public
QSvgNode
241
{
242
public
:
243
// tspans are also used to store normal text, so the 'isProperTspan' is used to separate text from tspan.
244
QSvgTspan(QSvgNode *parent,
bool
isProperTspan =
true
)
245
: QSvgNode(parent), m_mode(QSvgText::Default), m_isTspan(isProperTspan)
246
{
247
}
248
~QSvgTspan() override;
249
250
Type type()
const
override {
return
Tspan; }
251
void
drawCommand(QPainter *, QSvgExtraStates &) override { Q_ASSERT(!
"Tspans should be drawn through QSvgText::draw()."
); }
252
void
addText(QStringView text) {m_text += text;}
253
const
QString &text()
const
{
return
m_text;}
254
bool
isTspan()
const
{
return
m_isTspan;}
255
void
setWhitespaceMode(QSvgText::WhitespaceMode mode) {m_mode = mode;}
256
QSvgText::WhitespaceMode whitespaceMode()
const
{
return
m_mode;}
257
258
// Absolute x/y coordinates taken at face value from the tspan's attributes, in the
259
// current user coordinate system (same space as the enclosing <text> element's x/y).
260
// Unset axes are NaN and are filled in from the surrounding text flow at layout time.
261
// SVG allows a list of coordinates; only the first (the run's start) is kept.
262
void
setX(qreal x) { m_x = x; }
263
void
setY(qreal y) { m_y = y; }
264
bool
hasX()
const
{
return
!qIsNaN(m_x); }
265
bool
hasY()
const
{
return
!qIsNaN(m_y); }
266
bool
hasPosition()
const
{
return
hasX() || hasY(); }
267
qreal x()
const
{
return
m_x; }
268
qreal y()
const
{
return
m_y; }
269
private
:
270
QString m_text;
271
QSvgText::WhitespaceMode m_mode;
272
bool
m_isTspan;
273
qreal m_x{qQNaN()};
274
qreal m_y{qQNaN()};
275
};
276
277
class
QSvgUse
:
public
QSvgNode
278
{
279
public
:
280
QSvgUse
(
const
QPointF &start, QSvgNode *parent, QSvgNode *link);
281
QSvgUse(
const
QPointF &start, QSvgNode *parent,
const
QString &linkId)
282
:
QSvgUse
(start, parent,
nullptr
)
283
{ m_linkId = linkId; }
284
~
QSvgUse
()
override
;
285
286
void
drawCommand
(
QPainter
*p, QSvgExtraStates &states)
override
;
287
Type
type
()
const
override
;
288
QRectF
internalBounds
(
QPainter
*p, QSvgExtraStates &states)
const
override
;
289
QRectF
decoratedInternalBounds
(
QPainter
*p, QSvgExtraStates &states)
const
override
;
290
bool
isResolved
()
const
{
return
m_link !=
nullptr
; }
291
const
QString &
linkId
()
const
{
return
m_linkId; }
292
void
setLink
(QSvgNode *link) { m_link = link; }
293
QSvgNode *
link
()
const
{
return
m_link; }
294
QPointF
start
()
const
{
return
m_start; }
295
bool
isRecursing
()
const
{
return
m_recursing; }
296
297
private
:
298
QSvgNode *m_link;
299
QPointF m_start;
300
QString m_linkId;
301
mutable
bool
m_recursing;
302
};
303
304
class
QSvgVideo
:
public
QSvgNode
305
{
306
public
:
307
~
QSvgVideo
()
override
;
308
309
void
drawCommand
(
QPainter
*, QSvgExtraStates &)
override
{};
310
Type
type
()
const
override
;
311
};
312
313
QT_END_NAMESPACE
314
315
#
endif
// QSVGGRAPHICS_P_H
QByteArray::FromBase64Result
\inmodule QtCore
Definition
qbytearray.h:824
QPaintEngine::QPainter
friend class QPainter
Definition
qpaintengine.h:220
QSvgCircle
Definition
qsvggraphics_p.h:64
QSvgDefs
Definition
qsvgstructure_p.h:67
QSvgDocument
Definition
qsvgdocument_p.h:42
QSvgDummyNode
Definition
qsvggraphics_p.h:38
QSvgEllipse
Definition
qsvggraphics_p.h:47
QSvgFilterContainer
Definition
qsvgstructure_p.h:209
QSvgFont
Definition
qsvgfont_p.h:44
QSvgG
Definition
qsvgstructure_p.h:55
QSvgGlyph
Definition
qsvgfont_p.h:32
QSvgHandler
Definition
qsvghandler_p.h:50
QSvgImage
Definition
qsvggraphics_p.h:73
QSvgLine
Definition
qsvggraphics_p.h:95
QSvgMarker
Definition
qsvgstructure_p.h:167
QSvgMask
Definition
qsvgstructure_p.h:252
QSvgNode
Definition
qsvgnode_p.h:29
QSvgPath
Definition
qsvggraphics_p.h:113
QSvgPattern
Definition
qsvgstructure_p.h:280
QSvgPolygon
Definition
qsvggraphics_p.h:131
QSvgPolyline
Definition
qsvggraphics_p.h:150
QSvgRect
Definition
qsvggraphics_p.h:169
QSvgStructureNode
Definition
qsvgstructure_p.h:35
QSvgSwitch
Definition
qsvgstructure_p.h:235
QSvgSymbolLike
Definition
qsvgstructure_p.h:78
QSvgText
Definition
qsvggraphics_p.h:191
QSvgTspan
Definition
qsvggraphics_p.h:241
QSvgUse
Definition
qsvggraphics_p.h:278
QSvgUse::decoratedInternalBounds
QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states) const override
Definition
qsvggraphics.cpp:764
QSvgUse::link
QSvgNode * link() const
Definition
qsvggraphics_p.h:293
QSvgUse::setLink
void setLink(QSvgNode *link)
Definition
qsvggraphics_p.h:292
QSvgUse::drawCommand
void drawCommand(QPainter *p, QSvgExtraStates &states) override
Definition
qsvggraphics.cpp:654
QSvgUse::isResolved
bool isResolved() const
Definition
qsvggraphics_p.h:290
QSvgUse::~QSvgUse
~QSvgUse() override
QSvgUse::internalBounds
QRectF internalBounds(QPainter *p, QSvgExtraStates &states) const override
Definition
qsvggraphics.cpp:752
QSvgUse::isRecursing
bool isRecursing() const
Definition
qsvggraphics_p.h:295
QSvgUse::start
QPointF start() const
Definition
qsvggraphics_p.h:294
QSvgUse::linkId
const QString & linkId() const
Definition
qsvggraphics_p.h:291
QSvgUse::QSvgUse
QSvgUse(const QPointF &start, QSvgNode *parent, QSvgNode *link)
Definition
qsvggraphics.cpp:645
QSvgUse::type
Type type() const override
Definition
qsvggraphics.cpp:739
QSvgVideo
Definition
qsvggraphics_p.h:305
QSvgVideo::~QSvgVideo
~QSvgVideo() override
QSvgVideo::drawCommand
void drawCommand(QPainter *, QSvgExtraStates &) override
Definition
qsvggraphics_p.h:309
QSvgVideo::type
Type type() const override
Definition
qsvggraphics.cpp:747
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
QtSvg
Definition
qtsvgglobal.h:15
QtSvg::Option
Option
Definition
qtsvgglobal.h:17
QtSvg::AssumeTrustedSource
@ AssumeTrustedSource
Definition
qtsvgglobal.h:20
QtSvg::DisableSMILAnimations
@ DisableSMILAnimations
Definition
qtsvgglobal.h:23
QtSvg::DisableCSSAnimations
@ DisableCSSAnimations
Definition
qtsvgglobal.h:24
QtSvg::Tiny12FeaturesOnly
@ Tiny12FeaturesOnly
Definition
qtsvgglobal.h:19
QtSvg::NoOption
@ NoOption
Definition
qtsvgglobal.h:18
QtSvg::DisableAnimations
@ DisableAnimations
Definition
qtsvgglobal.h:27
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
operator<<
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition
qdir.cpp:2620
qPrintable
#define qPrintable(string)
Definition
qstring.h:1718
qt_inflateSvgzDataFrom
static QByteArray qt_inflateSvgzDataFrom(QIODevice *device, bool doCheckContent=true)
Definition
qsvgdocument.cpp:73
isValidMatrix
static bool isValidMatrix(const QTransform &transform)
Definition
qsvgdocument.cpp:427
hasSvgHeader
static bool hasSvgHeader(const QByteArray &buf)
Definition
qsvgdocument.cpp:51
calculateSizeValue
std::optional< int > calculateSizeValue(bool isPercent, int sizeValue, qreal viewBoxSizeValue)
Definition
qsvgdocument_p.h:130
resolveColor
Q_AUTOTEST_EXPORT bool resolveColor(QStringView colorStr, QColor &color, QSvgHandler *handler)
Definition
qsvghandler.cpp:483
qtsvg
src
svg
qsvggraphics_p.h
Generated on
for Qt by
1.18.0