summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEirik Aavitsland <eirik.aavitsland@qt.io>2024-01-17 17:11:38 +0100
committerEirik Aavitsland <eirik.aavitsland@qt.io>2024-01-22 09:30:45 +0100
commit1868b3f6ed10a051dcd0138f580a6b99738361ee (patch)
treefa54f331eddc77ad64cc48a70b8aba8bbd497e54
parentbf86b745e1b768e761d903c296054c9d3ad607aa (diff)
Replace FeatureSet with Options, a more flexible flags parameter
The featureSet enum setting was added for 6.7, but discussions around API review have commented on it as somewhat inflexible, and we have also already identified expected needs for other, similar settings not covered by the featureset concept. For example, more fine-grained control on enabling/disabling of certain features, or a "trusted source" setting that disables certain safety checks. To avoid more API churn, both in the public and all the constructors of the private classes where this setting is used, this commit replaces FeatureSet with Options, a QFlags type where new bitflags can easily be added in the underlying Option enum as needed in the future. Pick-to: 6.7 Change-Id: I07b5cbde2de45f7c8dabeace2b491a11126207be Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r--src/svg/doc/src/qsvgglobal.qdoc22
-rw-r--r--src/svg/doc/src/svgextensions.qdoc4
-rw-r--r--src/svg/qsvghandler.cpp82
-rw-r--r--src/svg/qsvghandler_p.h10
-rw-r--r--src/svg/qsvgnode.cpp12
-rw-r--r--src/svg/qsvgrenderer.cpp25
-rw-r--r--src/svg/qsvgrenderer.h6
-rw-r--r--src/svg/qsvgtinydocument.cpp20
-rw-r--r--src/svg/qsvgtinydocument_p.h12
-rw-r--r--src/svg/qtsvgglobal.h7
-rw-r--r--src/svgwidgets/qsvgwidget.cpp28
-rw-r--r--src/svgwidgets/qsvgwidget.h4
12 files changed, 114 insertions, 118 deletions
diff --git a/src/svg/doc/src/qsvgglobal.qdoc b/src/svg/doc/src/qsvgglobal.qdoc
index 365214b..626c076 100644
--- a/src/svg/doc/src/qsvgglobal.qdoc
+++ b/src/svg/doc/src/qsvgglobal.qdoc
@@ -3,22 +3,20 @@
/*!
\namespace QtSvg
- \brief The QtSvg namespace contains enums used by the svg classes.
+ \brief The QtSvg namespace contains types used by the svg classes.
\inmodule QtSvg
*/
/*!
- \enum QtSvg::FeatureSet
+ \enum QtSvg::Option
+ \since 6.7
- This enum is used to control the parsing and rendering of features
- that go beyond the \l{http://www.w3.org/TR/SVGMobile12}{SVG 1.2 Tiny}
- standard.
+ This enum holds flags that can be used to enable or disable
+ various features of the parsing and rendering of SVG
+ files. Multiple flags can be combined into the QFlags type
+ QtSvg::Options.
- The following feature sets are available for the
- renderer.
-
- \value StaticTiny1_2 Strictly and exclusively parse only tags that are part
- of the SVG 1.2 Tiny Static Feature set.
- \value AllAvailable Parses the extra features supported by the renderer
- from the SVG 1.1 standard.
+ \value Tiny12FeaturesOnly Strictly and exclusively parse only tags that are
+ part of the \l{http://www.w3.org/TR/SVGMobile12}
+ {SVG 1.2 Tiny} Static Feature set.
*/
diff --git a/src/svg/doc/src/svgextensions.qdoc b/src/svg/doc/src/svgextensions.qdoc
index 16f208e..ec11d71 100644
--- a/src/svg/doc/src/svgextensions.qdoc
+++ b/src/svg/doc/src/svgextensions.qdoc
@@ -12,8 +12,8 @@
The module also supports a few extra features which might be useful.
The \l QSvgRenderer parses all features (including the extra feature
set) by default. You can instruct the render to ignore these extra
- features by setting \l QSvgRenderer::featureSet to
- \l QSvg::FeatureSet::StaticTiny1_2.
+ features by passing the QtSvg::Tiny12FeaturesOnly flag in
+ \l QSvgRenderer::setOptions().
\section1 Extended features
diff --git a/src/svg/qsvghandler.cpp b/src/svg/qsvghandler.cpp
index 65fafb7..194096e 100644
--- a/src/svg/qsvghandler.cpp
+++ b/src/svg/qsvghandler.cpp
@@ -243,7 +243,7 @@ QSvgAttributes::QSvgAttributes(const QXmlStreamAttributes &xmlAttributes, QSvgHa
else if (name == QLatin1String("font-variant"))
fontVariant = value;
else if (name == QLatin1String("filter") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
filter = value;
break;
@@ -256,16 +256,16 @@ QSvgAttributes::QSvgAttributes(const QXmlStreamAttributes &xmlAttributes, QSvgHa
case 'm':
if (name == QLatin1String("mask") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
mask = value;
if (name == QLatin1String("marker-start") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
markerStart = value;
if (name == QLatin1String("marker-mid") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
markerMid = value;
if (name == QLatin1String("marker-end") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
markerEnd = value;
break;
@@ -372,7 +372,7 @@ QSvgAttributes::QSvgAttributes(const QXmlStreamAttributes &xmlAttributes, QSvgHa
else if (name == QLatin1String("font-variant"))
fontVariant = value;
else if (name == QLatin1String("filter") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
filter = value;
break;
@@ -383,16 +383,16 @@ QSvgAttributes::QSvgAttributes(const QXmlStreamAttributes &xmlAttributes, QSvgHa
case 'm':
if (name == QLatin1String("mask") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
mask = value;
if (name == QLatin1String("marker-start") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
markerStart = value;
if (name == QLatin1String("marker-mid") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
markerMid = value;
if (name == QLatin1String("marker-end") &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2)
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
markerEnd = value;
break;
@@ -2065,9 +2065,9 @@ static void cssStyleLookup(QSvgNode *node,
#endif // QT_NO_CSSPARSER
-QtSvg::FeatureSet QSvgHandler::featureSet() const
+QtSvg::Options QSvgHandler::options() const
{
- return m_featureSet;
+ return m_options;
}
static inline QStringList stringToList(const QString &str)
@@ -2276,7 +2276,7 @@ static void parseExtendedAttributes(QSvgNode *node,
const QSvgAttributes &attributes,
QSvgHandler *handler)
{
- if (handler->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (handler->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return;
if (!attributes.mask.isEmpty()) {
@@ -2291,7 +2291,7 @@ static void parseExtendedAttributes(QSvgNode *node,
}
if (!attributes.markerStart.isEmpty() &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2) {
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly)) {
QString markerStr = attributes.markerStart.toString().trimmed();
if (markerStr.size() > 3 && markerStr.mid(0, 3) == QLatin1String("url"))
markerStr = markerStr.mid(3, markerStr.size() - 3);
@@ -2301,7 +2301,7 @@ static void parseExtendedAttributes(QSvgNode *node,
node->setMarkerStartId(markerId);
}
if (!attributes.markerMid.isEmpty() &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2) {
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly)) {
QString markerStr = attributes.markerMid.toString().trimmed();
if (markerStr.size() > 3 && markerStr.mid(0, 3) == QLatin1String("url"))
markerStr = markerStr.mid(3, markerStr.size() - 3);
@@ -2311,7 +2311,7 @@ static void parseExtendedAttributes(QSvgNode *node,
node->setMarkerMidId(markerId);
}
if (!attributes.markerEnd.isEmpty() &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2) {
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly)) {
QString markerStr = attributes.markerEnd.toString().trimmed();
if (markerStr.size() > 3 && markerStr.mid(0, 3) == QLatin1String("url"))
markerStr = markerStr.mid(3, markerStr.size() - 3);
@@ -2322,7 +2322,7 @@ static void parseExtendedAttributes(QSvgNode *node,
}
if (!attributes.filter.isEmpty() &&
- handler->featureSet() != QtSvg::FeatureSet::StaticTiny1_2) {
+ !handler->options().testFlag(QtSvg::Tiny12FeaturesOnly)) {
QString filterStr = attributes.filter.toString().trimmed();
if (filterStr.size() > 3 && filterStr.mid(0, 3) == QLatin1String("url"))
@@ -3914,7 +3914,7 @@ static QSvgNode *createSvgNode(QSvgNode *parent,
{
Q_UNUSED(parent); Q_UNUSED(attributes);
- QSvgTinyDocument *node = new QSvgTinyDocument(handler->featureSet());
+ QSvgTinyDocument *node = new QSvgTinyDocument(handler->options());
const QStringView widthStr = attributes.value(QLatin1String("width"));
const QStringView heightStr = attributes.value(QLatin1String("height"));
QString viewBoxStr = attributes.value(QLatin1String("viewBox")).toString();
@@ -4196,9 +4196,8 @@ static QSvgNode *createVideoNode(QSvgNode *parent,
typedef QSvgNode *(*FactoryMethod)(QSvgNode *, const QXmlStreamAttributes &, QSvgHandler *);
-static FactoryMethod findGroupFactory(const QString &name, QtSvg::FeatureSet featureSet)
+static FactoryMethod findGroupFactory(const QString &name, QtSvg::Options options)
{
- Q_UNUSED(featureSet);
if (name.isEmpty())
return 0;
@@ -4208,14 +4207,14 @@ static FactoryMethod findGroupFactory(const QString &name, QtSvg::FeatureSet fea
if (ref == QLatin1String("efs")) return createDefsNode;
break;
case 'f':
- if (ref == QLatin1String("ilter") && featureSet != QtSvg::FeatureSet::StaticTiny1_2) return createFilterNode;
+ if (ref == QLatin1String("ilter") && !options.testFlag(QtSvg::Tiny12FeaturesOnly)) return createFilterNode;
break;
case 'g':
if (ref.isEmpty()) return createGNode;
break;
case 'm':
- if (ref == QLatin1String("ask") && featureSet != QtSvg::FeatureSet::StaticTiny1_2) return createMaskNode;
- if (ref == QLatin1String("arker") && featureSet != QtSvg::FeatureSet::StaticTiny1_2) return createMarkerNode;
+ if (ref == QLatin1String("ask") && !options.testFlag(QtSvg::Tiny12FeaturesOnly)) return createMaskNode;
+ if (ref == QLatin1String("arker") && !options.testFlag(QtSvg::Tiny12FeaturesOnly)) return createMarkerNode;
break;
case 's':
if (ref == QLatin1String("vg")) return createSvgNode;
@@ -4223,7 +4222,7 @@ static FactoryMethod findGroupFactory(const QString &name, QtSvg::FeatureSet fea
if (ref == QLatin1String("ymbol")) return createSymbolNode;
break;
case 'p':
- if (ref == QLatin1String("attern") && featureSet != QtSvg::FeatureSet::StaticTiny1_2) return createPatternNode;
+ if (ref == QLatin1String("attern") && !options.testFlag(QtSvg::Tiny12FeaturesOnly)) return createPatternNode;
break;
default:
break;
@@ -4231,9 +4230,9 @@ static FactoryMethod findGroupFactory(const QString &name, QtSvg::FeatureSet fea
return 0;
}
-static FactoryMethod findGraphicsFactory(const QString &name, QtSvg::FeatureSet featureSet)
+static FactoryMethod findGraphicsFactory(const QString &name, QtSvg::Options options)
{
- Q_UNUSED(featureSet);
+ Q_UNUSED(options);
if (name.isEmpty())
return 0;
@@ -4279,9 +4278,9 @@ static FactoryMethod findGraphicsFactory(const QString &name, QtSvg::FeatureSet
return 0;
}
-static FactoryMethod findFilterFtory(const QString &name, QtSvg::FeatureSet featureSet)
+static FactoryMethod findFilterFtory(const QString &name, QtSvg::Options options)
{
- if (featureSet == QtSvg::FeatureSet::StaticTiny1_2)
+ if (options.testFlag(QtSvg::Tiny12FeaturesOnly))
return 0;
if (name.isEmpty())
@@ -4303,9 +4302,8 @@ static FactoryMethod findFilterFtory(const QString &name, QtSvg::FeatureSet feat
typedef bool (*ParseMethod)(QSvgNode *, const QXmlStreamAttributes &, QSvgHandler *);
-static ParseMethod findUtilFactory(const QString &name, QtSvg::FeatureSet featureSet)
+static ParseMethod findUtilFactory(const QString &name, QtSvg::Options options)
{
- Q_UNUSED(featureSet);
if (name.isEmpty())
return 0;
@@ -4333,8 +4331,8 @@ static ParseMethod findUtilFactory(const QString &name, QtSvg::FeatureSet featur
case 'm':
if (ref == QLatin1String("etadata")) return parseMetadataNode;
if (ref == QLatin1String("path")) return parseMpathNode;
- if (ref == QLatin1String("ask") && featureSet != QtSvg::FeatureSet::StaticTiny1_2) return parseMaskNode;
- if (ref == QLatin1String("arker") && featureSet != QtSvg::FeatureSet::StaticTiny1_2) return parseMarkerNode;
+ if (ref == QLatin1String("ask") && !options.testFlag(QtSvg::Tiny12FeaturesOnly)) return parseMaskNode;
+ if (ref == QLatin1String("arker") && !options.testFlag(QtSvg::Tiny12FeaturesOnly)) return parseMarkerNode;
break;
case 'p':
if (ref == QLatin1String("refetch")) return parsePrefetchNode;
@@ -4415,26 +4413,26 @@ static StyleParseMethod findStyleUtilFactoryMethod(const QString &name)
return 0;
}
-QSvgHandler::QSvgHandler(QIODevice *device, QtSvg::FeatureSet featureSet)
+QSvgHandler::QSvgHandler(QIODevice *device, QtSvg::Options options)
: xml(new QXmlStreamReader(device))
, m_ownsReader(true)
- , m_featureSet(featureSet)
+ , m_options(options)
{
init();
}
-QSvgHandler::QSvgHandler(const QByteArray &data, QtSvg::FeatureSet featureSet)
+QSvgHandler::QSvgHandler(const QByteArray &data, QtSvg::Options options)
: xml(new QXmlStreamReader(data))
, m_ownsReader(true)
- , m_featureSet(featureSet)
+ , m_options(options)
{
init();
}
-QSvgHandler::QSvgHandler(QXmlStreamReader *const reader, QtSvg::FeatureSet featureSet)
+QSvgHandler::QSvgHandler(QXmlStreamReader *const reader, QtSvg::Options options)
: xml(reader)
, m_ownsReader(false)
- , m_featureSet(featureSet)
+ , m_options(options)
{
init();
}
@@ -4608,7 +4606,7 @@ bool QSvgHandler::startElement(const QString &localName,
if (!m_doc && localName != QLatin1String("svg"))
return false;
- if (FactoryMethod method = findGroupFactory(localName, featureSet())) {
+ if (FactoryMethod method = findGroupFactory(localName, options())) {
//group
node = method(m_doc ? m_nodes.top() : 0, attributes, this);
@@ -4649,7 +4647,7 @@ bool QSvgHandler::startElement(const QString &localName,
parseStyle(node, attributes, this);
}
}
- } else if (FactoryMethod method = findGraphicsFactory(localName, featureSet())) {
+ } else if (FactoryMethod method = findGraphicsFactory(localName, options())) {
//rendering element
Q_ASSERT(!m_nodes.isEmpty());
node = method(m_nodes.top(), attributes, this);
@@ -4712,7 +4710,7 @@ bool QSvgHandler::startElement(const QString &localName,
}
}
}
- } else if (FactoryMethod method = findFilterFtory(localName, featureSet())) {
+ } else if (FactoryMethod method = findFilterFtory(localName, options())) {
//filter nodes to be aded to be filtercontainer
Q_ASSERT(!m_nodes.isEmpty());
node = method(m_nodes.top(), attributes, this);
@@ -4729,7 +4727,7 @@ bool QSvgHandler::startElement(const QString &localName,
node = 0;
}
}
- } else if (ParseMethod method = findUtilFactory(localName, featureSet())) {
+ } else if (ParseMethod method = findUtilFactory(localName, options())) {
Q_ASSERT(!m_nodes.isEmpty());
if (!method(m_nodes.top(), attributes, this))
qCWarning(lcSvgHandler, "%s", msgProblemParsing(localName, xml).constData());
diff --git a/src/svg/qsvghandler_p.h b/src/svg/qsvghandler_p.h
index 6dfaf46..045014d 100644
--- a/src/svg/qsvghandler_p.h
+++ b/src/svg/qsvghandler_p.h
@@ -59,9 +59,9 @@ public:
};
public:
- QSvgHandler(QIODevice *device, QtSvg::FeatureSet featureSet = QtSvg::FeatureSet::AllAvailable);
- QSvgHandler(const QByteArray &data, QtSvg::FeatureSet featureSet = QtSvg::FeatureSet::AllAvailable);
- QSvgHandler(QXmlStreamReader *const data, QtSvg::FeatureSet featureSet = QtSvg::FeatureSet::AllAvailable);
+ QSvgHandler(QIODevice *device, QtSvg::Options options = {});
+ QSvgHandler(const QByteArray &data, QtSvg::Options options = {});
+ QSvgHandler(QXmlStreamReader *const data, QtSvg::Options options = {});
~QSvgHandler();
QIODevice *device() const;
@@ -99,7 +99,7 @@ public:
inline QPen defaultPen() const
{ return m_defaultPen; }
- QtSvg::FeatureSet featureSet() const;
+ QtSvg::Options options() const;
public:
bool startElement(const QString &localName, const QXmlStreamAttributes &attributes);
@@ -156,7 +156,7 @@ private:
*/
const bool m_ownsReader;
- const QtSvg::FeatureSet m_featureSet;
+ const QtSvg::Options m_options;
};
Q_DECLARE_LOGGING_CATEGORY(lcSvgHandler)
diff --git a/src/svg/qsvgnode.cpp b/src/svg/qsvgnode.cpp
index fa94b46..deb4d71 100644
--- a/src/svg/qsvgnode.cpp
+++ b/src/svg/qsvgnode.cpp
@@ -493,7 +493,7 @@ void QSvgNode::setMaskId(const QString &str)
bool QSvgNode::hasMask() const
{
- if (document()->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (document()->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return false;
return !m_maskId.isEmpty();
}
@@ -510,7 +510,7 @@ void QSvgNode::setFilterId(const QString &str)
bool QSvgNode::hasFilter() const
{
- if (document()->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (document()->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return false;
return !m_filterId.isEmpty();
}
@@ -527,7 +527,7 @@ void QSvgNode::setMarkerStartId(const QString &str)
bool QSvgNode::hasMarkerStart() const
{
- if (document()->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (document()->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return false;
return !m_markerStartId.isEmpty();
}
@@ -544,7 +544,7 @@ void QSvgNode::setMarkerMidId(const QString &str)
bool QSvgNode::hasMarkerMid() const
{
- if (document()->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (document()->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return false;
return !m_markerMidId.isEmpty();
}
@@ -561,14 +561,14 @@ void QSvgNode::setMarkerEndId(const QString &str)
bool QSvgNode::hasMarkerEnd() const
{
- if (document()->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (document()->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return false;
return !m_markerEndId.isEmpty();
}
bool QSvgNode::hasAnyMarker() const
{
- if (document()->featureSet() == QtSvg::FeatureSet::StaticTiny1_2)
+ if (document()->options().testFlag(QtSvg::Tiny12FeaturesOnly))
return false;
return hasMarkerStart() || hasMarkerMid() || hasMarkerEnd();
}
diff --git a/src/svg/qsvgrenderer.cpp b/src/svg/qsvgrenderer.cpp
index d6930e3..cad45cc 100644
--- a/src/svg/qsvgrenderer.cpp
+++ b/src/svg/qsvgrenderer.cpp
@@ -72,8 +72,7 @@ public:
explicit QSvgRendererPrivate()
: QObjectPrivate(),
render(0), timer(0),
- fps(30),
- featureSet(QtSvg::FeatureSet::AllAvailable)
+ fps(30)
{}
~QSvgRendererPrivate()
@@ -105,7 +104,7 @@ public:
QSvgTinyDocument *render;
QTimer *timer;
int fps;
- QtSvg::FeatureSet featureSet;
+ QtSvg::Options options;
bool animationEnabled = true;
};
@@ -308,29 +307,27 @@ void QSvgRenderer::setAspectRatioMode(Qt::AspectRatioMode mode)
}
/*!
- \property QSvgRenderer::featureSet
+ \property QSvgRenderer::options
\since 6.7
- This property holds the feature set that will be used to load and
- render an SVG file. The feature set can be limited to SVG Tiny 1.2
- or an \l{Extended Features}{extended feature set}.
+ This property holds a set of QtSvg::Option flags that can be used
+ to enable or disable various features of the parsing and rendering of SVG files.
Set this property before calling any of the load functions to
change the behavior of the QSvgRenderer.
- The default value is QtSvg::AllAvailable.
+ By default, no flags are set.
*/
-QtSvg::FeatureSet QSvgRenderer::featureSet() const
+QtSvg::Options QSvgRenderer::options() const
{
Q_D(const QSvgRenderer);
- return d->featureSet;
+ return d->options;
}
-
-void QSvgRenderer::setFeatureSet(QtSvg::FeatureSet flags)
+void QSvgRenderer::setOptions(QtSvg::Options flags)
{
Q_D(QSvgRenderer);
- d->featureSet = flags;
+ d->options = flags;
}
/*!
\property QSvgRenderer::currentFrame
@@ -390,7 +387,7 @@ static bool loadDocument(QSvgRenderer *const q,
const TInputType &in)
{
delete d->render;
- d->render = QSvgTinyDocument::load(in, d->featureSet);
+ d->render = QSvgTinyDocument::load(in, d->options);
if (d->render && !d->render->size().isValid()) {
delete d->render;
d->render = nullptr;
diff --git a/src/svg/qsvgrenderer.h b/src/svg/qsvgrenderer.h
index 197cb33..9ba8765 100644
--- a/src/svg/qsvgrenderer.h
+++ b/src/svg/qsvgrenderer.h
@@ -28,7 +28,7 @@ class Q_SVG_EXPORT QSvgRenderer : public QObject
Q_PROPERTY(int framesPerSecond READ framesPerSecond WRITE setFramesPerSecond)
Q_PROPERTY(int currentFrame READ currentFrame WRITE setCurrentFrame)
Q_PROPERTY(Qt::AspectRatioMode aspectRatioMode READ aspectRatioMode WRITE setAspectRatioMode)
- Q_PROPERTY(QtSvg::FeatureSet featureSet READ featureSet WRITE setFeatureSet)
+ Q_PROPERTY(QtSvg::Options options READ options WRITE setOptions)
Q_PROPERTY(bool animationEnabled READ isAnimationEnabled WRITE setAnimationEnabled)
public:
QSvgRenderer(QObject *parent = nullptr);
@@ -49,8 +49,8 @@ public:
Qt::AspectRatioMode aspectRatioMode() const;
void setAspectRatioMode(Qt::AspectRatioMode mode);
- QtSvg::FeatureSet featureSet() const;
- void setFeatureSet(QtSvg::FeatureSet flags);
+ QtSvg::Options options() const;
+ void setOptions(QtSvg::Options flags);
bool animated() const;
int framesPerSecond() const;
diff --git a/src/svg/qsvgtinydocument.cpp b/src/svg/qsvgtinydocument.cpp
index 62e01d3..e45a4fd 100644
--- a/src/svg/qsvgtinydocument.cpp
+++ b/src/svg/qsvgtinydocument.cpp
@@ -21,7 +21,7 @@
QT_BEGIN_NAMESPACE
-QSvgTinyDocument::QSvgTinyDocument(QtSvg::FeatureSet featureSet)
+QSvgTinyDocument::QSvgTinyDocument(QtSvg::Options options)
: QSvgStructureNode(0)
, m_widthPercent(false)
, m_heightPercent(false)
@@ -29,7 +29,7 @@ QSvgTinyDocument::QSvgTinyDocument(QtSvg::FeatureSet featureSet)
, m_animated(false)
, m_animationDuration(0)
, m_fps(30)
- , m_featureSet(featureSet)
+ , m_options(options)
{
}
@@ -153,7 +153,7 @@ static QByteArray qt_inflateSvgzDataFrom(QIODevice *)
}
#endif
-QSvgTinyDocument * QSvgTinyDocument::load(const QString &fileName, QtSvg::FeatureSet featureSet)
+QSvgTinyDocument *QSvgTinyDocument::load(const QString &fileName, QtSvg::Options options)
{
QFile file(fileName);
if (!file.open(QFile::ReadOnly)) {
@@ -168,7 +168,7 @@ QSvgTinyDocument * QSvgTinyDocument::load(const QString &fileName, QtSvg::Featur
}
QSvgTinyDocument *doc = nullptr;
- QSvgHandler handler(&file, featureSet);
+ QSvgHandler handler(&file, options);
if (handler.ok()) {
doc = handler.document();
doc->m_animationDuration = handler.animationDuration();
@@ -180,7 +180,7 @@ QSvgTinyDocument * QSvgTinyDocument::load(const QString &fileName, QtSvg::Featur
return doc;
}
-QSvgTinyDocument * QSvgTinyDocument::load(const QByteArray &contents, QtSvg::FeatureSet featureSet)
+QSvgTinyDocument *QSvgTinyDocument::load(const QByteArray &contents, QtSvg::Options options)
{
QByteArray svg;
// Check for gzip magic number and inflate if appropriate
@@ -197,7 +197,7 @@ QSvgTinyDocument * QSvgTinyDocument::load(const QByteArray &contents, QtSvg::Fea
QBuffer buffer;
buffer.setData(svg);
buffer.open(QIODevice::ReadOnly);
- QSvgHandler handler(&buffer, featureSet );
+ QSvgHandler handler(&buffer, options);
QSvgTinyDocument *doc = nullptr;
if (handler.ok()) {
@@ -209,9 +209,9 @@ QSvgTinyDocument * QSvgTinyDocument::load(const QByteArray &contents, QtSvg::Fea
return doc;
}
-QSvgTinyDocument * QSvgTinyDocument::load(QXmlStreamReader *contents, QtSvg::FeatureSet featureSet)
+QSvgTinyDocument *QSvgTinyDocument::load(QXmlStreamReader *contents, QtSvg::Options options)
{
- QSvgHandler handler(contents, featureSet);
+ QSvgHandler handler(contents, options);
QSvgTinyDocument *doc = nullptr;
if (handler.ok()) {
@@ -340,9 +340,9 @@ void QSvgTinyDocument::setViewBox(const QRectF &rect)
m_implicitViewBox = rect.isNull();
}
-QtSvg::FeatureSet QSvgTinyDocument::featureSet() const
+QtSvg::Options QSvgTinyDocument::options() const
{
- return m_featureSet;
+ return m_options;
}
void QSvgTinyDocument::addSvgFont(QSvgFont *font)
diff --git a/src/svg/qsvgtinydocument_p.h b/src/svg/qsvgtinydocument_p.h
index 0b1c38c..9501a95 100644
--- a/src/svg/qsvgtinydocument_p.h
+++ b/src/svg/qsvgtinydocument_p.h
@@ -36,11 +36,11 @@ class QTransform;
class Q_SVG_EXPORT QSvgTinyDocument : public QSvgStructureNode
{
public:
- static QSvgTinyDocument * load(const QString &file, QtSvg::FeatureSet featureSet = QtSvg::FeatureSet::AllAvailable);
- static QSvgTinyDocument * load(const QByteArray &contents, QtSvg::FeatureSet featureSet = QtSvg::FeatureSet::AllAvailable);
- static QSvgTinyDocument * load(QXmlStreamReader *contents, QtSvg::FeatureSet featureSet = QtSvg::FeatureSet::AllAvailable);
+ static QSvgTinyDocument *load(const QString &file, QtSvg::Options options = {});
+ static QSvgTinyDocument *load(const QByteArray &contents, QtSvg::Options options = {});
+ static QSvgTinyDocument *load(QXmlStreamReader *contents, QtSvg::Options options = {});
public:
- QSvgTinyDocument(QtSvg::FeatureSet featureSet);
+ QSvgTinyDocument(QtSvg::Options options);
~QSvgTinyDocument();
Type type() const override;
@@ -58,7 +58,7 @@ public:
QRectF viewBox() const;
void setViewBox(const QRectF &rect);
- QtSvg::FeatureSet featureSet() const;
+ QtSvg::Options options() const;
void drawCommand(QPainter *, QSvgExtraStates &) override;
@@ -109,7 +109,7 @@ private:
QSvgExtraStates m_states;
- const QtSvg::FeatureSet m_featureSet;
+ const QtSvg::Options m_options;
};
Q_SVG_EXPORT QDebug operator<<(QDebug debug, const QSvgTinyDocument &doc);
diff --git a/src/svg/qtsvgglobal.h b/src/svg/qtsvgglobal.h
index 67ce37d..7f35fd7 100644
--- a/src/svg/qtsvgglobal.h
+++ b/src/svg/qtsvgglobal.h
@@ -12,11 +12,12 @@ QT_BEGIN_NAMESPACE
namespace QtSvg {
-enum class FeatureSet : quint32
+enum Option
{
- StaticTiny1_2,
- AllAvailable = 0xffffffff,
+ Tiny12FeaturesOnly = 0x01
};
+Q_DECLARE_FLAGS(Options, Option)
+Q_DECLARE_OPERATORS_FOR_FLAGS(Options)
}
diff --git a/src/svgwidgets/qsvgwidget.cpp b/src/svgwidgets/qsvgwidget.cpp
index 18a7d11..99363d2 100644
--- a/src/svgwidgets/qsvgwidget.cpp
+++ b/src/svgwidgets/qsvgwidget.cpp
@@ -129,32 +129,34 @@ QSize QSvgWidget::sizeHint() const
/*!
\since 6.7
- Returns the QtSvg::FeatureSet of the widget's renderer.
+ Returns the options of the widget's renderer.
- \sa setFeatureSet
+ \sa setOptions
*/
-QtSvg::FeatureSet QSvgWidget::featureSet() const
+QtSvg::Options QSvgWidget::options() const
{
Q_D(const QSvgWidget);
- return d->renderer->featureSet();
+ return d->renderer->options();
}
/*!
\since 6.7
- Sets the widget's renderer QtSvg::FeatureSet to \a featureSet.
- The \c featureset can be limited to SVG Tiny 1.2
- or an \l{Extended Features}{extended featureset}. This
- propety has to be set before calling the load function
- to have any effect.
+ Sets the widget's renderer options to \a options.
- The default value is QtSvg::AllAvailable.
- \sa featureSet
+ This property holds a set of QtSvg::Option flags that can be used
+ to enable or disable various features of the parsing and rendering
+ of SVG files. It must be set before calling the load function to
+ have any effect.
+
+ By default, no flags are set.
+
+ \sa options
*/
-void QSvgWidget::setFeatureSet(QtSvg::FeatureSet featureSet)
+void QSvgWidget::setOptions(QtSvg::Options options)
{
Q_D(QSvgWidget);
- d->renderer->setFeatureSet(featureSet);
+ d->renderer->setOptions(options);
}
/*!
diff --git a/src/svgwidgets/qsvgwidget.h b/src/svgwidgets/qsvgwidget.h
index ac12574..c4ddc8a 100644
--- a/src/svgwidgets/qsvgwidget.h
+++ b/src/svgwidgets/qsvgwidget.h
@@ -27,8 +27,8 @@ public:
QSize sizeHint() const override;
- QtSvg::FeatureSet featureSet() const;
- void setFeatureSet(QtSvg::FeatureSet featureSet);
+ QtSvg::Options options() const;
+ void setOptions(QtSvg::Options options);
public Q_SLOTS:
void load(const QString &file);
void load(const QByteArray &contents);