summaryrefslogtreecommitdiff
path: root/svgio
diff options
context:
space:
mode:
authorXisco Fauli <xiscofauli@libreoffice.org>2024-06-13 12:09:19 +0200
committerAndras Timar <andras.timar@collabora.com>2024-06-29 19:00:55 +0200
commit24762ed05243027009a3c65d61d2f911b210c6a7 (patch)
tree0e57bb9994c79a255935b1491cf3dddefd182d99 /svgio
parentff88be15e7b1f54f804efbf883c60e572f728ce1 (diff)
tdf#161213: fill can use context-stroke and vice versa
Change-Id: Id127bd4943ff1b67915d1de3ba4fcf93dab21423 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168774 Tested-by: Jenkins Reviewed-by: Xisco Fauli <xiscofauli@libreoffice.org> (cherry picked from commit 1a7c927f6fb8fc4f6f2277a8442ce4b37f1ffccf) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168790 Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
Diffstat (limited to 'svgio')
-rw-r--r--svgio/qa/cppunit/SvgImportTest.cxx8
-rw-r--r--svgio/qa/cppunit/data/fillContextStroke.svg8
-rw-r--r--svgio/source/svgreader/svgstyleattributes.cxx16
3 files changed, 32 insertions, 0 deletions
diff --git a/svgio/qa/cppunit/SvgImportTest.cxx b/svgio/qa/cppunit/SvgImportTest.cxx
index 5214319f59ff..3dd819f6522b 100644
--- a/svgio/qa/cppunit/SvgImportTest.cxx
+++ b/svgio/qa/cppunit/SvgImportTest.cxx
@@ -693,6 +693,14 @@ CPPUNIT_TEST_FIXTURE(Test, testContextFill)
assertXPath(pDocument, "/primitive2D/transform/transform/polypolygoncolor"_ostr, "color"_ostr, "#ff0000");
}
+CPPUNIT_TEST_FIXTURE(Test, testFillContextStroke)
+{
+ xmlDocUniquePtr pDocument = dumpAndParseSvg(u"/svgio/qa/cppunit/data/fillContextStroke.svg");
+
+ assertXPath(pDocument, "/primitive2D/transform/polypolygonstroke/line"_ostr, "color"_ostr, u"#ff0000"_ustr);
+ assertXPath(pDocument, "/primitive2D/transform/transform/polypolygoncolor"_ostr, "color"_ostr, u"#ff0000"_ustr);
+}
+
CPPUNIT_TEST_FIXTURE(Test, testContextStroke)
{
xmlDocUniquePtr pDocument = dumpAndParseSvg(u"/svgio/qa/cppunit/data/contextStroke.svg");
diff --git a/svgio/qa/cppunit/data/fillContextStroke.svg b/svgio/qa/cppunit/data/fillContextStroke.svg
new file mode 100644
index 000000000000..a5288889c63e
--- /dev/null
+++ b/svgio/qa/cppunit/data/fillContextStroke.svg
@@ -0,0 +1,8 @@
+<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
+<defs>
+ <marker id="triangle" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="6" markerHeight="6" orient="auto">
+ <path d="M 0 0 L 10 5 L 0 10 z" fill="context-stroke" />
+ </marker>
+</defs>
+<line x1="10" y1="10" x2="90" y2="90" fill="red" stroke="red" marker-end="url(#triangle)" />
+</svg>
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx
index 42e19c51fcd5..bb15fbfdc0a3 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1326,6 +1326,10 @@ namespace svgio::svgreader
{
mbContextFill = true;
}
+ else if(o3tl::equalsIgnoreAsciiCase(o3tl::trim(aContent), u"context-stroke"))
+ {
+ mbContextStroke = true;
+ }
else if(readSvgPaint(aContent, aSvgPaint, aURL, aOpacity))
{
setFill(aSvgPaint);
@@ -1375,6 +1379,10 @@ namespace svgio::svgreader
{
mbContextStroke = true;
}
+ else if(o3tl::equalsIgnoreAsciiCase(o3tl::trim(aContent), u"context-fill"))
+ {
+ mbContextFill = true;
+ }
else if(readSvgPaint(aContent, aSvgPaint, aURL, aOpacity))
{
maStroke = aSvgPaint;
@@ -2124,6 +2132,10 @@ namespace svgio::svgreader
{
return getContextFill();
}
+ else if (mbContextStroke)
+ {
+ return getContextStroke();
+ }
else if (maNodeFillURL.isEmpty())
{
const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
@@ -2169,6 +2181,10 @@ namespace svgio::svgreader
return &maStroke.getBColor();
}
}
+ else if (mbContextFill)
+ {
+ return getContextFill();
+ }
else if (mbContextStroke)
{
return getContextStroke();