diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-08-16 20:40:50 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-08-16 20:49:20 +0200 |
commit | 4bc6484c594cd11d2f04e9918aada20d49934bee (patch) | |
tree | ccb12c51e87bab173e0a78c4d8bd1929057aadf6 /test | |
parent | d3a59629f79da913b4a3ee367cdf70d0f5167416 (diff) |
initial implementation of XML dump for Primitive2DSequence
Change-Id: I6618b18164a26553f81a1c737e009b7187b028c3
Diffstat (limited to 'test')
-rw-r--r-- | test/Library_test.mk | 3 | ||||
-rw-r--r-- | test/source/primitive2dxmldump.cxx | 183 |
2 files changed, 186 insertions, 0 deletions
diff --git a/test/Library_test.mk b/test/Library_test.mk index 585c7ebc8acc..2c8d854417a2 100644 --- a/test/Library_test.mk +++ b/test/Library_test.mk @@ -22,6 +22,7 @@ $(eval $(call gb_Library_use_externals,test,\ )) $(eval $(call gb_Library_use_libraries,test,\ + basegfx \ comphelper \ cppu \ cppuhelper \ @@ -32,6 +33,7 @@ $(eval $(call gb_Library_use_libraries,test,\ utl \ unotest \ vcl \ + drawinglayer \ $(gb_UWINAPI) \ )) @@ -42,6 +44,7 @@ $(eval $(call gb_Library_add_exception_objects,test,\ test/source/htmltesttools \ test/source/mtfxmldump \ test/source/xmlwriter \ + test/source/primitive2dxmldump \ )) # vim: set noet sw=4 ts=4: diff --git a/test/source/primitive2dxmldump.cxx b/test/source/primitive2dxmldump.cxx new file mode 100644 index 000000000000..ea125620b638 --- /dev/null +++ b/test/source/primitive2dxmldump.cxx @@ -0,0 +1,183 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <test/primitive2dxmldump.hxx> +#include <test/xmltesttools.hxx> + +#include <vcl/metaact.hxx> +#include <rtl/string.hxx> +#include <rtl/strbuf.hxx> + +#include <boost/scoped_ptr.hpp> + +#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx> +#include <drawinglayer/primitive2d/transformprimitive2d.hxx> +#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> +#include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx> +#include <drawinglayer/primitive2d/polygonprimitive2d.hxx> + +#include <drawinglayer/attribute/lineattribute.hxx> + +#include <basegfx/polygon/b2dpolypolygontools.hxx> +#include <basegfx/polygon/b2dpolygontools.hxx> + +using namespace drawinglayer::primitive2d; + +namespace +{ + +const size_t constMaxActionType = 513; + +OUString convertColorToString(basegfx::BColor aColor) +{ + OUString aRGBString = Color(aColor).AsRGBHexString(); + return "#" + aRGBString; +} + +} // anonymous namespace + +Primitive2dXmlDump::Primitive2dXmlDump() : + maFilter(constMaxActionType, false) +{} + +Primitive2dXmlDump::~Primitive2dXmlDump() +{} + +void Primitive2dXmlDump::filterActionType(const sal_uInt16 nActionType, bool bShouldFilter) +{ + maFilter[nActionType] = bShouldFilter; +} + +void Primitive2dXmlDump::filterAllActionTypes() +{ + maFilter.assign(constMaxActionType, true); +} + +xmlDocPtr Primitive2dXmlDump::dumpAndParse(Primitive2DSequence aPrimitive2DSequence, const OUString& rTempStreamName) +{ + boost::scoped_ptr<SvStream> pStream; + + if (rTempStreamName.isEmpty()) + pStream.reset(new SvMemoryStream()); + else + pStream.reset(new SvFileStream(rTempStreamName, STREAM_STD_READWRITE | STREAM_TRUNC)); + + XmlWriter aWriter(pStream.get()); + aWriter.startDocument(); + aWriter.startElement("primitive2D"); + + decomposeAndWrite(aPrimitive2DSequence, aWriter); + + aWriter.endElement(); + aWriter.endDocument(); + + pStream->Seek(STREAM_SEEK_TO_BEGIN); + + xmlDocPtr pDoc = XmlTestTools::parseXmlStream(pStream.get()); + + return pDoc; +} + +void Primitive2dXmlDump::decomposeAndWrite(const Primitive2DSequence& rPrimitive2DSequence, XmlWriter& rWriter) +{ + for (int i = 0; i < rPrimitive2DSequence.getLength(); i++) + { + Primitive2DReference xPrimitive2DReference = rPrimitive2DSequence[i]; + const BasePrimitive2D* pBasePrimitive = dynamic_cast<const BasePrimitive2D* >(xPrimitive2DReference.get()); + + sal_uInt32 nId = pBasePrimitive->getPrimitive2DID(); + if (maFilter[nId]) + continue; + + OUString sCurrentElementTag = drawinglayer::primitive2d::idToString(nId); + + switch (nId) + { + case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D: + { + const HiddenGeometryPrimitive2D* pHiddenGeometryPrimitive2D = dynamic_cast<const HiddenGeometryPrimitive2D*>(pBasePrimitive); + rWriter.startElement("hiddengeometry"); + decomposeAndWrite(pHiddenGeometryPrimitive2D->getChildren(), rWriter); + rWriter.endElement(); + } + break; + + case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D: + { + const TransformPrimitive2D* pTransformPrimitive2D = dynamic_cast<const TransformPrimitive2D*>(pBasePrimitive); + rWriter.startElement("transform"); + //pTransformPrimitive2D->getTransformation() + decomposeAndWrite(pTransformPrimitive2D->getChildren(), rWriter); + rWriter.endElement(); + } + break; + + case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D: + { + const PolyPolygonColorPrimitive2D* pPolyPolygonColorPrimitive2D = dynamic_cast<const PolyPolygonColorPrimitive2D*>(pBasePrimitive); + + rWriter.startElement("polypolygoncolor"); + rWriter.attribute("color", convertColorToString(pPolyPolygonColorPrimitive2D->getBColor())); + rWriter.startElement("polypolygon"); + rWriter.content(basegfx::tools::exportToSvgD(pPolyPolygonColorPrimitive2D->getB2DPolyPolygon(), true, true, false)); + rWriter.endElement(); + rWriter.endElement(); + } + break; + + case PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D: + { + const PolyPolygonStrokePrimitive2D* pPolyPolygonStrokePrimitive2D = dynamic_cast<const PolyPolygonStrokePrimitive2D*>(pBasePrimitive); + rWriter.startElement("polypolygonstroke"); + + rWriter.startElement("line"); + drawinglayer::attribute::LineAttribute aLineAttribute = pPolyPolygonStrokePrimitive2D->getLineAttribute(); + rWriter.attribute("color", convertColorToString(aLineAttribute.getColor())); + rWriter.attribute("width", aLineAttribute.getWidth()); + //rWriter.attribute("linejoin", aLineAttribute.getLineJoin()); + //rWriter.attribute("linecap", aLineAttribute.getLineCap()); + rWriter.endElement(); + + //getStrokeAttribute() + + rWriter.startElement("polypolygon"); + rWriter.content(basegfx::tools::exportToSvgD(pPolyPolygonStrokePrimitive2D->getB2DPolyPolygon(), true, true, false)); + rWriter.endElement(); + + rWriter.endElement(); + } + break; + + case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D: + { + const PolygonHairlinePrimitive2D* pPolygonHairlinePrimitive2D = dynamic_cast<const PolygonHairlinePrimitive2D*>(pBasePrimitive); + rWriter.startElement("polygonhairline"); + + rWriter.attribute("color", convertColorToString(pPolygonHairlinePrimitive2D->getBColor())); + + rWriter.startElement("polygon"); + rWriter.content(basegfx::tools::exportToSvgPoints(pPolygonHairlinePrimitive2D->getB2DPolygon())); + rWriter.endElement(); + + + rWriter.endElement(); + } + break; + + default: + { + rWriter.element(OUStringToOString(sCurrentElementTag, RTL_TEXTENCODING_UTF8)); + } + break; + } + + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |