Qt 4.8
qsvgtinydocument_p.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtSvg module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef QSVGTINYDOCUMENT_P_H
43 #define QSVGTINYDOCUMENT_P_H
44 
45 //
46 // W A R N I N G
47 // -------------
48 //
49 // This file is not part of the Qt API. It exists purely as an
50 // implementation detail. This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55 
56 #include "qsvgstructure_p.h"
57 
58 #ifndef QT_NO_SVG
59 
60 #include "QtCore/qrect.h"
61 #include "QtCore/qlist.h"
62 #include "QtCore/qhash.h"
63 #include "QtCore/qdatetime.h"
64 #include "QtCore/qxmlstream.h"
65 #include "qsvgstyle_p.h"
66 #include "qsvgfont_p.h"
67 
69 
70 class QPainter;
71 class QByteArray;
72 class QSvgFont;
73 
75 {
76 public:
77  static QSvgTinyDocument * load(const QString &file);
78  static QSvgTinyDocument * load(const QByteArray &contents);
79  static QSvgTinyDocument * load(QXmlStreamReader *contents);
80 public:
83  Type type() const;
84 
85  QSize size() const;
86  void setWidth(int len, bool percent);
87  void setHeight(int len, bool percent);
88  int width() const;
89  int height() const;
90  bool widthPercent() const;
91  bool heightPercent() const;
92 
93  bool preserveAspectRatio() const;
94 
95  QRectF viewBox() const;
96  void setViewBox(const QRectF &rect);
97 
98  virtual void draw(QPainter *p, QSvgExtraStates &);//from the QSvgNode
99 
100  void draw(QPainter *p);
101  void draw(QPainter *p, const QRectF &bounds);
102  void draw(QPainter *p, const QString &id,
103  const QRectF &bounds=QRectF());
104 
105  QMatrix matrixForElement(const QString &id) const;
106  QRectF boundsOnElement(const QString &id) const;
107  bool elementExists(const QString &id) const;
108 
109  void addSvgFont(QSvgFont *);
110  QSvgFont *svgFont(const QString &family) const;
111  void addNamedNode(const QString &id, QSvgNode *node);
112  QSvgNode *namedNode(const QString &id) const;
113  void addNamedStyle(const QString &id, QSvgFillStyleProperty *style);
114  QSvgFillStyleProperty *namedStyle(const QString &id) const;
115 
116  void restartAnimation();
117  int currentElapsed() const;
118  bool animated() const;
119  void setAnimated(bool a);
120  int animationDuration() const;
121  int currentFrame() const;
122  void setCurrentFrame(int);
123  void setFramesPerSecond(int num);
124 private:
125  void mapSourceToTarget(QPainter *p, const QRectF &targetRect, const QRectF &sourceRect = QRectF());
126 private:
130 
131  mutable QRectF m_viewBox;
132 
136 
140  int m_fps;
141 
143 };
144 
146 {
147  if (m_size.isEmpty()) {
148  return viewBox().size().toSize();
149  } else {
150  return m_size;
151  }
152 }
153 
154 inline int QSvgTinyDocument::width() const
155 {
156  return size().width();
157 }
158 
159 inline int QSvgTinyDocument::height() const
160 {
161  return size().height();
162 }
163 
165 {
166  return m_widthPercent;
167 }
168 
170 {
171  return m_heightPercent;
172 }
173 
175 {
176  if (m_viewBox.isNull())
177  m_viewBox = transformedBounds();
178 
179  return m_viewBox;
180 }
181 
183 {
184  return false;
185 }
186 
188 {
189  return m_time.elapsed();
190 }
191 
193 {
194  return m_animationDuration;
195 }
196 
198 
199 #endif // QT_NO_SVG
200 #endif // QSVGTINYDOCUMENT_P_H
The QPainter class performs low-level painting on widgets and other paint devices.
Definition: qpainter.h:86
virtual Type type() const =0
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
The QMatrix class specifies 2D transformations of a coordinate system.
Definition: qmatrix.h:61
QRectF transformedBounds() const
Definition: qsvgnode.cpp:204
int animationDuration() const
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
bool widthPercent() const
long ASN1_INTEGER_get ASN1_INTEGER * a
#define Q_SVG_EXPORT
Definition: qglobal.h:1453
The QString class provides a Unicode character string.
Definition: qstring.h:83
The QHash class is a template class that provides a hash-table-based dictionary.
Definition: qdatastream.h:66
bool heightPercent() const
QHash< QString, QSvgRefCounter< QSvgFillStyleProperty > > m_namedStyles
The QTime class provides clock time functions.
Definition: qdatetime.h:148
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
QRectF viewBox() const
The QRectF class defines a rectangle in the plane using floating point precision. ...
Definition: qrect.h:511
int currentElapsed() const
bool preserveAspectRatio() const
friend class QSvgTinyDocument
Definition: qsvgnode_p.h:180
QSvgExtraStates m_states
#define load(x)
virtual void draw(QPainter *p, QSvgExtraStates &states)=0
The QSize class defines the size of a two-dimensional object using integer point precision.
Definition: qsize.h:53
The QXmlStreamReader class provides a fast parser for reading well-formed XML via a simple streaming ...
Definition: qxmlstream.h:290
QHash< QString, QSvgNode * > m_namedNodes
QHash< QString, QSvgRefCounter< QSvgFont > > m_fonts