[Libreoffice-commits] core.git: svgio/source

Chr. Rossmanith ChrRossmanith at gmx.de
Thu Nov 20 01:22:31 PST 2014


 svgio/source/svgreader/svgnode.cxx            |   22 ++++++++++------------
 svgio/source/svgreader/svgstyleattributes.cxx |    7 +++++--
 2 files changed, 15 insertions(+), 14 deletions(-)

New commits:
commit 5f98e35f81c887ff55edbdbe0d264215d9faa562
Author: Chr. Rossmanith <ChrRossmanith at gmx.de>
Date:   Sun Nov 16 21:43:13 2014 +0100

    SVG: improve handling of visibility property
    
    visible children of an invisible parent are now visible
    
    Change-Id: I2eafbd15d22f54ec39f12bfd32175925ab8a6184
    Reviewed-on: https://gerrit.libreoffice.org/12504
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx
index d084868..e4038e0 100644
--- a/svgio/source/svgreader/svgnode.cxx
+++ b/svgio/source/svgreader/svgnode.cxx
@@ -496,12 +496,6 @@ namespace svgio
                 return;
             }
 
-            const SvgStyleAttributes* pStyles = getSvgStyleAttributes();
-            if(pStyles && (Visibility_hidden == pStyles->getVisibility() || Visibility_collapse == pStyles->getVisibility()))
-            {
-                return;
-            }
-
             if(!bReferenced)
             {
                 if(SVGTokenDefs == getType() ||
@@ -540,11 +534,14 @@ namespace svgio
 
                     if(pCandidate && Display_none != pCandidate->getDisplay())
                     {
+                        const SvgNodeVector& rGrandChildren = pCandidate->getChildren();
                         const SvgStyleAttributes* pChildStyles = pCandidate->getSvgStyleAttributes();
-                        if(pChildStyles && Visibility_hidden != pChildStyles->getVisibility())
+                        // decompose:
+                        // - visible terminal nodes
+                        // - all non-terminal nodes (might contain visible nodes down the hierarchy)
+                        if( !rGrandChildren.empty() || ( pChildStyles && (Visibility_visible == pChildStyles->getVisibility())) )
                         {
                             drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
-
                             pCandidate->decomposeSvgNode(aNewTarget, bReferenced);
 
                             if(aNewTarget.hasElements())
@@ -552,15 +549,16 @@ namespace svgio
                                 drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(rTarget, aNewTarget);
                             }
                         }
-                    }
-                    else if(!pCandidate)
-                    {
+                     }
+                     else if(!pCandidate)
+                     {
                         OSL_ENSURE(false, "Null-Pointer in child node list (!)");
-                    }
+                     }
                 }
 
                 if(rTarget.hasElements())
                 {
+                    const SvgStyleAttributes* pStyles = getSvgStyleAttributes();
                     if(pStyles)
                     {
                         // check if we have Title or Desc
diff --git a/svgio/source/svgreader/svgstyleattributes.cxx b/svgio/source/svgreader/svgstyleattributes.cxx
index 73fe7f8..182448f 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1230,15 +1230,18 @@ namespace svgio
             mbIsClipPathContent(SVGTokenClipPathNode == mrOwner.getType()),
             mbStrokeDasharraySet(false)
         {
+            const SvgStyleAttributes* pParentStyle = getParentStyle();
             if(!mbIsClipPathContent)
             {
-                const SvgStyleAttributes* pParentStyle = getParentStyle();
-
                 if(pParentStyle)
                 {
                     mbIsClipPathContent = pParentStyle->mbIsClipPathContent;
                 }
             }
+            if(pParentStyle)
+            {
+                maVisibility = pParentStyle->maVisibility;
+            }
         }
 
         SvgStyleAttributes::~SvgStyleAttributes()


More information about the Libreoffice-commits mailing list