lok: in preinit stage, do not force locale
[LibreOffice.git] / test / source / primitive2dxmldump.cxx
blob6523c4c0c97112519acf36880e991a36dbe47283
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
10 #include <test/primitive2dxmldump.hxx>
11 #include <test/xmltesttools.hxx>
13 #include <vcl/metaact.hxx>
14 #include <rtl/string.hxx>
15 #include <rtl/strbuf.hxx>
17 #include <memory>
19 #include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
20 #include <drawinglayer/primitive2d/transformprimitive2d.hxx>
21 #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx>
22 #include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx>
23 #include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
24 #include <drawinglayer/primitive2d/textprimitive2d.hxx>
25 #include <drawinglayer/primitive2d/maskprimitive2d.hxx>
26 #include <drawinglayer/primitive2d/unifiedtransparenceprimitive2d.hxx>
27 #include <drawinglayer/primitive2d/objectinfoprimitive2d.hxx>
28 #include <drawinglayer/primitive2d/svggradientprimitive2d.hxx>
30 #include <drawinglayer/attribute/lineattribute.hxx>
31 #include <drawinglayer/attribute/fontattribute.hxx>
33 #include <basegfx/polygon/b2dpolypolygontools.hxx>
34 #include <basegfx/polygon/b2dpolygontools.hxx>
36 using namespace drawinglayer::primitive2d;
38 namespace
41 const size_t constMaxActionType = 513;
43 OUString convertColorToString(const basegfx::BColor& rColor)
45 OUString aRGBString = Color(rColor).AsRGBHexString();
46 return "#" + aRGBString;
49 } // anonymous namespace
51 Primitive2dXmlDump::Primitive2dXmlDump() :
52 maFilter(constMaxActionType, false)
55 Primitive2dXmlDump::~Primitive2dXmlDump()
59 xmlDocPtr Primitive2dXmlDump::dumpAndParse(
60 const drawinglayer::primitive2d::Primitive2DContainer& rPrimitive2DSequence,
61 const OUString& rTempStreamName)
63 std::unique_ptr<SvStream> pStream;
65 if (rTempStreamName.isEmpty())
66 pStream.reset(new SvMemoryStream());
67 else
68 pStream.reset(new SvFileStream(rTempStreamName, StreamMode::STD_READWRITE | StreamMode::TRUNC));
70 XmlWriter aWriter(pStream.get());
71 aWriter.startDocument();
72 aWriter.startElement("primitive2D");
74 decomposeAndWrite(rPrimitive2DSequence, aWriter);
76 aWriter.endElement();
77 aWriter.endDocument();
79 pStream->Seek(STREAM_SEEK_TO_BEGIN);
81 xmlDocPtr pDoc = XmlTestTools::parseXmlStream(pStream.get());
83 return pDoc;
86 void Primitive2dXmlDump::decomposeAndWrite(
87 const drawinglayer::primitive2d::Primitive2DContainer& rPrimitive2DSequence,
88 XmlWriter& rWriter)
90 for (size_t i = 0; i < rPrimitive2DSequence.size(); i++)
92 drawinglayer::primitive2d::Primitive2DReference xPrimitive2DReference = rPrimitive2DSequence[i];
93 const BasePrimitive2D* pBasePrimitive = dynamic_cast<const BasePrimitive2D* >(xPrimitive2DReference.get());
94 if (!pBasePrimitive)
95 continue;
96 sal_uInt32 nId = pBasePrimitive->getPrimitive2DID();
97 if (maFilter[nId])
98 continue;
100 OUString sCurrentElementTag = drawinglayer::primitive2d::idToString(nId);
102 switch (nId)
104 case PRIMITIVE2D_ID_HIDDENGEOMETRYPRIMITIVE2D:
106 const HiddenGeometryPrimitive2D& rHiddenGeometryPrimitive2D = dynamic_cast<const HiddenGeometryPrimitive2D&>(*pBasePrimitive);
107 rWriter.startElement("hiddengeometry");
108 decomposeAndWrite(rHiddenGeometryPrimitive2D.getChildren(), rWriter);
109 rWriter.endElement();
111 break;
113 case PRIMITIVE2D_ID_TRANSFORMPRIMITIVE2D:
115 const TransformPrimitive2D& rTransformPrimitive2D = dynamic_cast<const TransformPrimitive2D&>(*pBasePrimitive);
116 rWriter.startElement("transform");
117 decomposeAndWrite(rTransformPrimitive2D.getChildren(), rWriter);
118 rWriter.endElement();
120 break;
122 case PRIMITIVE2D_ID_POLYPOLYGONCOLORPRIMITIVE2D:
124 const PolyPolygonColorPrimitive2D& rPolyPolygonColorPrimitive2D = dynamic_cast<const PolyPolygonColorPrimitive2D&>(*pBasePrimitive);
126 rWriter.startElement("polypolygoncolor");
127 rWriter.attribute("color", convertColorToString(rPolyPolygonColorPrimitive2D.getBColor()));
128 const basegfx::B2DPolyPolygon aB2DPolyPolygon(rPolyPolygonColorPrimitive2D.getB2DPolyPolygon());
129 const basegfx::B2DRange aB2DRange(aB2DPolyPolygon.getB2DRange());
130 rWriter.attribute("height", aB2DRange.getHeight());
131 rWriter.attribute("width", aB2DRange.getWidth());
132 rWriter.attribute("minx", aB2DRange.getMinX());
133 rWriter.attribute("miny", aB2DRange.getMinY());
134 rWriter.attribute("maxx", aB2DRange.getMaxX());
135 rWriter.attribute("maxy", aB2DRange.getMaxY());
136 rWriter.startElement("polypolygon");
137 rWriter.content(basegfx::tools::exportToSvgD(rPolyPolygonColorPrimitive2D.getB2DPolyPolygon(), true, true, false));
138 rWriter.endElement();
139 rWriter.endElement();
141 break;
143 case PRIMITIVE2D_ID_POLYPOLYGONSTROKEPRIMITIVE2D:
145 const PolyPolygonStrokePrimitive2D& rPolyPolygonStrokePrimitive2D = dynamic_cast<const PolyPolygonStrokePrimitive2D&>(*pBasePrimitive);
146 rWriter.startElement("polypolygonstroke");
148 rWriter.startElement("line");
149 drawinglayer::attribute::LineAttribute aLineAttribute = rPolyPolygonStrokePrimitive2D.getLineAttribute();
150 rWriter.attribute("color", convertColorToString(aLineAttribute.getColor()));
151 rWriter.attribute("width", aLineAttribute.getWidth());
152 //rWriter.attribute("linejoin", aLineAttribute.getLineJoin());
153 //rWriter.attribute("linecap", aLineAttribute.getLineCap());
154 rWriter.endElement();
156 //getStrokeAttribute()
158 rWriter.startElement("polypolygon");
159 rWriter.content(basegfx::tools::exportToSvgD(rPolyPolygonStrokePrimitive2D.getB2DPolyPolygon(), true, true, false));
160 rWriter.endElement();
162 rWriter.endElement();
164 break;
166 case PRIMITIVE2D_ID_POLYGONHAIRLINEPRIMITIVE2D:
168 const PolygonHairlinePrimitive2D& rPolygonHairlinePrimitive2D = dynamic_cast<const PolygonHairlinePrimitive2D&>(*pBasePrimitive);
169 rWriter.startElement("polygonhairline");
171 rWriter.attribute("color", convertColorToString(rPolygonHairlinePrimitive2D.getBColor()));
173 rWriter.startElement("polygon");
174 rWriter.content(basegfx::tools::exportToSvgPoints(rPolygonHairlinePrimitive2D.getB2DPolygon()));
175 rWriter.endElement();
178 rWriter.endElement();
180 break;
182 case PRIMITIVE2D_ID_TEXTSIMPLEPORTIONPRIMITIVE2D:
184 const TextSimplePortionPrimitive2D& rTextSimplePortionPrimitive2D = dynamic_cast<const TextSimplePortionPrimitive2D&>(*pBasePrimitive);
185 rWriter.startElement("textsimpleportion");
187 basegfx::B2DVector aScale, aTranslate;
188 double fRotate, fShearX;
189 if(rTextSimplePortionPrimitive2D.getTextTransform().decompose(aScale, aTranslate, fRotate, fShearX))
191 rWriter.attribute("height", aScale.getY());
193 rWriter.attribute("text", rTextSimplePortionPrimitive2D.getText());
194 rWriter.attribute("fontcolor", convertColorToString(rTextSimplePortionPrimitive2D.getFontColor()));
196 drawinglayer::attribute::FontAttribute aFontAttribute = rTextSimplePortionPrimitive2D.getFontAttribute();
197 rWriter.attribute("familyname", aFontAttribute.getFamilyName());
198 rWriter.endElement();
200 break;
202 case PRIMITIVE2D_ID_MASKPRIMITIVE2D:
204 const MaskPrimitive2D& rMaskPrimitive2D = dynamic_cast<const MaskPrimitive2D&>(*pBasePrimitive);
205 rWriter.startElement("mask");
207 decomposeAndWrite(rMaskPrimitive2D.getChildren(), rWriter);
208 rWriter.endElement();
210 break;
212 case PRIMITIVE2D_ID_UNIFIEDTRANSPARENCEPRIMITIVE2D:
214 const UnifiedTransparencePrimitive2D& rUnifiedTransparencePrimitive2D = dynamic_cast<const UnifiedTransparencePrimitive2D&>(*pBasePrimitive);
215 rWriter.startElement("unifiedtransparence");
217 rWriter.attribute("transparence", rUnifiedTransparencePrimitive2D.getTransparence());
219 rWriter.endElement();
221 break;
223 case PRIMITIVE2D_ID_OBJECTINFOPRIMITIVE2D:
225 const ObjectInfoPrimitive2D& rObjectInfoPrimitive2D = dynamic_cast<const ObjectInfoPrimitive2D&>(*pBasePrimitive);
226 rWriter.startElement("objectinfo");
228 decomposeAndWrite(rObjectInfoPrimitive2D.getChildren(), rWriter);
229 rWriter.endElement();
231 break;
233 case PRIMITIVE2D_ID_SVGRADIALGRADIENTPRIMITIVE2D:
235 const SvgRadialGradientPrimitive2D& rSvgRadialGradientPrimitive2D = dynamic_cast<const SvgRadialGradientPrimitive2D&>(*pBasePrimitive);
236 rWriter.startElement("svgradialgradient");
237 basegfx::B2DPoint aFocusAttribute = rSvgRadialGradientPrimitive2D.getFocal();
239 rWriter.attribute("radius", rSvgRadialGradientPrimitive2D.getRadius());
240 rWriter.attribute("x", aFocusAttribute.getX());
241 rWriter.attribute("y", aFocusAttribute.getY());
243 rWriter.endElement();
245 break;
247 default:
249 rWriter.element(OUStringToOString(sCurrentElementTag, RTL_TEXTENCODING_UTF8));
251 break;
257 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */