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
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
4#ifndef QSVGGRAPHICS_P_H
5#define QSVGGRAPHICS_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
21#include "QtGui/qpainterpath.h"
22#include "QtGui/qimage.h"
23#include "QtGui/qtextlayout.h"
24#include "QtGui/qtextoption.h"
25#include "QtCore/qstack.h"
26
28
29class QTextCharFormat;
30
31class Q_SVG_EXPORT QSvgAnimation : public QSvgNode
32{
33public:
34 void drawCommand(QPainter *, QSvgExtraStates &) override;
35 Type type() const override;
36};
37
38class Q_SVG_EXPORT QSvgEllipse : public QSvgNode
39{
40public:
41 QSvgEllipse(QSvgNode *parent, const QRectF &rect);
42 bool separateFillStroke() const override;
43 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
44 Type type() const override;
45 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
46 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
47 QRectF rect() const { return m_bounds; }
48private:
49 QRectF m_bounds;
50};
51
52class Q_SVG_EXPORT QSvgCircle : public QSvgEllipse
53{
54public:
55 QSvgCircle(QSvgNode *parent, const QRectF &rect) : QSvgEllipse(parent, rect) { }
56 Type type() const override;
57};
58
59class Q_SVG_EXPORT QSvgImage : public QSvgNode
60{
61public:
62 QSvgImage(QSvgNode *parent,
63 const QImage &image,
64 const QString &filename,
65 const QRectF &bounds);
66 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
67 Type type() const override;
68 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
69
70 QRectF rect() const { return m_bounds; }
71 const QImage &image() const { return m_image; }
72 QString filename() const { return m_filename; }
73private:
74 QString m_filename;
75 QImage m_image;
76 QRectF m_bounds;
77};
78
79class Q_SVG_EXPORT QSvgLine : public QSvgNode
80{
81public:
82 QSvgLine(QSvgNode *parent, const QLineF &line);
83 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
84 Type type() const override;
85 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
86 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
87 QLineF line() const { return m_line; }
88private:
89 QLineF m_line;
90};
91
92class Q_SVG_EXPORT QSvgPath : public QSvgNode
93{
94public:
95 QSvgPath(QSvgNode *parent, const QPainterPath &qpath);
96 bool separateFillStroke() const override;
97 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
98 Type type() const override;
99 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
100 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
101 const QPainterPath &path() const { return m_path; }
102private:
103 QPainterPath m_path;
104};
105
106class Q_SVG_EXPORT QSvgPolygon : public QSvgNode
107{
108public:
109 QSvgPolygon(QSvgNode *parent, const QPolygonF &poly);
110 bool separateFillStroke() const override;
111 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
112 Type type() const override;
113 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
114 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
115 const QPolygonF &polygon() const { return m_poly; }
116private:
117 QPolygonF m_poly;
118};
119
120class Q_SVG_EXPORT QSvgPolyline : public QSvgNode
121{
122public:
123 QSvgPolyline(QSvgNode *parent, const QPolygonF &poly);
124 bool separateFillStroke() const override;
125 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
126 Type type() const override;
127 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
128 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
129 const QPolygonF &polygon() const { return m_poly; }
130private:
131 QPolygonF m_poly;
132};
133
134class Q_SVG_EXPORT QSvgRect : public QSvgNode
135{
136public:
137 QSvgRect(QSvgNode *paren, const QRectF &rect, qreal rx=0, qreal ry=0);
138 Type type() const override;
139 bool separateFillStroke() const override;
140 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
141 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
142 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
143 QRectF rect() const { return m_rect; }
144 QPointF radius() const { return { m_rx, m_ry }; }
145private:
146 QRectF m_rect;
147 qreal m_rx, m_ry;
148};
149
150class QSvgTspan;
151
152class Q_SVG_EXPORT QSvgText : public QSvgNode
153{
154public:
156 {
158 Preserve
159 };
160
161 QSvgText(QSvgNode *parent, const QPointF &coord);
162 ~QSvgText();
163 void setTextArea(const QSizeF &size);
164
165 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
166 bool shouldDrawNode(QPainter *p, QSvgExtraStates &states) const override;
167 Type type() const override;
168
169 void addTspan(QSvgTspan *tspan) {m_tspans.append(tspan);}
170 const QList<QSvgTspan *> tspans() const { return m_tspans; }
171 void addText(const QString &text);
172 void addLineBreak() {m_tspans.append(LINEBREAK);}
174
175 QRectF fastBounds(QPainter *p, QSvgExtraStates &states) const override;
176 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
177
178 QPointF position() const { return m_coord; }
179 QSizeF size() const { return m_size; }
180 WhitespaceMode whitespaceMode() const { return m_mode; }
181
182private:
183 void draw_helper(QPainter *p, QSvgExtraStates &states, QRectF *boundingRect = nullptr) const;
184
185 static QSvgTspan * const LINEBREAK;
186
187 QPointF m_coord;
188
189 // 'm_tspans' is also used to store characters outside tspans and line breaks.
190 // If a 'm_tspan' item is null, it indicates a line break.
191 QList<QSvgTspan *> m_tspans;
192
193 Type m_type;
194 QSizeF m_size;
195 WhitespaceMode m_mode;
196};
197
198class Q_SVG_EXPORT QSvgTspan : public QSvgNode
199{
200public:
201 // tspans are also used to store normal text, so the 'isProperTspan' is used to separate text from tspan.
202 QSvgTspan(QSvgNode *parent, bool isProperTspan = true)
203 : QSvgNode(parent), m_mode(QSvgText::Default), m_isTspan(isProperTspan)
204 {
205 }
207 Type type() const override { return Tspan; }
208 void drawCommand(QPainter *, QSvgExtraStates &) override { Q_ASSERT(!"Tspans should be drawn through QSvgText::draw()."); }
209 void addText(const QString &text) {m_text += text;}
210 const QString &text() const {return m_text;}
211 bool isTspan() const {return m_isTspan;}
214private:
215 QString m_text;
217 bool m_isTspan;
218};
219
220class QSvgUse : public QSvgNode
221{
222public:
226 { m_linkId = linkId; }
227 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
228 Type type() const override;
229 QRectF bounds(QPainter *p, QSvgExtraStates &states) const override;
230 bool isResolved() const { return m_link != nullptr; }
231 QString linkId() const { return m_linkId; }
232 void setLink(QSvgNode *link) { m_link = link; }
233 QSvgNode *link() const { return m_link; }
234 QPointF start() const { return m_start; }
235 bool isRecursing() const { return m_recursing; }
236
237private:
238 QSvgNode *m_link;
239 QPointF m_start;
240 QString m_linkId;
241 mutable bool m_recursing;
242};
243
244class QSvgVideo : public QSvgNode
245{
246public:
247 void drawCommand(QPainter *, QSvgExtraStates &) override {};
248 Type type() const override;
249};
250
252
253#endif // QSVGGRAPHICS_P_H
\inmodule QtGui
Definition qimage.h:37
\inmodule QtCore\compares equality \compareswith equality QLine \endcompareswith
Definition qline.h:192
\inmodule QtGui
The QPainter class performs low-level painting on widgets and other paint devices.
Definition qpainter.h:46
\inmodule QtCore\reentrant
Definition qpoint.h:217
The QPolygonF class provides a list of points using floating point precision.
Definition qpolygon.h:96
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore
Definition qsize.h:208
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QSvgCircle(QSvgNode *parent, const QRectF &rect)
QRectF rect() const
const QImage & image() const
QRectF rect() const
QString filename() const
QLineF line() const
QSvgNode * parent() const
Definition qsvgnode_p.h:202
const QPainterPath & path() const
const QPolygonF & polygon() const
const QPolygonF & polygon() const
QPointF radius() const
QRectF rect() const
QPointF position() const
QSizeF size() const
const QList< QSvgTspan * > tspans() const
WhitespaceMode whitespaceMode() const
void setWhitespaceMode(WhitespaceMode mode)
void addTspan(QSvgTspan *tspan)
void addLineBreak()
QSvgTspan(QSvgNode *parent, bool isProperTspan=true)
bool isTspan() const
const QString & text() const
void drawCommand(QPainter *, QSvgExtraStates &) override
void setWhitespaceMode(QSvgText::WhitespaceMode mode)
Type type() const override
void addText(const QString &text)
QSvgText::WhitespaceMode whitespaceMode() const
QString linkId() const
QSvgNode * link() const
void setLink(QSvgNode *link)
void drawCommand(QPainter *p, QSvgExtraStates &states) override
bool isResolved() const
bool isRecursing() const
QPointF start() const
QSvgUse(const QPointF &start, QSvgNode *parent, const QString &linkId)
QSvgUse(const QPointF &start, QSvgNode *parent, QSvgNode *link)
Type type() const override
QRectF bounds(QPainter *p, QSvgExtraStates &states) const override
void drawCommand(QPainter *, QSvgExtraStates &) override
Type type() const override
QString text
rect
[4]
Combined button and popup list for selecting options.
Definition image.cpp:4
GLenum mode
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum type
GLuint start
GLuint coord
GLfloat GLfloat p
[1]
GLuint * states
static const QRectF boundingRect(const QPointF *points, int pointCount)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
static QT_BEGIN_NAMESPACE const uint Default
Definition qsplitter_p.h:27
double qreal
Definition qtypes.h:187
QObject::connect nullptr
p ry()++
p rx()++
scene addText("Hello, world!")
Definition moc.h:23