diff options
author | Xisco Fauli <xiscofauli@libreoffice.org> | 2023-06-24 11:17:16 +0200 |
---|---|---|
committer | Xisco Fauli <xiscofauli@libreoffice.org> | 2023-06-24 12:33:12 +0200 |
commit | 75399b8aad6c0f0998b9d0a6eddb2e29f8bc114c (patch) | |
tree | 02c834bff607acc6a8b5f7ec4c243454fdc5c8ac /svgio/source | |
parent | 85013c57dd29e32ec0411c159ea72824ebca5aa9 (diff) |
tdf#132246, tdf#155735: Add support for SourceAlpha
Change-Id: I8feae2447b17e15113ca45fe46c0d68cb6b6ab71
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153550
Tested-by: Jenkins
Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org>
Diffstat (limited to 'svgio/source')
-rw-r--r-- | svgio/source/svgreader/svgfecolormatrixnode.cxx | 21 | ||||
-rw-r--r-- | svgio/source/svgreader/svgfegaussianblurnode.cxx | 18 |
2 files changed, 37 insertions, 2 deletions
diff --git a/svgio/source/svgreader/svgfecolormatrixnode.cxx b/svgio/source/svgreader/svgfecolormatrixnode.cxx index 5f8e03c4318b..7902144e8bc8 100644 --- a/svgio/source/svgreader/svgfecolormatrixnode.cxx +++ b/svgio/source/svgreader/svgfecolormatrixnode.cxx @@ -26,6 +26,7 @@ namespace svgio::svgreader SvgFeColorMatrixNode::SvgFeColorMatrixNode(SvgDocument& rDocument, SvgNode* pParent) : SvgNode(SVGToken::FeColorMatrix, rDocument, pParent) , maType(ColorType::None) + , maIn(In::SourceGraphic) { } @@ -65,6 +66,17 @@ void SvgFeColorMatrixNode::parseAttribute(const OUString& /*rTokenName*/, SVGTok maValuesContent = aContent; break; } + case SVGToken::In: + { + if (!aContent.isEmpty()) + { + if (o3tl::equalsIgnoreAsciiCase(o3tl::trim(aContent), u"SourceAlpha")) + { + maIn = In::SourceAlpha; + } + } + break; + } default: { break; @@ -112,6 +124,15 @@ void SvgFeColorMatrixNode::apply(drawinglayer::primitive2d::Primitive2DContainer std::move(rTarget), std::make_shared<basegfx::BColorModifier_matrix>(aMatrix))); rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; } + + if (maIn == In::SourceAlpha) + { + const drawinglayer::primitive2d::Primitive2DReference xRef( + new drawinglayer::primitive2d::ModifiedColorPrimitive2D( + std::move(rTarget), std::make_shared<basegfx::BColorModifier_alpha>())); + + rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; + } } } // end of namespace svgio::svgreader diff --git a/svgio/source/svgreader/svgfegaussianblurnode.cxx b/svgio/source/svgreader/svgfegaussianblurnode.cxx index fff21345c4d8..7dbe808a484a 100644 --- a/svgio/source/svgreader/svgfegaussianblurnode.cxx +++ b/svgio/source/svgreader/svgfegaussianblurnode.cxx @@ -18,6 +18,7 @@ */ #include <svgfegaussianblurnode.hxx> +#include <drawinglayer/primitive2d/modifiedcolorprimitive2d.hxx> #include <drawinglayer/primitive2d/softedgeprimitive2d.hxx> #include <o3tl/string_view.hxx> @@ -26,7 +27,7 @@ namespace svgio::svgreader SvgFeGaussianBlurNode::SvgFeGaussianBlurNode(SvgDocument& rDocument, SvgNode* pParent) : SvgNode(SVGToken::FeGaussianBlur, rDocument, pParent) , maStdDeviation(SvgNumber(0.0)) - , maIn(In::None) + , maIn(In::SourceGraphic) { } @@ -59,6 +60,10 @@ void SvgFeGaussianBlurNode::parseAttribute(const OUString& /*rTokenName*/, SVGTo { maIn = In::SourceGraphic; } + else if (o3tl::equalsIgnoreAsciiCase(o3tl::trim(aContent), u"SourceAlpha")) + { + maIn = In::SourceAlpha; + } } break; } @@ -71,7 +76,7 @@ void SvgFeGaussianBlurNode::parseAttribute(const OUString& /*rTokenName*/, SVGTo void SvgFeGaussianBlurNode::apply(drawinglayer::primitive2d::Primitive2DContainer& rTarget) const { - if (maIn == In::SourceGraphic) + if (maStdDeviation.getNumber() != 0.0) { const drawinglayer::primitive2d::Primitive2DReference xRef( new drawinglayer::primitive2d::SoftEdgePrimitive2D(maStdDeviation.getNumber(), @@ -79,6 +84,15 @@ void SvgFeGaussianBlurNode::apply(drawinglayer::primitive2d::Primitive2DContaine rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; } + + if (maIn == In::SourceAlpha) + { + const drawinglayer::primitive2d::Primitive2DReference xRef( + new drawinglayer::primitive2d::ModifiedColorPrimitive2D( + std::move(rTarget), std::make_shared<basegfx::BColorModifier_alpha>())); + + rTarget = drawinglayer::primitive2d::Primitive2DContainer{ xRef }; + } } } // end of namespace svgio::svgreader |