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

Chr. Rossmanith ChrRossmanith at gmx.de
Sat Nov 1 14:34:00 PDT 2014


 svgio/inc/svgio/svgreader/svgstyleattributes.hxx |   13 ++++++++++++
 svgio/inc/svgio/svgreader/svgtoken.hxx           |    1 
 svgio/source/svgreader/svgnode.cxx               |   24 +++++++++++++++--------
 svgio/source/svgreader/svgstyleattributes.cxx    |   24 +++++++++++++++++++++++
 svgio/source/svgreader/svgtoken.cxx              |    2 +
 5 files changed, 56 insertions(+), 8 deletions(-)

New commits:
commit 501f25e3291dd0ab38e3612de2fc160d953c1846
Author: Chr. Rossmanith <ChrRossmanith at gmx.de>
Date:   Sat Nov 1 22:22:38 2014 +0100

    SVG: handle visibility property
    
    improve import of masking-path-08-b.svg of the W3C svg test suite when using insert->media->image
    
    Change-Id: Ib4d48165f982e394e2171ac82e6cc06911553904
    Reviewed-on: https://gerrit.libreoffice.org/12168
    Reviewed-by: Christina Roßmanith <ChrRossmanith at web.de>
    Tested-by: Christina Roßmanith <ChrRossmanith at web.de>

diff --git a/svgio/inc/svgio/svgreader/svgstyleattributes.hxx b/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
index ab40e9d..693772b 100644
--- a/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
+++ b/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
@@ -153,6 +153,14 @@ namespace svgio
             BaselineShift_Length
         };
 
+        enum Visibility
+        {
+            Visibility_visible,
+            Visibility_hidden,
+            Visibility_collapse,
+            Visibility_inherit
+        };
+
         class SvgStyleAttributes
         {
         private:
@@ -185,6 +193,7 @@ namespace svgio
             TextAnchor                  maTextAnchor;
             SvgPaint                    maColor;
             SvgNumber                   maOpacity;
+            Visibility                  maVisibility;
             OUString               maTitle;
             OUString               maDesc;
 
@@ -401,6 +410,10 @@ namespace svgio
             SvgNumber getOpacity() const { return maOpacity; }
             void setOpacity(const SvgNumber& rOpacity = SvgNumber()) { maOpacity = rOpacity; }
 
+            /// Visibility
+            Visibility getVisibility() const { return maVisibility; }
+            void setVisibility(Visibility eVisibility) { maVisibility = eVisibility; }
+
             // Title content
             const OUString& getTitle() const { return maTitle; }
             void setTitle(const OUString& rNew) { maTitle = rNew; }
diff --git a/svgio/inc/svgio/svgreader/svgtoken.hxx b/svgio/inc/svgio/svgreader/svgtoken.hxx
index 87d23b6..8d60847 100644
--- a/svgio/inc/svgio/svgreader/svgtoken.hxx
+++ b/svgio/inc/svgio/svgreader/svgtoken.hxx
@@ -102,6 +102,7 @@ namespace svgio
             SVGTokenPatternContentUnits,
             SVGTokenPatternTransform,
             SVGTokenOpacity,
+            SVGTokenVisibility,
             SVGTokenTitle,
             SVGTokenDesc,
 
diff --git a/svgio/source/svgreader/svgnode.cxx b/svgio/source/svgreader/svgnode.cxx
index 723ddbf..d084868 100644
--- a/svgio/source/svgreader/svgnode.cxx
+++ b/svgio/source/svgreader/svgnode.cxx
@@ -496,6 +496,12 @@ namespace svgio
                 return;
             }
 
+            const SvgStyleAttributes* pStyles = getSvgStyleAttributes();
+            if(pStyles && (Visibility_hidden == pStyles->getVisibility() || Visibility_collapse == pStyles->getVisibility()))
+            {
+                return;
+            }
+
             if(!bReferenced)
             {
                 if(SVGTokenDefs == getType() ||
@@ -534,16 +540,20 @@ namespace svgio
 
                     if(pCandidate && Display_none != pCandidate->getDisplay())
                     {
-                        drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
+                        const SvgStyleAttributes* pChildStyles = pCandidate->getSvgStyleAttributes();
+                        if(pChildStyles && Visibility_hidden != pChildStyles->getVisibility())
+                        {
+                            drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                        pCandidate->decomposeSvgNode(aNewTarget, bReferenced);
+                            pCandidate->decomposeSvgNode(aNewTarget, bReferenced);
 
-                        if(aNewTarget.hasElements())
-                        {
-                            drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(rTarget, aNewTarget);
+                            if(aNewTarget.hasElements())
+                            {
+                                drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence(rTarget, aNewTarget);
+                            }
                         }
                     }
-                    else
+                    else if(!pCandidate)
                     {
                         OSL_ENSURE(false, "Null-Pointer in child node list (!)");
                     }
@@ -551,8 +561,6 @@ namespace svgio
 
                 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 f2ba4b5..73fe7f8 100644
--- a/svgio/source/svgreader/svgstyleattributes.cxx
+++ b/svgio/source/svgreader/svgstyleattributes.cxx
@@ -1212,6 +1212,7 @@ namespace svgio
             maTextAnchor(TextAnchor_notset),
             maColor(),
             maOpacity(1.0),
+            maVisibility(Visibility_visible),
             maTitle(),
             maDesc(),
             maClipPathXLink(),
@@ -1736,6 +1737,29 @@ namespace svgio
                     }
                     break;
                 }
+                case SVGTokenVisibility:
+                {
+                    if(!aContent.isEmpty())
+                    {
+                        if(aContent.startsWith("visible"))
+                        {
+                            setVisibility(Visibility_visible);
+                        }
+                        else if(aContent.startsWith("hidden"))
+                        {
+                            setVisibility(Visibility_hidden);
+                        }
+                        else if(aContent.startsWith("collapse"))
+                        {
+                            setVisibility(Visibility_collapse);
+                        }
+                        else if(aContent.startsWith("inherit"))
+                        {
+                            setVisibility(Visibility_inherit);
+                        }
+                    }
+                    break;
+                }
                 case SVGTokenTitle:
                 {
                     setTitle(aContent);
diff --git a/svgio/source/svgreader/svgtoken.cxx b/svgio/source/svgreader/svgtoken.cxx
index fa5d7ba..f0ff803 100644
--- a/svgio/source/svgreader/svgtoken.cxx
+++ b/svgio/source/svgreader/svgtoken.cxx
@@ -91,6 +91,7 @@ namespace svgio
         static OUString aSVGStrPatternContentUnits("patternContentUnits");
         static OUString aSVGStrPatternTransform("patternTransform");
         static OUString aSVGStrOpacity("opacity");
+        static OUString aSVGStrVisibility("visibility");
         static OUString aSVGStrTitle("title");
         static OUString aSVGStrDesc("desc");
 
@@ -236,6 +237,7 @@ namespace svgio
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrPatternContentUnits, SVGTokenPatternContentUnits));
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrPatternTransform, SVGTokenPatternTransform));
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrOpacity, SVGTokenOpacity));
+                aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrVisibility, SVGTokenVisibility));
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrTitle, SVGTokenTitle));
                 aSVGTokenMapperList.insert(SVGTokenValueType(aSVGStrDesc, SVGTokenDesc));
 


More information about the Libreoffice-commits mailing list