svgio/inc/svgfecolormatrixnode.hxx | 5 + svgio/inc/svgfedropshadownode.hxx | 5 + svgio/inc/svgfefloodnode.hxx | 5 + svgio/inc/svgfegaussianblurnode.hxx | 5 + svgio/inc/svgfeimagenode.hxx | 5 + svgio/inc/svgfeoffsetnode.hxx | 5 + svgio/inc/svgfilternode.hxx | 19 +++-- svgio/source/svgreader/svgfecolormatrixnode.cxx | 24 ++++++- svgio/source/svgreader/svgfedropshadownode.cxx | 24 ++++++- svgio/source/svgreader/svgfefloodnode.cxx | 24 ++++++- svgio/source/svgreader/svgfegaussianblurnode.cxx | 24 ++++++- svgio/source/svgreader/svgfeimagenode.cxx | 24 ++++++- svgio/source/svgreader/svgfeoffsetnode.cxx | 24 ++++++- svgio/source/svgreader/svgfilternode.cxx | 76 ++++++++--------------- svgio/source/svgreader/svgstyleattributes.cxx | 2 15 files changed, 185 insertions(+), 86 deletions(-)
New commits: commit b22039cff8380b158307e75762bd3e4ca045d77b Author: Xisco Fauli <xiscofa...@libreoffice.org> AuthorDate: Tue Mar 12 17:19:45 2024 +0100 Commit: Xisco Fauli <xiscofa...@libreoffice.org> CommitDate: Tue Mar 12 22:39:20 2024 +0100 related: tdf#159947: only parse in/result if the element supports them There are some filters ( e.g. feMerge ) that do not support in or result attributes Change-Id: I4072dc481557557733e55cc5fcbd80cb11a7ddb5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164718 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org> diff --git a/svgio/inc/svgfecolormatrixnode.hxx b/svgio/inc/svgfecolormatrixnode.hxx index e2c74a03748f..4e0ad7d2aa3c 100644 --- a/svgio/inc/svgfecolormatrixnode.hxx +++ b/svgio/inc/svgfecolormatrixnode.hxx @@ -36,6 +36,8 @@ enum class ColorType class SvgFeColorMatrixNode final : public SvgFilterNode { private: + OUString maIn; + OUString maResult; ColorType maType; OUString maValuesContent; @@ -45,7 +47,8 @@ public: virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const override; + void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const override; }; } // end of namespace svgio::svgreader diff --git a/svgio/inc/svgfedropshadownode.hxx b/svgio/inc/svgfedropshadownode.hxx index 04b3190f1dea..c68cdf655567 100644 --- a/svgio/inc/svgfedropshadownode.hxx +++ b/svgio/inc/svgfedropshadownode.hxx @@ -27,6 +27,8 @@ namespace svgio::svgreader class SvgFeDropShadowNode final : public SvgFilterNode { private: + OUString maIn; + OUString maResult; SvgNumber maDx; SvgNumber maDy; SvgNumber maStdDeviation; @@ -39,7 +41,8 @@ public: virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const override; + void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const override; }; } // end of namespace svgio::svgreader diff --git a/svgio/inc/svgfefloodnode.hxx b/svgio/inc/svgfefloodnode.hxx index e74794b97237..8aba2c3b0340 100644 --- a/svgio/inc/svgfefloodnode.hxx +++ b/svgio/inc/svgfefloodnode.hxx @@ -27,6 +27,8 @@ namespace svgio::svgreader class SvgFeFloodNode final : public SvgFilterNode { private: + OUString maIn; + OUString maResult; SvgNumber maX; SvgNumber maY; SvgNumber maWidth; @@ -40,7 +42,8 @@ public: virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const override; + void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const override; }; } // end of namespace svgio::svgreader diff --git a/svgio/inc/svgfegaussianblurnode.hxx b/svgio/inc/svgfegaussianblurnode.hxx index 14732a968e2d..10e6a16b1ce3 100644 --- a/svgio/inc/svgfegaussianblurnode.hxx +++ b/svgio/inc/svgfegaussianblurnode.hxx @@ -28,6 +28,8 @@ namespace svgio::svgreader class SvgFeGaussianBlurNode final : public SvgFilterNode { private: + OUString maIn; + OUString maResult; SvgNumber maStdDeviation; public: @@ -36,7 +38,8 @@ public: virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const override; + void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const override; }; } // end of namespace svgio::svgreader diff --git a/svgio/inc/svgfeimagenode.hxx b/svgio/inc/svgfeimagenode.hxx index 0b05173494d0..ab303fdc92fe 100644 --- a/svgio/inc/svgfeimagenode.hxx +++ b/svgio/inc/svgfeimagenode.hxx @@ -27,6 +27,8 @@ namespace svgio::svgreader class SvgFeImageNode final : public SvgFilterNode { private: + OUString maIn; + OUString maResult; OUString maUrl; // external link OUString maData; // base64 data @@ -36,7 +38,8 @@ public: virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const override; + void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const override; }; } // end of namespace svgio::svgreader diff --git a/svgio/inc/svgfeoffsetnode.hxx b/svgio/inc/svgfeoffsetnode.hxx index b56971dfd741..a52eea252e60 100644 --- a/svgio/inc/svgfeoffsetnode.hxx +++ b/svgio/inc/svgfeoffsetnode.hxx @@ -27,6 +27,8 @@ namespace svgio::svgreader class SvgFeOffsetNode final : public SvgFilterNode { private: + OUString maIn; + OUString maResult; SvgNumber maDx; SvgNumber maDy; @@ -36,7 +38,8 @@ public: virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const override; + void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const override; }; } // end of namespace svgio::svgreader diff --git a/svgio/inc/svgfilternode.hxx b/svgio/inc/svgfilternode.hxx index c3aa068bd3eb..4f5d4c2f532f 100644 --- a/svgio/inc/svgfilternode.hxx +++ b/svgio/inc/svgfilternode.hxx @@ -19,28 +19,33 @@ #pragma once +#include <unordered_map> #include "svgnode.hxx" #include "svgstyleattributes.hxx" #include <basegfx/matrix/b2dhommatrix.hxx> +typedef std::unordered_map<OUString, drawinglayer::primitive2d::Primitive2DContainer> + IdGraphicSourceMapper; + namespace svgio::svgreader { class SvgFilterNode : public SvgNode { private: - OUString maIn; - OUString maResult; + IdGraphicSourceMapper maIdGraphicSourceMapperList; public: SvgFilterNode(SVGToken aType, SvgDocument& rDocument, SvgNode* pParent); virtual ~SvgFilterNode() override; - virtual void parseAttribute(SVGToken aSVGToken, const OUString& aContent) override; - - virtual void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const; + virtual void apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const; - const OUString& getIn() const { return maIn; } - const OUString& getResult() const { return maResult; } + void + addGraphicSourceToMapper(const OUString& rStr, + drawinglayer::primitive2d::Primitive2DContainer pGrapicSource) const; + const drawinglayer::primitive2d::Primitive2DContainer* + findGraphicSource(const OUString& rStr) const; }; } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfecolormatrixnode.cxx b/svgio/source/svgreader/svgfecolormatrixnode.cxx index da42fa72f899..76bfbee2799c 100644 --- a/svgio/source/svgreader/svgfecolormatrixnode.cxx +++ b/svgio/source/svgreader/svgfecolormatrixnode.cxx @@ -33,12 +33,19 @@ SvgFeColorMatrixNode::~SvgFeColorMatrixNode() {} void SvgFeColorMatrixNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) { - // call parent - SvgFilterNode::parseAttribute(aSVGToken, aContent); - // parse own switch (aSVGToken) { + case SVGToken::In: + { + maIn = aContent.trim(); + break; + } + case SVGToken::Result: + { + maResult = aContent.trim(); + break; + } case SVGToken::Type: { if (!aContent.isEmpty()) @@ -74,8 +81,15 @@ void SvgFeColorMatrixNode::parseAttribute(SVGToken aSVGToken, const OUString& aC } } -void SvgFeColorMatrixNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFeColorMatrixNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const { + if (const drawinglayer::primitive2d::Primitive2DContainer* rSource + = pParent->findGraphicSource(maIn)) + { + rTarget = *rSource; + } + if (maType == ColorType::LuminanceToAlpha) { const drawinglayer::primitive2d::Primitive2DReference xRef( @@ -114,6 +128,8 @@ void SvgFeColorMatrixNode::apply(drawinglayer::primitive2d::Primitive2DContainer std::move(rTarget), std::make_shared<basegfx::BColorModifier_matrix>(aVector))); rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; } + + pParent->addGraphicSourceToMapper(maResult, rTarget); } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfedropshadownode.cxx b/svgio/source/svgreader/svgfedropshadownode.cxx index d5c67e162af1..23a6464d523e 100644 --- a/svgio/source/svgreader/svgfedropshadownode.cxx +++ b/svgio/source/svgreader/svgfedropshadownode.cxx @@ -40,9 +40,6 @@ SvgFeDropShadowNode::~SvgFeDropShadowNode() {} void SvgFeDropShadowNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) { - // call parent - SvgFilterNode::parseAttribute(aSVGToken, aContent); - // parse own switch (aSVGToken) { @@ -51,6 +48,16 @@ void SvgFeDropShadowNode::parseAttribute(SVGToken aSVGToken, const OUString& aCo readLocalCssStyle(aContent); break; } + case SVGToken::In: + { + maIn = aContent.trim(); + break; + } + case SVGToken::Result: + { + maResult = aContent.trim(); + break; + } case SVGToken::Dx: { SvgNumber aNum; @@ -112,8 +119,15 @@ void SvgFeDropShadowNode::parseAttribute(SVGToken aSVGToken, const OUString& aCo } } -void SvgFeDropShadowNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFeDropShadowNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const { + if (const drawinglayer::primitive2d::Primitive2DContainer* rSource + = pParent->findGraphicSource(maIn)) + { + rTarget = *rSource; + } + basegfx::B2DHomMatrix aTransform; if (maDx.isSet() || maDy.isSet()) { @@ -140,6 +154,8 @@ void SvgFeDropShadowNode::apply(drawinglayer::primitive2d::Primitive2DContainer& aTempTarget.append(rTarget); rTarget = aTempTarget; + + pParent->addGraphicSourceToMapper(maResult, rTarget); } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfefloodnode.cxx b/svgio/source/svgreader/svgfefloodnode.cxx index 4c4efe9bf4c9..ede285b6d756 100644 --- a/svgio/source/svgreader/svgfefloodnode.cxx +++ b/svgio/source/svgreader/svgfefloodnode.cxx @@ -41,9 +41,6 @@ SvgFeFloodNode::~SvgFeFloodNode() {} void SvgFeFloodNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) { - // call parent - SvgFilterNode::parseAttribute(aSVGToken, aContent); - // parse own switch (aSVGToken) { @@ -52,6 +49,16 @@ void SvgFeFloodNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent readLocalCssStyle(aContent); break; } + case SVGToken::In: + { + maIn = aContent.trim(); + break; + } + case SVGToken::Result: + { + maResult = aContent.trim(); + break; + } case SVGToken::X: { SvgNumber aNum; @@ -129,7 +136,8 @@ void SvgFeFloodNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent } } -void SvgFeFloodNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFeFloodNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const { const double fWidth(maWidth.solve(*this, NumberType::xcoordinate)); const double fHeight(maHeight.solve(*this, NumberType::ycoordinate)); @@ -137,6 +145,12 @@ void SvgFeFloodNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTar if (fWidth <= 0.0 || fHeight <= 0.0) return; + if (const drawinglayer::primitive2d::Primitive2DContainer* rSource + = pParent->findGraphicSource(maIn)) + { + rTarget = *rSource; + } + const double fX(maX.solve(*this, NumberType::xcoordinate)); const double fY(maY.solve(*this, NumberType::ycoordinate)); const basegfx::B2DRange aRange(fX, fY, fX + fWidth, fY + fHeight); @@ -157,6 +171,8 @@ void SvgFeFloodNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTar rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; } + + pParent->addGraphicSourceToMapper(maResult, rTarget); } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfegaussianblurnode.cxx b/svgio/source/svgreader/svgfegaussianblurnode.cxx index 8c6d26681a2a..132cbae3fba7 100644 --- a/svgio/source/svgreader/svgfegaussianblurnode.cxx +++ b/svgio/source/svgreader/svgfegaussianblurnode.cxx @@ -33,9 +33,6 @@ SvgFeGaussianBlurNode::~SvgFeGaussianBlurNode() {} void SvgFeGaussianBlurNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) { - // call parent - SvgFilterNode::parseAttribute(aSVGToken, aContent); - // parse own switch (aSVGToken) { @@ -52,6 +49,16 @@ void SvgFeGaussianBlurNode::parseAttribute(SVGToken aSVGToken, const OUString& a } break; } + case SVGToken::In: + { + maIn = aContent.trim(); + break; + } + case SVGToken::Result: + { + maResult = aContent.trim(); + break; + } default: { break; @@ -59,13 +66,22 @@ void SvgFeGaussianBlurNode::parseAttribute(SVGToken aSVGToken, const OUString& a } } -void SvgFeGaussianBlurNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFeGaussianBlurNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const { + if (const drawinglayer::primitive2d::Primitive2DContainer* rSource + = pParent->findGraphicSource(maIn)) + { + rTarget = *rSource; + } + const drawinglayer::primitive2d::Primitive2DReference xRef( new drawinglayer::primitive2d::SoftEdgePrimitive2D(maStdDeviation.getNumber(), std::move(rTarget))); rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; + + pParent->addGraphicSourceToMapper(maResult, rTarget); } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfeimagenode.cxx b/svgio/source/svgreader/svgfeimagenode.cxx index 777f1fd48f22..c7b1f65b8f2d 100644 --- a/svgio/source/svgreader/svgfeimagenode.cxx +++ b/svgio/source/svgreader/svgfeimagenode.cxx @@ -38,9 +38,6 @@ SvgFeImageNode::~SvgFeImageNode() {} void SvgFeImageNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) { - // call parent - SvgFilterNode::parseAttribute(aSVGToken, aContent); - // parse own switch (aSVGToken) { @@ -49,6 +46,16 @@ void SvgFeImageNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent readLocalCssStyle(aContent); break; } + case SVGToken::In: + { + maIn = aContent.trim(); + break; + } + case SVGToken::Result: + { + maResult = aContent.trim(); + break; + } case SVGToken::Href: case SVGToken::XlinkHref: { @@ -69,8 +76,15 @@ void SvgFeImageNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent } } -void SvgFeImageNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFeImageNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const { + if (const drawinglayer::primitive2d::Primitive2DContainer* rSource + = pParent->findGraphicSource(maIn)) + { + rTarget = *rSource; + } + BitmapEx aBitmapEx; if (!maData.isEmpty()) @@ -129,6 +143,8 @@ void SvgFeImageNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTar rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; } + + pParent->addGraphicSourceToMapper(maResult, rTarget); } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfeoffsetnode.cxx b/svgio/source/svgreader/svgfeoffsetnode.cxx index fd85b22a3116..aec7c3758a83 100644 --- a/svgio/source/svgreader/svgfeoffsetnode.cxx +++ b/svgio/source/svgreader/svgfeoffsetnode.cxx @@ -34,12 +34,19 @@ SvgFeOffsetNode::~SvgFeOffsetNode() {} void SvgFeOffsetNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) { - // call parent - SvgFilterNode::parseAttribute(aSVGToken, aContent); - // parse own switch (aSVGToken) { + case SVGToken::In: + { + maIn = aContent.trim(); + break; + } + case SVGToken::Result: + { + maResult = aContent.trim(); + break; + } case SVGToken::Dx: { SvgNumber aNum; @@ -73,8 +80,15 @@ void SvgFeOffsetNode::parseAttribute(SVGToken aSVGToken, const OUString& aConten } } -void SvgFeOffsetNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFeOffsetNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* pParent) const { + if (const drawinglayer::primitive2d::Primitive2DContainer* rSource + = pParent->findGraphicSource(maIn)) + { + rTarget = *rSource; + } + basegfx::B2DHomMatrix aTransform; if (maDx.isSet() || maDy.isSet()) @@ -87,6 +101,8 @@ void SvgFeOffsetNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTa new drawinglayer::primitive2d::TransformPrimitive2D(aTransform, std::move(rTarget))); rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; + + pParent->addGraphicSourceToMapper(maResult, rTarget); } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfilternode.cxx b/svgio/source/svgreader/svgfilternode.cxx index 1d7198b7d466..168d7c50d608 100644 --- a/svgio/source/svgreader/svgfilternode.cxx +++ b/svgio/source/svgreader/svgfilternode.cxx @@ -17,7 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <unordered_map> #include <svgfilternode.hxx> #include <svgfecolormatrixnode.hxx> #include <svgfedropshadownode.hxx> @@ -26,9 +25,6 @@ #include <svgfegaussianblurnode.hxx> #include <svgfeoffsetnode.hxx> -typedef std::unordered_map<OUString, const drawinglayer::primitive2d::Primitive2DContainer*> - IdGraphicSourceMapper; - namespace svgio::svgreader { SvgFilterNode::SvgFilterNode(SVGToken aType, SvgDocument& rDocument, SvgNode* pParent) @@ -38,31 +34,8 @@ SvgFilterNode::SvgFilterNode(SVGToken aType, SvgDocument& rDocument, SvgNode* pP SvgFilterNode::~SvgFilterNode() {} -void SvgFilterNode::parseAttribute(SVGToken aSVGToken, const OUString& aContent) -{ - // call parent - SvgNode::parseAttribute(aSVGToken, aContent); - - switch (aSVGToken) - { - case SVGToken::In: - { - maIn = aContent.trim(); - break; - } - case SVGToken::Result: - { - maResult = aContent.trim(); - break; - } - default: - { - break; - } - } -} - -void SvgFilterNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const +void SvgFilterNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget, + const SvgFilterNode* /*pParent*/) const { if (rTarget.empty()) return; @@ -70,9 +43,7 @@ void SvgFilterNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarg const auto& rChildren = getChildren(); const sal_uInt32 nCount(rChildren.size()); - IdGraphicSourceMapper aIdGraphicSourceMapperList; - drawinglayer::primitive2d::Primitive2DContainer aNewTarget = rTarget; - aIdGraphicSourceMapperList.emplace("SourceGraphic", &aNewTarget); + addGraphicSourceToMapper("SourceGraphic", rTarget); //TODO: Add SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint, StrokePaint ?? // apply children's filters @@ -81,25 +52,34 @@ void SvgFilterNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarg SvgFilterNode* pFilterNode = dynamic_cast<SvgFilterNode*>(rChildren[a].get()); if (pFilterNode) { - if (!pFilterNode->getIn().isEmpty()) - { - const IdGraphicSourceMapper::const_iterator aResult( - aIdGraphicSourceMapperList.find(pFilterNode->getIn())); + pFilterNode->apply(rTarget, this); + } + } +} - if (aResult != aIdGraphicSourceMapperList.end()) - { - rTarget = *aResult->second; - } - } +void SvgFilterNode::addGraphicSourceToMapper( + const OUString& rStr, drawinglayer::primitive2d::Primitive2DContainer pGraphicSource) const +{ + if (!rStr.isEmpty()) + { + const_cast<SvgFilterNode*>(this)->maIdGraphicSourceMapperList.emplace(rStr, pGraphicSource); + } +} - pFilterNode->apply(rTarget); +const drawinglayer::primitive2d::Primitive2DContainer* +SvgFilterNode::findGraphicSource(const OUString& rStr) const +{ + if (rStr.isEmpty()) + return nullptr; - if (!pFilterNode->getResult().isEmpty()) - { - aNewTarget = rTarget; - aIdGraphicSourceMapperList.emplace(pFilterNode->getResult(), &aNewTarget); - } - } + const IdGraphicSourceMapper::const_iterator aResult(maIdGraphicSourceMapperList.find(rStr)); + if (aResult == maIdGraphicSourceMapperList.end()) + { + return nullptr; + } + else + { + return &aResult->second; } } diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx index cdebccbd2526..d5e3ad33209e 100644 --- a/svgio/source/svgreader/svgstyleattributes.cxx +++ b/svgio/source/svgreader/svgstyleattributes.cxx @@ -1210,7 +1210,7 @@ namespace svgio::svgreader const SvgFilterNode* pFilter = accessFilterXLink(); if(pFilter) { - pFilter->apply(aSource); + pFilter->apply(aSource, nullptr); } }