Author: alg
Date: Wed Jul 25 09:28:44 2012
New Revision: 1365501

URL: http://svn.apache.org/viewvc?rev=1365501&view=rev
Log:
#120334# Added support for multiple CSS styles per graphic primitive in SVG

Modified:
    incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgnode.hxx
    incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgcirclenode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgellipsenode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svggnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgimagenode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svglinenode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgmarkernode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgpathnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgpatternnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgpolynode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgrectnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgtextnode.cxx
    incubator/ooo/trunk/main/svgio/source/svgreader/svgusenode.cxx

Modified: incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgnode.hxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgnode.hxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgnode.hxx (original)
+++ incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgnode.hxx Wed Jul 25 
09:28:44 2012
@@ -50,6 +50,7 @@ namespace svgio
     namespace svgreader
     {
         typedef ::std::vector< SvgNode* > SvgNodeVector;
+        typedef ::std::vector< const SvgStyleAttributes* > 
SvgStyleAttributeVector;
 
         enum XmlSpace
         {
@@ -79,6 +80,13 @@ namespace svgio
             /// XmlSpace value
             XmlSpace                    maXmlSpace;
 
+            /// CSS styles
+            SvgStyleAttributeVector     maCssStyleVector;
+
+        protected:
+            /// helper to evtl. link to css style
+            const SvgStyleAttributes* checkForCssStyle(const rtl::OUString& 
rClassStr, const SvgStyleAttributes& rOriginal) const;
+
         public:
             SvgNode(
                 SVGToken aType,

Modified: 
incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx 
(original)
+++ incubator/ooo/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx 
Wed Jul 25 09:28:44 2012
@@ -139,12 +139,18 @@ namespace svgio
             TextAnchor_end
         };
 
+        enum FillRule
+        {
+            FillRule_notset,
+            FillRule_nonzero,
+            FillRule_evenodd
+        };
+
         class SvgStyleAttributes
         {
         private:
             SvgNode&                    mrOwner;
             const SvgStyleAttributes*   mpCssStyleParent;
-
             SvgPaint                    maFill;
             SvgPaint                    maStroke;
             SvgPaint                    maStopColor;
@@ -187,18 +193,19 @@ namespace svgio
             rtl::OUString               maMarkerEndXLink;
             const SvgMarkerNode*        mpMarkerEndXLink;
 
+            /// fill rule
+            FillRule                    maFillRule;
+
+            // ClipRule setting (only valid wne mbIsClipPathContent == true, 
default is FillRule_nonzero)
+            FillRule                    maClipRule;
+
             /// bitfield
-            bool                        maFillRule : 1; // true: NonZero, 
false: EvenOdd
-            bool                        maFillRuleSet : 1;
 
             // defines if this attributes are part of a ClipPath. If yes,
             // rough geometry will be created on decomposition by patching
             // vaules for fill, stroke, strokeWidth and others
             bool                        mbIsClipPathContent : 1;
 
-            // ClipRule setting (only valid wne mbIsClipPathContent == true)
-            bool                        mbClipRule : 1; // true == 
nonzero(default), false == evenodd
-
             /// internal helpers
             void add_fillGradient(
                 const basegfx::B2DPolyPolygon& rPath, 
@@ -256,8 +263,9 @@ namespace svgio
                 const drawinglayer::primitive2d::Primitive2DSequence& rSource, 
                 const basegfx::B2DHomMatrix* pTransform) const;
 
-            /// helper to evtl. link to css style
-            void checkForCssStyle(const rtl::OUString& rClassStr) const;
+            /// helper to set mpCssStyleParent temporarily for CSS style 
hierarchies
+            void setCssStyleParent(const SvgStyleAttributes* pNew) { 
mpCssStyleParent = pNew; }
+            const SvgStyleAttributes* getCssStyleParent() const { return 
mpCssStyleParent; }
 
             /// scan helpers
             void readStyle(const rtl::OUString& rCandidate);
@@ -307,8 +315,8 @@ namespace svgio
             void setFillOpacity(const SvgNumber& rFillOpacity = SvgNumber()) { 
maFillOpacity = rFillOpacity; }
 
             /// fill rule content
-            bool getFillRule() const;
-            void setFillRule(const bool* pFillRule = 0);
+            const FillRule getFillRule() const;
+            void setFillRule(const FillRule aFillRule = FillRule_notset) { 
maFillRule = aFillRule; }
 
             /// fill StrokeDasharray content
             const SvgNumberVector& getStrokeDasharray() const;

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgcirclenode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgcirclenode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgcirclenode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgcirclenode.cxx Wed Jul 
25 09:28:44 2012
@@ -52,9 +52,8 @@ namespace svgio
         const SvgStyleAttributes* SvgCircleNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("circle"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgCircleNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgellipsenode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgellipsenode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgellipsenode.cxx 
(original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgellipsenode.cxx Wed Jul 
25 09:28:44 2012
@@ -53,9 +53,8 @@ namespace svgio
         const SvgStyleAttributes* SvgEllipseNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("ellipse"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgEllipseNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svggnode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svggnode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svggnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svggnode.cxx Wed Jul 25 
09:28:44 2012
@@ -51,9 +51,8 @@ namespace svgio
         const SvgStyleAttributes* SvgGNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("g"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgGNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgimagenode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgimagenode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgimagenode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgimagenode.cxx Wed Jul 25 
09:28:44 2012
@@ -70,9 +70,8 @@ namespace svgio
         const SvgStyleAttributes* SvgImageNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("image"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgImageNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svglinenode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svglinenode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svglinenode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svglinenode.cxx Wed Jul 25 
09:28:44 2012
@@ -53,9 +53,8 @@ namespace svgio
         const SvgStyleAttributes* SvgLineNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("line"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgLineNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgmarkernode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgmarkernode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgmarkernode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgmarkernode.cxx Wed Jul 
25 09:28:44 2012
@@ -56,9 +56,8 @@ namespace svgio
         const SvgStyleAttributes* SvgMarkerNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("marker"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgMarkerNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgnode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgnode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgnode.cxx Wed Jul 25 
09:28:44 2012
@@ -41,6 +41,96 @@ namespace svgio
             return 0;
         }
 
+        const SvgStyleAttributes* SvgNode::checkForCssStyle(const 
rtl::OUString& rClassStr, const SvgStyleAttributes& rOriginal) const
+        {
+            const SvgDocument& rDocument = getDocument();
+
+            if(rDocument.hasSvgStyleAttributesById())
+            {
+                if(getClass())
+                {
+                    // find all referenced CSS styles, a list of entries is 
allowed
+                    const rtl::OUString* pClassList = getClass();
+                    const sal_Int32 nLen(pClassList->getLength());
+                    sal_Int32 nPos(0);
+                    const SvgStyleAttributes* pNew = 0;
+
+                    skip_char(*pClassList, sal_Unicode(' '), nPos, nLen);
+    
+                    while(nPos < nLen)
+                    {
+                        rtl::OUStringBuffer aTokenValue;
+                        
+                        copyToLimiter(*pClassList, sal_Unicode(' '), nPos, 
aTokenValue, nLen);
+                        skip_char(*pClassList, sal_Unicode(' '), nPos, nLen);
+
+                        rtl::OUString aId(rtl::OUString::createFromAscii("."));
+                        const rtl::OUString 
aOUTokenValue(aTokenValue.makeStringAndClear());
+                        
+                        // look for CSS style common to token
+                        aId = aId + aOUTokenValue;
+                        pNew = rDocument.findSvgStyleAttributesById(aId);
+    
+                        if(!pNew && rClassStr.getLength())
+                        {
+                            // look for CSS style common to class.token
+                            aId = rClassStr + aId;
+                    
+                            pNew = rDocument.findSvgStyleAttributesById(aId);
+                        }
+                        
+                        if(pNew)
+                        {
+                            const_cast< SvgNode* 
>(this)->maCssStyleVector.push_back(pNew);
+                        }
+                    }
+                }
+                
+                if(maCssStyleVector.empty() && getId())
+                {
+                    // if none found, search for CSS style equal to Id
+                    const SvgStyleAttributes* pNew = 
rDocument.findSvgStyleAttributesById(*getId());
+
+                    if(pNew)
+                    {
+                        const_cast< SvgNode* 
>(this)->maCssStyleVector.push_back(pNew);
+                    }
+                }
+
+                if(maCssStyleVector.empty() && rClassStr.getLength())
+                {
+                    // if none found, search for CSS style equal to class type
+                    const SvgStyleAttributes* pNew = 
rDocument.findSvgStyleAttributesById(rClassStr);
+                    
+                    if(pNew)
+                    {
+                        const_cast< SvgNode* 
>(this)->maCssStyleVector.push_back(pNew);
+                    }
+                }
+            }
+
+            if(maCssStyleVector.empty())
+            {
+                return &rOriginal;
+            }
+            else
+            {
+                // set CssStyleParent at maCssStyleVector members to hang them 
in front of
+                // the existing style
+                SvgStyleAttributes* pCurrent = const_cast< SvgStyleAttributes* 
>(&rOriginal);
+
+                for(sal_uInt32 a(0); a < maCssStyleVector.size(); a++)
+                {
+                    SvgStyleAttributes* pCandidate = const_cast< 
SvgStyleAttributes* >(maCssStyleVector[maCssStyleVector.size() - a - 1]);
+
+                    pCandidate->setCssStyleParent(pCurrent);
+                    pCurrent = pCandidate;
+                }
+
+                return pCurrent;
+            }
+        }
+
         SvgNode::SvgNode(
             SVGToken aType,
             SvgDocument& rDocument,
@@ -52,7 +142,8 @@ namespace svgio
             maChildren(),
             mpId(0),
             mpClass(0),
-            maXmlSpace(XmlSpace_notset)
+            maXmlSpace(XmlSpace_notset),
+            maCssStyleVector()
         {
             OSL_ENSURE(SVGTokenUnknown != maType, "SvgNode with unknown type 
created (!)");
             

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgpathnode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgpathnode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgpathnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgpathnode.cxx Wed Jul 25 
09:28:44 2012
@@ -51,9 +51,8 @@ namespace svgio
         const SvgStyleAttributes* SvgPathNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("path"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgPathNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgpatternnode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgpatternnode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgpatternnode.cxx 
(original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgpatternnode.cxx Wed Jul 
25 09:28:44 2012
@@ -70,9 +70,8 @@ namespace svgio
         const SvgStyleAttributes* SvgPatternNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("pattern"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgPatternNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgpolynode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgpolynode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgpolynode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgpolynode.cxx Wed Jul 25 
09:28:44 2012
@@ -54,9 +54,8 @@ namespace svgio
         {
             static rtl::OUString 
aClassStrA(rtl::OUString::createFromAscii("polygon"));
             static rtl::OUString 
aClassStrB(rtl::OUString::createFromAscii("polyline"));
-            maSvgStyleAttributes.checkForCssStyle(mbIsPolyline? aClassStrB : 
aClassStrA);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(mbIsPolyline? aClassStrB : aClassStrA, 
maSvgStyleAttributes);
         }
 
         void SvgPolyNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgrectnode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgrectnode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgrectnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgrectnode.cxx Wed Jul 25 
09:28:44 2012
@@ -55,9 +55,8 @@ namespace svgio
         const SvgStyleAttributes* SvgRectNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("rect"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgRectNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx 
(original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx Wed 
Jul 25 09:28:44 2012
@@ -212,56 +212,14 @@ namespace svgio
             }
         }
 
-        void SvgStyleAttributes::checkForCssStyle(const rtl::OUString& 
rClassStr) const
-        {
-            if(!mpCssStyleParent)
-            {
-                const SvgDocument& rDocument = mrOwner.getDocument();
-                const SvgStyleAttributes* pNew = 0;
-
-                if(rDocument.hasSvgStyleAttributesById())
-                {
-                    if(mrOwner.getClass())
-                    {
-                        rtl::OUString aId(rtl::OUString::createFromAscii("."));
-                        aId = aId + *mrOwner.getClass();
-                        pNew = rDocument.findSvgStyleAttributesById(aId);
-
-                        if(!pNew && rClassStr.getLength())
-                        {
-                            aId = rClassStr + aId;
-                    
-                            pNew = rDocument.findSvgStyleAttributesById(aId);
-                        }
-                    }
-
-                    if(!pNew && mrOwner.getId())
-                    {
-                        pNew = 
rDocument.findSvgStyleAttributesById(*mrOwner.getId());
-                    }
-
-                    if(!pNew && rClassStr.getLength())
-                    {
-                        pNew = rDocument.findSvgStyleAttributesById(rClassStr);
-                    }
-                    
-                    if(pNew)
-                    {
-                        // found css style, set as parent
-                        const_cast< SvgStyleAttributes* 
>(this)->mpCssStyleParent = pNew;
-                    }
-                }
-            }
-        }
-
         const SvgStyleAttributes* SvgStyleAttributes::getParentStyle() const 
         { 
-            if(mpCssStyleParent)
+            if(getCssStyleParent())
             {
-                return mpCssStyleParent;
+                return getCssStyleParent();
             }
 
-            if(mrOwner.getParent()) 
+            if(mrOwner.getParent())
             {
                 return mrOwner.getParent()->getSvgStyleAttributes(); 
             }
@@ -1068,8 +1026,8 @@ namespace svgio
             {
                 basegfx::B2DPolyPolygon aPath(rPath);
                 const bool bNeedToCheckClipRule(SVGTokenPath == 
mrOwner.getType() || SVGTokenPolygon == mrOwner.getType());
-                const bool bClipPathIsNonzero(!bIsLine && bNeedToCheckClipRule 
&& mbIsClipPathContent && mbClipRule);
-                const bool bFillRuleIsNonzero(!bIsLine && bNeedToCheckClipRule 
&& !mbIsClipPathContent && getFillRule());
+                const bool bClipPathIsNonzero(!bIsLine && bNeedToCheckClipRule 
&& mbIsClipPathContent && FillRule_nonzero == maClipRule);
+                const bool bFillRuleIsNonzero(!bIsLine && bNeedToCheckClipRule 
&& !mbIsClipPathContent && FillRule_nonzero == getFillRule());
 
                 if(bClipPathIsNonzero || bFillRuleIsNonzero)
                 {
@@ -1203,10 +1161,9 @@ namespace svgio
             mpMarkerMidXLink(0),
             maMarkerEndXLink(),
             mpMarkerEndXLink(0),
-            maFillRule(true),
-            maFillRuleSet(false),
-            mbIsClipPathContent(SVGTokenClipPathNode == mrOwner.getType()),
-            mbClipRule(true)
+            maFillRule(FillRule_notset),
+            maClipRule(FillRule_nonzero),
+            mbIsClipPathContent(SVGTokenClipPathNode == mrOwner.getType())
         {
             if(!mbIsClipPathContent)
             {
@@ -1273,13 +1230,11 @@ namespace svgio
                     {
                         if(aContent.match(commonStrings::aStrNonzero))
                         {
-                            maFillRule = true;
-                            maFillRuleSet = true;
+                            maFillRule = FillRule_nonzero;
                         }
                         else if(aContent.match(commonStrings::aStrEvenOdd))
                         {
-                            maFillRule = false;
-                            maFillRuleSet = true;
+                            maFillRule = FillRule_evenodd;
                         }
                     }
                     break;
@@ -1790,11 +1745,11 @@ namespace svgio
                     {
                         if(aContent.match(commonStrings::aStrNonzero))
                         {
-                            mbClipRule = true;
+                            maClipRule = FillRule_nonzero;
                         }
                         else if(aContent.match(commonStrings::aStrEvenOdd))
                         {
-                            mbClipRule = false;
+                            maClipRule = FillRule_evenodd;
                         }
                     }
                     break;
@@ -2048,9 +2003,9 @@ namespace svgio
             return SvgNumber(1.0); 
         }
 
-        bool SvgStyleAttributes::getFillRule() const
+        const FillRule SvgStyleAttributes::getFillRule() const
         {
-            if(maFillRuleSet)
+            if(FillRule_notset != maFillRule)
             {
                 return maFillRule;
             }
@@ -2063,20 +2018,7 @@ namespace svgio
             }
 
             // default is NonZero
-            return true; 
-        }
-
-        void SvgStyleAttributes::setFillRule(const bool* pFillRule)
-        {
-            if(pFillRule)
-            {
-                maFillRuleSet = true;
-                maFillRule = *pFillRule;
-            }
-            else
-            {
-                maFillRuleSet = false;
-            }
+            return FillRule_nonzero; 
         }
 
         const SvgNumberVector& SvgStyleAttributes::getStrokeDasharray() const

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgtextnode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgtextnode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgtextnode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgtextnode.cxx Wed Jul 25 
09:28:44 2012
@@ -55,9 +55,8 @@ namespace svgio
         const SvgStyleAttributes* SvgTextNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("text"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgTextNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)

Modified: incubator/ooo/trunk/main/svgio/source/svgreader/svgusenode.cxx
URL: 
http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svgio/source/svgreader/svgusenode.cxx?rev=1365501&r1=1365500&r2=1365501&view=diff
==============================================================================
--- incubator/ooo/trunk/main/svgio/source/svgreader/svgusenode.cxx (original)
+++ incubator/ooo/trunk/main/svgio/source/svgreader/svgusenode.cxx Wed Jul 25 
09:28:44 2012
@@ -54,9 +54,8 @@ namespace svgio
         const SvgStyleAttributes* SvgUseNode::getSvgStyleAttributes() const
         {
             static rtl::OUString 
aClassStr(rtl::OUString::createFromAscii("use"));
-            maSvgStyleAttributes.checkForCssStyle(aClassStr);
 
-            return &maSvgStyleAttributes;
+            return checkForCssStyle(aClassStr, maSvgStyleAttributes);
         }
 
         void SvgUseNode::parseAttribute(const rtl::OUString& rTokenName, 
SVGToken aSVGToken, const rtl::OUString& aContent)


Reply via email to