diff options
author | Hatem ElKharashy <hatem.elkharashy@qt.io> | 2024-05-13 18:17:05 +0300 |
---|---|---|
committer | Hatem ElKharashy <hatem.elkharashy@qt.io> | 2024-05-14 13:16:05 +0300 |
commit | 81e0380384c8703f1cf6611108eaf1f34ea95de2 (patch) | |
tree | ebff82929053dd7816e76d803188c9b63e581637 | |
parent | f116f5753b0d8bf995d7e4efee70bf7346f89adb (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.cpp | 5 | ||||
-rw-r--r-- | src/svg/qsvgfilter_p.h | 1 | ||||
-rw-r--r-- | src/svg/qsvgstructure.cpp | 15 | ||||
-rw-r--r-- | src/svg/qsvgstructure_p.h | 3 |
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; } |