summaryrefslogtreecommitdiff
path: root/svgio/source
diff options
context:
space:
mode:
authorXisco Fauli <xiscofauli@libreoffice.org>2023-06-24 11:17:16 +0200
committerXisco Fauli <xiscofauli@libreoffice.org>2023-06-24 12:33:12 +0200
commit75399b8aad6c0f0998b9d0a6eddb2e29f8bc114c (patch)
tree02c834bff607acc6a8b5f7ec4c243454fdc5c8ac /svgio/source
parent85013c57dd29e32ec0411c159ea72824ebca5aa9 (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.cxx21
-rw-r--r--svgio/source/svgreader/svgfegaussianblurnode.cxx18
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