diff --git a/filter/qa/unit/data/dashedline.fodg b/filter/qa/unit/data/dashedline.fodg new file mode 100644 index 000000000000..73ca01124945 --- /dev/null +++ b/filter/qa/unit/data/dashedline.fodg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/filter/qa/unit/svg.cxx b/filter/qa/unit/svg.cxx index b2f033adcca6..6bcbbb17df02 100644 --- a/filter/qa/unit/svg.cxx +++ b/filter/qa/unit/svg.cxx @@ -397,6 +397,20 @@ CPPUNIT_TEST_FIXTURE(SvgFilterTest, testTdf166789) CPPUNIT_ASSERT_DOUBLES_EQUAL(7000, length.toInt32(), 70); // allow 1% for rounding errors } +CPPUNIT_TEST_FIXTURE(SvgFilterTest, testDashedLine) +{ + // A dashed line + loadFromFile(u"dashedline.fodg"); + + save(TestFilter::SVG_DRAW); + + xmlDocUniquePtr pXmlDoc = parseExportedFile(); + CPPUNIT_ASSERT(pXmlDoc); + + // The result must include 'stroke-dasharray' attribute + assertXPath(pXmlDoc, "/svg:svg/svg:g//svg:path", "stroke-dasharray", u"800,300,90,300,90,300"); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx index 7dd1ad527811..407979a21c3e 100644 --- a/filter/source/svg/svgwriter.cxx +++ b/filter/source/svg/svgwriter.cxx @@ -2142,6 +2142,18 @@ void SVGActionWriter::ImplAddLineAttr( const LineInfo &rAttrs ) } } + if (rAttrs.GetStyle() == LineStyle::Dash) + { + OUStringBuffer aDashArrayStr; + for (double x : rAttrs.GetDotDashArray()) + { + if (!aDashArrayStr.isEmpty()) + aDashArrayStr.append(","); + aDashArrayStr.append(x); + } + if (!aDashArrayStr.isEmpty()) + mrExport.AddAttribute(u"stroke-dasharray"_ustr, aDashArrayStr.makeStringAndClear()); + } }