diff options
author | Armin Le Grand <alg@apache.org> | 2011-12-19 15:41:21 +0000 |
---|---|---|
committer | Armin Le Grand <alg@apache.org> | 2011-12-19 15:41:21 +0000 |
commit | e2e16715893229b5d0ad2da6c8e84464e0c43a2e (patch) | |
tree | 79d1c632784b3de16fc82c1dfc27c1796a9ef451 /svgio/source/svgreader/svgpolynode.cxx | |
parent | ea4f454ed956e08be47783b3bddd7789f905e350 (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.cxx | 128 |
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 |