summaryrefslogtreecommitdiff
path: root/svgio/source/svgreader/svgpolynode.cxx
diff options
context:
space:
mode:
authorArmin Le Grand <alg@apache.org>2011-12-19 15:41:21 +0000
committerArmin Le Grand <alg@apache.org>2011-12-19 15:41:21 +0000
commite2e16715893229b5d0ad2da6c8e84464e0c43a2e (patch)
tree79d1c632784b3de16fc82c1dfc27c1796a9ef451 /svgio/source/svgreader/svgpolynode.cxx
parentea4f454ed956e08be47783b3bddd7789f905e350 (diff)
Svg: Reintegrated Svg replacement from /branches/alg/svgreplavement to trunk, first version of Svg stable and done
Diffstat (limited to 'svgio/source/svgreader/svgpolynode.cxx')
-rw-r--r--svgio/source/svgreader/svgpolynode.cxx128
1 files changed, 128 insertions, 0 deletions
diff --git a/svgio/source/svgreader/svgpolynode.cxx b/svgio/source/svgreader/svgpolynode.cxx
new file mode 100644
index 000000000000..2b3c991a8593
--- /dev/null
+++ b/svgio/source/svgreader/svgpolynode.cxx
@@ -0,0 +1,128 @@
+/**************************************************************
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ *************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_svgio.hxx"
+
+#include <svgio/svgreader/svgpolynode.hxx>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+namespace svgio
+{
+ namespace svgreader
+ {
+ SvgPolyNode::SvgPolyNode(
+ SvgDocument& rDocument,
+ SvgNode* pParent,
+ bool bIsPolyline)
+ : SvgNode(SVGTokenPolygon, rDocument, pParent),
+ maSvgStyleAttributes(*this),
+ mpPolygon(0),
+ mpaTransform(0),
+ mbIsPolyline(bIsPolyline)
+ {
+ }
+
+ SvgPolyNode::~SvgPolyNode()
+ {
+ if(mpaTransform) delete mpaTransform;
+ if(mpPolygon) delete mpPolygon;
+ }
+
+ const SvgStyleAttributes* SvgPolyNode::getSvgStyleAttributes() const
+ {
+ static rtl::OUString aClassStr(rtl::OUString::createFromAscii("poly"));
+ maSvgStyleAttributes.checkForCssStyle(aClassStr);
+
+ return &maSvgStyleAttributes;
+ }
+
+ void SvgPolyNode::parseAttribute(const rtl::OUString& rTokenName, SVGToken aSVGToken, const rtl::OUString& aContent)
+ {
+ // call parent
+ SvgNode::parseAttribute(rTokenName, aSVGToken, aContent);
+
+ // read style attributes
+ maSvgStyleAttributes.parseStyleAttribute(rTokenName, aSVGToken, aContent);
+
+ // parse own
+ switch(aSVGToken)
+ {
+ case SVGTokenStyle:
+ {
+ maSvgStyleAttributes.readStyle(aContent);
+ break;
+ }
+ case SVGTokenPoints:
+ {
+ basegfx::B2DPolygon aPath;
+
+ if(basegfx::tools::importFromSvgPoints(aPath, aContent))
+ {
+ if(aPath.count())
+ {
+ if(!isPolyline())
+ {
+ aPath.setClosed(true);
+ }
+
+ setPolygon(&aPath);
+ }
+ }
+ break;
+ }
+ case SVGTokenTransform:
+ {
+ const basegfx::B2DHomMatrix aMatrix(readTransform(aContent, *this));
+
+ if(!aMatrix.isIdentity())
+ {
+ setTransform(&aMatrix);
+ }
+ break;
+ }
+ }
+ }
+
+ void SvgPolyNode::decomposeSvgNode(drawinglayer::primitive2d::Primitive2DSequence& rTarget, bool bReferenced) const
+ {
+ const SvgStyleAttributes* pStyle = getSvgStyleAttributes();
+
+ if(pStyle && getPolygon())
+ {
+ drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
+
+ pStyle->add_path(basegfx::B2DPolyPolygon(*getPolygon()), aNewTarget);
+
+ if(aNewTarget.hasElements())
+ {
+ pStyle->add_postProcess(rTarget, aNewTarget, getTransform());
+ }
+ }
+ }
+ } // end of namespace svgreader
+} // end of namespace svgio
+
+//////////////////////////////////////////////////////////////////////////////
+// eof