Revision control

++ // Copyright (C) 2016 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++
++ #ifndef QSVGNODE_P_H
++ #define QSVGNODE_P_H
++
++ //
++ // W A R N I N G
++ // -------------
++ //
++ // This file is not part of the Qt API. It exists purely as an
++ // implementation detail. This header file may change from version to
++ // version without notice, or even be removed.
++ //
++ // We mean it.
++ //
++
++ #include "qsvgstyle_p.h"
++ #include <QtCore/qstring.h>
++
++ QT_BEGIN_NAMESPACE
++
++ class QPainter;
++ class QSvgDocument;
++
++ class Q_SVG_EXPORT QSvgNode
++ {
++ public:
++ enum Type
++ {
++ Doc,
++ Group,
++ Defs,
++ Switch,
++ AnimateColor,
++ AnimateTransform,
++ Circle,
++ Ellipse,
++ Image,
++ Line,
++ Path,
++ Polygon,
++ Polyline,
++ Rect,
++ Text,
++ Textarea,
++ Tspan,
++ Use,
++ Video,
++ Mask,
++ Symbol,
++ Marker,
++ Pattern,
++ Filter,
++ FeMerge,
++ FeMergenode,
++ FeColormatrix,
++ FeGaussianblur,
++ FeOffset,
++ FeComposite,
++ FeFlood,
++ FeBlend,
++ FeUnsupported,
++ Font,
++ };
++ enum DisplayMode {
++ InlineMode,
++ BlockMode,
++ ListItemMode,
++ RunInMode,
++ CompactMode,
++ MarkerMode,
++ TableMode,
++ InlineTableMode,
++ TableRowGroupMode,
++ TableHeaderGroupMode,
++ TableFooterGroupMode,
++ TableRowMode,
++ TableColumnGroupMode,
++ TableColumnMode,
++ TableCellMode,
++ TableCaptionMode,
++ NoneMode,
++ InheritMode
++ };
++
++ public:
++ QSvgNode(QSvgNode *parent=0);
++ virtual ~QSvgNode();
++ void draw(QPainter *p, QSvgExtraStates &states);
++ virtual bool separateFillStroke(const QPainter *, const QSvgExtraStates &) const {return false;}
++ virtual void drawCommand(QPainter *p, QSvgExtraStates &states) = 0;
++ void fillThenStroke(QPainter *p, QSvgExtraStates &states);
++ QImage drawIntoBuffer(QPainter *p, QSvgExtraStates &states, const QRect &boundsRect);
++ void applyMaskToBuffer(QImage *proxy, const QImage &mask) const;
++ void drawWithMask(QPainter *p, QSvgExtraStates &states, const QImage &mask, const QRect &boundsRect);
++ void applyBufferToCanvas(QPainter *p, const QImage &proxy) const;
++
++ QSvgNode *parent() const;
++ bool isDescendantOf(const QSvgNode *parent) const;
++
++ void appendStyleProperty(QSvgStylePropertyPtr prop);
++ void applyStyle(QPainter *p, QSvgExtraStates &states) const;
++ void applyStyleRecursive(QPainter *p, QSvgExtraStates &states) const;
++ void revertStyle(QPainter *p, QSvgExtraStates &states) const;
++ void revertStyleRecursive(QPainter *p, QSvgExtraStates &states) const;
++ void applyAnimatedStyle(QPainter *p, QSvgExtraStates &states) const;
++ void revertAnimatedStyle(QPainter *p, QSvgExtraStates &states) const;
++ QSvgStyleProperty *styleProperty(QSvgStyleProperty::Type type) const;
++
++ virtual Type type() const = 0;
++ QLatin1StringView typeName() const;
++ virtual QRectF internalFastBounds(QPainter *p, QSvgExtraStates &states) const;
++ virtual QRectF internalBounds(QPainter *p, QSvgExtraStates &states) const;
++ QRectF bounds(QPainter *p, QSvgExtraStates &states) const;
++ QRectF bounds(const QSvgDocument *doc) const;
++ virtual QRectF decoratedInternalBounds(QPainter *p, QSvgExtraStates &states) const;
++ virtual QRectF decoratedBounds(QPainter *p, QSvgExtraStates &states) const;
++
++ void setRequiredFeatures(const QStringList &lst);
++ const QStringList & requiredFeatures() const;
++
++ void setRequiredExtensions(const QStringList &lst);
++ const QStringList & requiredExtensions() const;
++
++ void setRequiredLanguages(const QStringList &lst);
++ const QStringList & requiredLanguages() const;
++
++ void setRequiredFormats(const QStringList &lst);
++ const QStringList & requiredFormats() const;
++
++ void setRequiredFonts(const QStringList &lst);
++ const QStringList & requiredFonts() const;
++
++ void setVisible(bool visible);
++ bool isVisible() const;
++
++ void setDisplayMode(DisplayMode display);
++ DisplayMode displayMode() const;
++
++ QString nodeId() const;
++ void setNodeId(const QString &i);
++
++ QString xmlClass() const;
++ void setXmlClass(const QString &str);
++
++ QString maskId() const;
++ void setMaskId(const QString &str);
++ bool hasMask() const;
++
++ QString filterId() const;
++ void setFilterId(const QString &str);
++ bool hasFilter() const;
++
++ QString markerStartId() const;
++ void setMarkerStartId(const QString &str);
++ bool hasMarkerStart() const;
++
++ QString markerMidId() const;
++ void setMarkerMidId(const QString &str);
++ bool hasMarkerMid() const;
++
++ QString markerEndId() const;
++ void setMarkerEndId(const QString &str);
++ bool hasMarkerEnd() const;
++
++ bool hasAnyMarker() const;
++
++ virtual bool requiresGroupRendering() const;
++
++ virtual bool shouldDrawNode(QPainter *p, QSvgExtraStates &states) const;
++ const QSvgStaticStyle &style() const { return m_style; }
++ protected:
++ mutable QSvgStaticStyle m_style;
++ mutable QSvgAnimatedStyle m_animatedStyle;
++
++ QRectF filterRegion(const QSvgDocument *doc, QRectF bounds) const;
++
++ static qreal strokeWidth(QPainter *p);
++ static void initPainter(QPainter *p);
++
++ enum BoundsMode {
++ Simplistic,
++ IncludeMiterLimit
++ };
++ static QRectF boundsOnStroke(QPainter *p, const QPainterPath &path,
++ qreal width, BoundsMode mode);
++
++ private:
++ QSvgNode *m_parent;
++
++ QStringList m_requiredFeatures;
++ QStringList m_requiredExtensions;
++ QStringList m_requiredLanguages;
++ QStringList m_requiredFormats;
++ QStringList m_requiredFonts;
++
++ QString m_id;
++ QString m_class;
++ QString m_maskId;
++ QString m_filterId;
++ QString m_markerStartId;
++ QString m_markerMidId;
++ QString m_markerEndId;
++
++ mutable QRectF m_cachedBounds;
++ DisplayMode m_displayMode{DisplayMode::BlockMode};
++ bool m_visible{true};
++
++ friend class QSvgDocument;
++
++ private:
++ Q_DISABLE_COPY_X(QSvgNode, "Classes inheriting from this class may contain"
++ "a vector of unique pointers as a member variable")
++ };
++
++ inline QSvgNode *QSvgNode::parent() const
++ {
++ return m_parent;
++ }
++
++ inline bool QSvgNode::isVisible() const
++ {
++ return m_visible;
++ }
++
++ inline QString QSvgNode::nodeId() const
++ {
++ return m_id;
++ }
++
++ inline QString QSvgNode::xmlClass() const
++ {
++ return m_class;
++ }
++
++ QT_END_NAMESPACE
++
++ #endif // QSVGNODE_P_H