svgio/qa/cppunit/SvgImportTest.cxx            |    8 ++++++++
 svgio/qa/cppunit/data/fillContextStroke.svg   |    8 ++++++++
 svgio/source/svgreader/svgstyleattributes.cxx |   16 ++++++++++++++++
 3 files changed, 32 insertions(+)

New commits:
commit 1a7c927f6fb8fc4f6f2277a8442ce4b37f1ffccf
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Jun 13 12:09:19 2024 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Thu Jun 13 14:47:33 2024 +0200

    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 <xiscofa...@libreoffice.org>

diff --git a/svgio/qa/cppunit/SvgImportTest.cxx 
b/svgio/qa/cppunit/SvgImportTest.cxx
index 9dc25ac2fb03..280cffc5c8a5 100644
--- a/svgio/qa/cppunit/SvgImportTest.cxx
+++ b/svgio/qa/cppunit/SvgImportTest.cxx
@@ -654,6 +654,14 @@ CPPUNIT_TEST_FIXTURE(Test, testContextFill)
     assertXPath(pDocument, 
"/primitive2D/transform/transform/polypolygoncolor"_ostr, "color"_ostr, 
u"#ff0000"_ustr);
 }
 
+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 7e099534e464..485142240871 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1332,6 +1332,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);
@@ -1381,6 +1385,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;
@@ -2130,6 +2138,10 @@ namespace svgio::svgreader
             {
                 return getContextFill();
             }
+            else if (mbContextStroke)
+            {
+                return getContextStroke();
+            }
             else if (maNodeFillURL.isEmpty())
             {
                 const SvgStyleAttributes* pSvgStyleAttributes = 
getParentStyle();
@@ -2175,6 +2187,10 @@ namespace svgio::svgreader
                     return &maStroke.getBColor();
                 }
             }
+            else if (mbContextFill)
+            {
+                return getContextFill();
+            }
             else if (mbContextStroke)
             {
                 return getContextStroke();

Reply via email to