summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--svgio/qa/cppunit/SvgImportTest.cxx16
-rw-r--r--svgio/qa/cppunit/data/dy_in_exs.svg7
-rw-r--r--svgio/source/svgreader/svgstyleattributes.cxx8
3 files changed, 27 insertions, 4 deletions
diff --git a/svgio/qa/cppunit/SvgImportTest.cxx b/svgio/qa/cppunit/SvgImportTest.cxx
index d06a50f0e98b..dd53d4e28a19 100644
--- a/svgio/qa/cppunit/SvgImportTest.cxx
+++ b/svgio/qa/cppunit/SvgImportTest.cxx
@@ -1677,6 +1677,22 @@ CPPUNIT_TEST_FIXTURE(Test, testDyInEms)
assertXPath(pDocument, "//textsimpleportion[2]"_ostr, "y"_ostr, u"32"_ustr);
}
+CPPUNIT_TEST_FIXTURE(Test, testExs)
+{
+ // tdf#160594 given an SVG file with <tspan dy="3ex" style="font-size:1ex">:
+ xmlDocUniquePtr pDocument = dumpAndParseSvg(u"/svgio/qa/cppunit/data/dy_in_exs.svg");
+
+ assertXPath(pDocument, "//textsimpleportion"_ostr, 2);
+ assertXPath(pDocument, "//textsimpleportion[1]"_ostr, "height"_ostr, u"16"_ustr);
+
+ sal_Int32 nSize = getXPath(pDocument, "//textsimpleportion[2]"_ostr, "height"_ostr).toInt32();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected less than: 16
+ // - Actual : 16
+ // i.e. the parent font-size was used, instead of its x-size.
+ CPPUNIT_ASSERT_LESS(sal_Int32(16), nSize);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svgio/qa/cppunit/data/dy_in_exs.svg b/svgio/qa/cppunit/data/dy_in_exs.svg
new file mode 100644
index 000000000000..816a64a4586c
--- /dev/null
+++ b/svgio/qa/cppunit/data/dy_in_exs.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+
+<svg xmlns="http://www.w3.org/2000/svg" width="1in" height="1in" viewBox="0 0 100% 100%">
+
+ <text x="5" y="20" style="font-size:16px;font-family:Liberation Sans">foo
+ <tspan x="5" dy="3ex" style="font-size:1ex">bar</tspan></text>
+</svg> \ No newline at end of file
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx
index 63be6afe270c..763a7a3cdd96 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -2642,11 +2642,11 @@ namespace svgio::svgreader
if(pSvgStyleAttributes)
{
const SvgNumber aParentNumber = pSvgStyleAttributes->getFontSizeNumber();
+ double n = aParentNumber.getNumber() * maFontSizeNumber.getNumber();
+ if (SvgUnit::ex == maFontSizeNumber.getUnit())
+ n *= 0.5; // FIXME: use "x-height of the first available font"
- return SvgNumber(
- aParentNumber.getNumber() * maFontSizeNumber.getNumber(),
- aParentNumber.getUnit(),
- true);
+ return SvgNumber(n, aParentNumber.getUnit());
}
}