summaryrefslogtreecommitdiff
path: root/svgio
diff options
context:
space:
mode:
authorXisco Fauli <anistenis@gmail.com>2016-03-28 19:24:29 +0200
committerXisco FaulĂ­ <anistenis@gmail.com>2016-03-29 08:00:47 +0000
commit3041df16f8315859ddf22075eac8f9ad4fa37b8e (patch)
treef221fa0aea0f3abcf9e67b0b4e7e7fe0158321de /svgio
parentd5e4fe23b2af09a2989a0b1c37b13bb4b2ea8787 (diff)
SVGIO: Don't inherit style attributes from parent if the...
... shapes define their own attributes. Partially revert commit c2d130425cc876cceb96cc7e47636426a9e48fa8 Change-Id: Iee98003f4ff63575a28818b091ab77431337192f Reviewed-on: https://gerrit.libreoffice.org/23571 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Xisco FaulĂ­ <anistenis@gmail.com>
Diffstat (limited to 'svgio')
-rw-r--r--svgio/qa/cppunit/SvgImportTest.cxx21
-rw-r--r--svgio/qa/cppunit/data/ClipPathAndStyle.svg13
-rw-r--r--svgio/source/svgreader/svgstyleattributes.cxx128
3 files changed, 54 insertions, 108 deletions
diff --git a/svgio/qa/cppunit/SvgImportTest.cxx b/svgio/qa/cppunit/SvgImportTest.cxx
index c4b681bd242d..046d905e5036 100644
--- a/svgio/qa/cppunit/SvgImportTest.cxx
+++ b/svgio/qa/cppunit/SvgImportTest.cxx
@@ -54,6 +54,7 @@ class Test : public test::BootstrapFixture, public XmlTestTools
void testRGBAColor();
void testTdf97936();
void testClipPathAndParentStyle();
+ void testClipPathAndStyle();
Primitive2DSequence parseSvg(const char* aSource);
@@ -78,6 +79,7 @@ public:
CPPUNIT_TEST(testRGBAColor);
CPPUNIT_TEST(testTdf97936);
CPPUNIT_TEST(testClipPathAndParentStyle);
+ CPPUNIT_TEST(testClipPathAndStyle);
CPPUNIT_TEST_SUITE_END();
};
@@ -423,6 +425,25 @@ void Test::testClipPathAndParentStyle()
assertXPath(pDocument, "/primitive2D/transform/polypolygonstroke/line", "width", "5");
}
+
+void Test::testClipPathAndStyle()
+{
+ //Check that fill color, stroke color and stroke-width are inherited from use element
+ //when the element is within a clipPath element
+ Primitive2DSequence aSequenceClipPathAndStyle = parseSvg("/svgio/qa/cppunit/data/ClipPathAndStyle.svg");
+ CPPUNIT_ASSERT_EQUAL(1, (int)aSequenceClipPathAndStyle.getLength());
+
+ Primitive2dXmlDump dumper;
+ xmlDocPtr pDocument = dumper.dumpAndParse(comphelper::sequenceToContainer<Primitive2DContainer>(aSequenceClipPathAndStyle));
+
+ CPPUNIT_ASSERT (pDocument);
+
+ assertXPath(pDocument, "/primitive2D/transform/polypolygoncolor", "color", "#ccccff");
+ assertXPath(pDocument, "/primitive2D/transform/polypolygonstroke/line", "color", "#0000cc");
+ assertXPath(pDocument, "/primitive2D/transform/polypolygonstroke/line", "width", "2");
+
+}
+
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
}
diff --git a/svgio/qa/cppunit/data/ClipPathAndStyle.svg b/svgio/qa/cppunit/data/ClipPathAndStyle.svg
new file mode 100644
index 000000000000..29814fadbb86
--- /dev/null
+++ b/svgio/qa/cppunit/data/ClipPathAndStyle.svg
@@ -0,0 +1,13 @@
+<svg version="1.1" baseProfile="basic" id="svg-root"
+ width="100%" height="100%" viewBox="0 0 480 360"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <clipPath>
+ <circle id="c1" cx="100" cy="100" r="50"
+ style="stroke: #0000cc;
+ stroke-width: 2px;
+ fill : #ccccff;"/>
+ </clipPath>
+
+ <use xlink:href="#c1" style="fill:red" stroke-width="5px" stroke="black"/>
+
+</svg> \ No newline at end of file
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx
index 6b768f000408..e04999d9f1e9 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1954,19 +1954,7 @@ namespace svgio
const basegfx::BColor* SvgStyleAttributes::getFill() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getFill();
- }
-
- static basegfx::BColor aBlack(0.0, 0.0, 0.0);
- return &aBlack;
- }
- else if((SVGTokenMarker == mrOwner.getType()) && !maFill.isSet())
+ if((SVGTokenMarker == mrOwner.getType()) && !maFill.isSet())
{
const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
@@ -1998,24 +1986,18 @@ namespace svgio
return pSvgStyleAttributes->getFill();
}
}
+ else if(mbIsClipPathContent)
+ {
+ static basegfx::BColor aBlack(0.0, 0.0, 0.0);
+ return &aBlack;
+ }
return nullptr;
}
const basegfx::BColor* SvgStyleAttributes::getStroke() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getStroke();
- }
-
- return nullptr;
- }
- else if(maStroke.isSet())
+ if(maStroke.isSet())
{
if(maStroke.isCurrent())
{
@@ -2053,18 +2035,7 @@ namespace svgio
const SvgGradientNode* SvgStyleAttributes::getSvgGradientNodeFill() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getSvgGradientNodeFill();
- }
-
- return nullptr;
- }
- else if(mpSvgGradientNodeFill)
+ if(mpSvgGradientNodeFill)
{
return mpSvgGradientNodeFill;
}
@@ -2083,18 +2054,7 @@ namespace svgio
const SvgGradientNode* SvgStyleAttributes::getSvgGradientNodeStroke() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getSvgGradientNodeStroke();
- }
-
- return nullptr;
- }
- else if(mpSvgGradientNodeStroke)
+ if(mpSvgGradientNodeStroke)
{
return mpSvgGradientNodeStroke;
}
@@ -2113,18 +2073,7 @@ namespace svgio
const SvgPatternNode* SvgStyleAttributes::getSvgPatternNodeFill() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getSvgPatternNodeFill();
- }
-
- return nullptr;
- }
- else if(mpSvgPatternNodeFill)
+ if(mpSvgPatternNodeFill)
{
return mpSvgPatternNodeFill;
}
@@ -2143,18 +2092,7 @@ namespace svgio
const SvgPatternNode* SvgStyleAttributes::getSvgPatternNodeStroke() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getSvgPatternNodeStroke();
- }
-
- return nullptr;
- }
- else if(mpSvgPatternNodeStroke)
+ if(mpSvgPatternNodeStroke)
{
return mpSvgPatternNodeStroke;
}
@@ -2173,18 +2111,7 @@ namespace svgio
SvgNumber SvgStyleAttributes::getStrokeWidth() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getStrokeWidth();
- }
-
- return SvgNumber(0.0);
- }
- else if(maStrokeWidth.isSet())
+ if(maStrokeWidth.isSet())
{
return maStrokeWidth;
}
@@ -2196,6 +2123,11 @@ namespace svgio
return pSvgStyleAttributes->getStrokeWidth();
}
+ if(mbIsClipPathContent)
+ {
+ return SvgNumber(0.0);
+ }
+
// default is 1
return SvgNumber(1.0);
}
@@ -2213,18 +2145,7 @@ namespace svgio
SvgNumber SvgStyleAttributes::getFillOpacity() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getFillOpacity();
- }
-
- return SvgNumber(1.0);
- }
- else if(maFillOpacity.isSet())
+ if(maFillOpacity.isSet())
{
return maFillOpacity;
}
@@ -2242,17 +2163,7 @@ namespace svgio
SvgNumber SvgStyleAttributes::getOpacity() const
{
- if(mbIsClipPathContent)
- {
- const SvgStyleAttributes* pSvgStyleAttributes = getParentStyle();
-
- if(pSvgStyleAttributes)
- {
- return pSvgStyleAttributes->getOpacity();
- }
- return SvgNumber(1.0);
- }
- else if(maOpacity.isSet())
+ if(maOpacity.isSet())
{
return maOpacity;
}
@@ -2910,3 +2821,4 @@ namespace svgio
} // end of namespace svgio
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+