36 QSvgStructureNode(QSvgNode *parent);
37 ~QSvgStructureNode() override;
39 QSvgNode *scopeNode(
const QString &id)
const;
40 void addChild(std::unique_ptr<QSvgNode> child,
const QString &id);
41 QRectF internalBounds(QPainter *p, QSvgExtraStates &states)
const override;
42 QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const override;
43 QSvgNode *previousSiblingNode(QSvgNode *n)
const;
44 const std::list<std::unique_ptr<QSvgNode>> &renderers()
const {
return m_renderers; }
47 void releaseDescendants();
50 std::list<std::unique_ptr<QSvgNode>> m_renderers;
51 mutable bool m_recursing =
false;
83 enum class Overflow : quint8 {
90 enum class PreserveAspectRatio : quint8 {
100 xMask = xMin | xMid | xMax,
101 yMask = yMin | yMid | yMax,
102 xyMask = xMask | yMask,
103 meetSliceMask = meet | slice
105 Q_DECLARE_FLAGS(PreserveAspectRatios, PreserveAspectRatio)
107 QSvgSymbolLike(QSvgNode *parent, QRectF bounds, QRectF viewBox, QPointF refP,
108 QSvgSymbolLike::PreserveAspectRatios pAspectRatios, QSvgSymbolLike::Overflow overflow);
109 ~QSvgSymbolLike() override;
111 void drawCommand(QPainter *, QSvgExtraStates &) override {};
112 QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states)
const override;
113 bool requiresGroupRendering()
const override;
115 QRectF viewBox()
const
130 QTransform aspectRatioTransform()
const;
131 QRectF clipRect()
const;
133 Overflow overflow()
const
138 PreserveAspectRatios preserveAspectRatios()
const
140 return m_pAspectRatios;
144 void setPainterToRectAndAdjustment(QPainter *p)
const;
149 PreserveAspectRatios m_pAspectRatios;
155class Q_SVG_EXPORT QSvgSymbol :
public QSvgSymbolLike
158 QSvgSymbol(QSvgNode *parent, QRectF bounds, QRectF viewBox, QPointF refP,
159 QSvgSymbolLike::PreserveAspectRatios pAspectRatios, QSvgSymbolLike::Overflow overflow);
160 ~QSvgSymbol() override;
162 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
163 Type type()
const override;
169 enum class Orientation : quint8 {
174 enum class MarkerUnits : quint8 {
179 QSvgMarker(QSvgNode *parent, QRectF bounds, QRectF viewBox, QPointF refP,
180 QSvgSymbolLike::PreserveAspectRatios pAspectRatios, QSvgSymbolLike::Overflow overflow,
181 Orientation orientation, qreal orientationAngle, MarkerUnits markerUnits);
182 ~QSvgMarker() override;
184 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
185 static void drawMarkersForNode(QSvgNode *node, QPainter *p, QSvgExtraStates &states);
186 static QRectF markersBoundsForNode(
const QSvgNode *node, QPainter *p, QSvgExtraStates &states);
188 Orientation orientation()
const {
189 return m_orientation;
191 qreal orientationAngle()
const {
192 return m_orientationAngle;
194 MarkerUnits markerUnits()
const {
195 return m_markerUnits;
197 Type type()
const override;
200 static void drawHelper(
const QSvgNode *node, QPainter *p,
201 QSvgExtraStates &states, QRectF *boundingRect =
nullptr);
203 Orientation m_orientation;
204 qreal m_orientationAngle;
205 MarkerUnits m_markerUnits;
211 QSvgFilterContainer(QSvgNode *parent,
const QSvgRectF &bounds, QtSvg::UnitTypes filterUnits, QtSvg::UnitTypes primitiveUnits);
212 ~QSvgFilterContainer() override;
214 void drawCommand(QPainter *, QSvgExtraStates &) override {};
215 bool shouldDrawNode(QPainter *, QSvgExtraStates &)
const override;
216 Type type()
const override;
217 QImage applyFilter(
const QImage &buffer, QPainter *p,
const QRectF &bounds)
const;
218 void setSupported(
bool supported);
219 bool supported()
const;
220 QRectF filterRegion(
const QRectF &itemBounds)
const;
222 QSvgRectF rect()
const {
return m_rect; }
223 QtSvg::UnitTypes filterUnits()
const {
return m_filterUnits; }
224 QtSvg::UnitTypes primitiveUnits()
const {
return m_primitiveUnits; }
228 QtSvg::UnitTypes m_filterUnits;
229 QtSvg::UnitTypes m_primitiveUnits;
237 QSvgSwitch(QSvgNode *parent);
238 ~QSvgSwitch() override;
240 void drawCommand(QPainter *p, QSvgExtraStates &states) override;
241 Type type()
const override;
243 QSvgNode *childToRender()
const;
247 QString m_systemLanguage;
248 QString m_systemLanguagePrefix;
251class Q_SVG_EXPORT
QSvgMask :
public QSvgStructureNode
254 QSvgMask(QSvgNode *parent, QSvgRectF bounds,
255 QtSvg::UnitTypes contentsUnits);
256 ~QSvgMask() override;
258 void drawCommand(QPainter *, QSvgExtraStates &) override {};
259 bool shouldDrawNode(QPainter *, QSvgExtraStates &)
const override;
260 Type type()
const override;
261 QImage createMask(QPainter *p, QSvgExtraStates &states, QSvgNode *targetNode, QRectF *globalRect)
const;
262 QImage createMask(QPainter *p, QSvgExtraStates &states,
const QRectF &localRect, QRectF *globalRect)
const;
264 QSvgRectF rect()
const
269 QtSvg::UnitTypes contentUnits()
const
271 return m_contentUnits;
276 QtSvg::UnitTypes m_contentUnits;
282 QSvgPattern(QSvgNode *parent, QSvgRectF bounds, QRectF viewBox,
283 QtSvg::UnitTypes contentUnits, QTransform transform);
284 ~QSvgPattern() override;
286 void drawCommand(QPainter *, QSvgExtraStates &) override {};
287 bool shouldDrawNode(QPainter *, QSvgExtraStates &)
const override;
288 QImage patternImage(QPainter *p, QSvgExtraStates &states,
const QSvgNode *patternElement);
289 Type type()
const override;
290 const QTransform& appliedTransform()
const {
return m_appliedTransform; }
291 const QTransform &transform()
const {
return m_transform; }
292 const QSvgRectF &rect()
const {
return m_rect; }
293 const QRectF &viewBox()
const {
return m_viewBox; }
294 QtSvg::UnitTypes contentUnits()
const {
return m_contentUnits; }
297 QImage renderPattern(QSize size, qreal contentScaleX, qreal contentScaleY);
298 void calculateAppliedTransform(QTransform& worldTransform, QRectF peLocalBB, QSize imageSize);
301 QTransform m_appliedTransform;
304 QtSvg::UnitTypes m_contentUnits;
305 mutable bool m_isRendering;
306 QTransform m_transform;