summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHatem ElKharashy <hatem.elkharashy@qt.io>2024-05-13 18:17:05 +0300
committerHatem ElKharashy <hatem.elkharashy@qt.io>2024-05-14 13:16:05 +0300
commit81e0380384c8703f1cf6611108eaf1f34ea95de2 (patch)
treeebff82929053dd7816e76d803188c9b63e581637
parentf116f5753b0d8bf995d7e4efee70bf7346f89adb (diff)
Cleanup: make shouldDrawNode return false for some nodes
Pattern, Filters, Filter Primitives, and Masks are applied on an element by drawing them into a QImage first then using them. Those elements shouldDrawNode function should return false. Change-Id: I761370663fd6aa49ce82f76037104820d2175999 Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
-rw-r--r--src/svg/qsvgfilter.cpp5
-rw-r--r--src/svg/qsvgfilter_p.h1
-rw-r--r--src/svg/qsvgstructure.cpp15
-rw-r--r--src/svg/qsvgstructure_p.h3
4 files changed, 24 insertions, 0 deletions
diff --git a/src/svg/qsvgfilter.cpp b/src/svg/qsvgfilter.cpp
index b38a0fe..74c287e 100644
--- a/src/svg/qsvgfilter.cpp
+++ b/src/svg/qsvgfilter.cpp
@@ -25,6 +25,11 @@ QSvgFeFilterPrimitive::QSvgFeFilterPrimitive(QSvgNode *parent, QString input, QS
}
+bool QSvgFeFilterPrimitive::shouldDrawNode(QPainter *, QSvgExtraStates &) const
+{
+ return false;
+}
+
QRectF QSvgFeFilterPrimitive::localFilterBoundingBox(QSvgNode *node,
const QRectF &itemBounds, const QRectF &filterBounds,
QtSvg::UnitTypes primitiveUnits, QtSvg::UnitTypes filterUnits) const
diff --git a/src/svg/qsvgfilter_p.h b/src/svg/qsvgfilter_p.h
index 071ee40..b27b50c 100644
--- a/src/svg/qsvgfilter_p.h
+++ b/src/svg/qsvgfilter_p.h
@@ -31,6 +31,7 @@ class Q_SVG_EXPORT QSvgFeFilterPrimitive : public QSvgStructureNode
public:
QSvgFeFilterPrimitive(QSvgNode *parent, QString input, QString result, const QSvgRectF &rect);
void drawCommand(QPainter *, QSvgExtraStates &) override {};
+ bool shouldDrawNode(QPainter *, QSvgExtraStates &) const override;
QRectF fastBounds(QPainter *, QSvgExtraStates &) const override { return QRectF(); }
QRectF bounds(QPainter *, QSvgExtraStates &) const override { return QRectF(); }
QRectF localFilterBoundingBox(QSvgNode *item,
diff --git a/src/svg/qsvgstructure.cpp b/src/svg/qsvgstructure.cpp
index 93f2f91..b1d8934 100644
--- a/src/svg/qsvgstructure.cpp
+++ b/src/svg/qsvgstructure.cpp
@@ -216,6 +216,11 @@ QSvgFilterContainer::QSvgFilterContainer(QSvgNode *parent, const QSvgRectF &boun
}
+bool QSvgFilterContainer::shouldDrawNode(QPainter *, QSvgExtraStates &) const
+{
+ return false;
+}
+
void QSvgMarker::drawCommand(QPainter *p, QSvgExtraStates &states)
{
if (!states.inUse) //Symbol is only drawn in combination with another node.
@@ -596,6 +601,11 @@ QSvgMask::QSvgMask(QSvgNode *parent, QSvgRectF bounds,
{
}
+bool QSvgMask::shouldDrawNode(QPainter *, QSvgExtraStates &) const
+{
+ return false;
+}
+
QImage QSvgMask::createMask(QPainter *p, QSvgExtraStates &states, QSvgNode *targetNode, QRectF *globalRect) const
{
QTransform t = p->transform();
@@ -705,6 +715,11 @@ QSvgPattern::QSvgPattern(QSvgNode *parent, QSvgRectF bounds, QRectF viewBox,
}
+bool QSvgPattern::shouldDrawNode(QPainter *, QSvgExtraStates &) const
+{
+ return false;
+}
+
static QImage& defaultPattern()
{
static QImage checkerPattern;
diff --git a/src/svg/qsvgstructure_p.h b/src/svg/qsvgstructure_p.h
index d2cef9d..a06a99a 100644
--- a/src/svg/qsvgstructure_p.h
+++ b/src/svg/qsvgstructure_p.h
@@ -163,6 +163,7 @@ public:
QSvgFilterContainer(QSvgNode *parent, const QSvgRectF &bounds, QtSvg::UnitTypes filterUnits, QtSvg::UnitTypes primitiveUnits);
void drawCommand(QPainter *, QSvgExtraStates &) override {};
+ bool shouldDrawNode(QPainter *, QSvgExtraStates &) const override;
Type type() const override;
QImage applyFilter(QSvgNode *referenceNode, const QImage &buffer, QPainter *p, QRectF bounds) const;
void setSupported(bool supported);
@@ -194,6 +195,7 @@ public:
QSvgMask(QSvgNode *parent, QSvgRectF bounds,
QtSvg::UnitTypes contentsUnits);
void drawCommand(QPainter *, QSvgExtraStates &) override {};
+ bool shouldDrawNode(QPainter *, QSvgExtraStates &) const override;
Type type() const override;
QImage createMask(QPainter *p, QSvgExtraStates &states, QSvgNode *targetNode, QRectF *globalRect) const;
QImage createMask(QPainter *p, QSvgExtraStates &states, const QRectF &localRect, QRectF *globalRect) const;
@@ -219,6 +221,7 @@ public:
QSvgPattern(QSvgNode *parent, QSvgRectF bounds, QRectF viewBox,
QtSvg::UnitTypes contentUnits, QTransform transform);
void drawCommand(QPainter *, QSvgExtraStates &) override {};
+ bool shouldDrawNode(QPainter *, QSvgExtraStates &) const override;
QImage patternImage(QPainter *p, QSvgExtraStates &states, const QSvgNode *patternElement);
Type type() const override;
const QTransform& appliedTransform() const { return m_appliedTransform; }