fix baseline build (old cairo) - 'cairo_rectangle_int_t' does not name a type
[LibreOffice.git] / oox / source / drawingml / shape3dproperties.cxx
blob38b26c761e3e15def0296bdde33bb56ed22cf6f9
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/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include "drawingml/shape3dproperties.hxx"
21 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
22 #include <com/sun/star/frame/XFramesSupplier.hpp>
23 #include <com/sun/star/beans/XPropertySet.hpp>
24 #include <com/sun/star/awt/Gradient.hpp>
25 #include <com/sun/star/awt/Size.hpp>
26 #include <com/sun/star/awt/XBitmap.hpp>
27 #include <com/sun/star/awt/XDevice.hpp>
28 #include <com/sun/star/drawing/BitmapMode.hpp>
29 #include <com/sun/star/drawing/FillStyle.hpp>
30 #include <com/sun/star/drawing/RectanglePoint.hpp>
31 #include <com/sun/star/graphic/XGraphicTransformer.hpp>
32 #include "oox/helper/propertymap.hxx"
33 #include "oox/helper/propertyset.hxx"
34 #include "oox/token/tokens.hxx"
36 using namespace ::com::sun::star;
37 using namespace ::com::sun::star::drawing;
38 using namespace ::com::sun::star::graphic;
40 using ::com::sun::star::uno::Reference;
41 using ::com::sun::star::uno::Exception;
42 using ::com::sun::star::uno::UNO_QUERY;
43 using ::com::sun::star::uno::UNO_QUERY_THROW;
44 using ::oox::core::XmlFilterBase;
46 namespace oox {
47 namespace drawingml {
49 OUString Shape3DProperties::getCameraPrstName( sal_Int32 nElement )
51 switch( nElement )
53 case XML_legacyObliqueTopLeft: return OUString( "legacyObliqueTopLeft" );
54 case XML_legacyObliqueTop: return OUString( "legacyObliqueTop" );
55 case XML_legacyObliqueTopRight: return OUString( "legacyObliqueTopRight" );
56 case XML_legacyObliqueLeft: return OUString( "legacyObliqueLeft" );
57 case XML_legacyObliqueFront: return OUString( "legacyObliqueFront" );
58 case XML_legacyObliqueRight: return OUString( "legacyObliqueRight" );
59 case XML_legacyObliqueBottomLeft: return OUString( "legacyObliqueBottomLeft" );
60 case XML_legacyObliqueBottom: return OUString( "legacyObliqueBottom" );
61 case XML_legacyObliqueBottomRight: return OUString( "legacyObliqueBottomRight" );
62 case XML_legacyPerspectiveTopLeft: return OUString( "legacyPerspectiveTopLeft" );
63 case XML_legacyPerspectiveTop: return OUString( "legacyPerspectiveTop" );
64 case XML_legacyPerspectiveTopRight: return OUString( "legacyPerspectiveTopRight" );
65 case XML_legacyPerspectiveLeft: return OUString( "legacyPerspectiveLeft" );
66 case XML_legacyPerspectiveFront: return OUString( "legacyPerspectiveFront" );
67 case XML_legacyPerspectiveRight: return OUString( "legacyPerspectiveRight" );
68 case XML_legacyPerspectiveBottomLeft: return OUString( "legacyPerspectiveBottomLeft" );
69 case XML_legacyPerspectiveBottom: return OUString( "legacyPerspectiveBottom" );
70 case XML_legacyPerspectiveBottomRight: return OUString( "legacyPerspectiveBottomRight" );
71 case XML_orthographicFront: return OUString( "orthographicFront" );
72 case XML_isometricTopUp: return OUString( "isometricTopUp" );
73 case XML_isometricTopDown: return OUString( "isometricTopDown" );
74 case XML_isometricBottomUp: return OUString( "isometricBottomUp" );
75 case XML_isometricBottomDown: return OUString( "isometricBottomDown" );
76 case XML_isometricLeftUp: return OUString( "isometricLeftUp" );
77 case XML_isometricLeftDown: return OUString( "isometricLeftDown" );
78 case XML_isometricRightUp: return OUString( "isometricRightUp" );
79 case XML_isometricRightDown: return OUString( "isometricRightDown" );
80 case XML_isometricOffAxis1Left: return OUString( "isometricOffAxis1Left" );
81 case XML_isometricOffAxis1Right: return OUString( "isometricOffAxis1Right" );
82 case XML_isometricOffAxis1Top: return OUString( "isometricOffAxis1Top" );
83 case XML_isometricOffAxis2Left: return OUString( "isometricOffAxis2Left" );
84 case XML_isometricOffAxis2Right: return OUString( "isometricOffAxis2Right" );
85 case XML_isometricOffAxis2Top: return OUString( "isometricOffAxis2Top" );
86 case XML_isometricOffAxis3Left: return OUString( "isometricOffAxis3Left" );
87 case XML_isometricOffAxis3Right: return OUString( "isometricOffAxis3Right" );
88 case XML_isometricOffAxis3Bottom: return OUString( "isometricOffAxis3Bottom" );
89 case XML_isometricOffAxis4Left: return OUString( "isometricOffAxis4Left" );
90 case XML_isometricOffAxis4Right: return OUString( "isometricOffAxis4Right" );
91 case XML_isometricOffAxis4Bottom: return OUString( "isometricOffAxis4Bottom" );
92 case XML_obliqueTopLeft: return OUString( "obliqueTopLeft" );
93 case XML_obliqueTop: return OUString( "obliqueTop" );
94 case XML_obliqueTopRight: return OUString( "obliqueTopRight" );
95 case XML_obliqueLeft: return OUString( "obliqueLeft" );
96 case XML_obliqueRight: return OUString( "obliqueRight" );
97 case XML_obliqueBottomLeft: return OUString( "obliqueBottomLeft" );
98 case XML_obliqueBottom: return OUString( "obliqueBottom" );
99 case XML_obliqueBottomRight: return OUString( "obliqueBottomRight" );
100 case XML_perspectiveFront: return OUString( "perspectiveFront" );
101 case XML_perspectiveLeft: return OUString( "perspectiveLeft" );
102 case XML_perspectiveRight: return OUString( "perspectiveRight" );
103 case XML_perspectiveAbove: return OUString( "perspectiveAbove" );
104 case XML_perspectiveBelow: return OUString( "perspectiveBelow" );
105 case XML_perspectiveAboveLeftFacing: return OUString( "perspectiveAboveLeftFacing" );
106 case XML_perspectiveAboveRightFacing: return OUString( "perspectiveAboveRightFacing" );
107 case XML_perspectiveContrastingLeftFacing: return OUString( "perspectiveContrastingLeftFacing" );
108 case XML_perspectiveContrastingRightFacing: return OUString( "perspectiveContrastingRightFacing" );
109 case XML_perspectiveHeroicLeftFacing: return OUString( "perspectiveHeroicLeftFacing" );
110 case XML_perspectiveHeroicRightFacing: return OUString( "perspectiveHeroicRightFacing" );
111 case XML_perspectiveHeroicExtremeLeftFacing: return OUString( "perspectiveHeroicExtremeLeftFacing" );
112 case XML_perspectiveHeroicExtremeRightFacing: return OUString( "perspectiveHeroicExtremeRightFacing" );
113 case XML_perspectiveRelaxed: return OUString( "perspectiveRelaxed" );
114 case XML_perspectiveRelaxedModerately: return OUString( "perspectiveRelaxedModerately" );
116 SAL_WARN( "oox.drawingml", "Shape3DProperties::getCameraPrstName - unexpected prst type" );
117 return OUString();
120 OUString Shape3DProperties::getLightRigName( sal_Int32 nElement )
122 switch( nElement )
124 case XML_legacyFlat1: return OUString( "legacyFlat1" );
125 case XML_legacyFlat2: return OUString( "legacyFlat2" );
126 case XML_legacyFlat3: return OUString( "legacyFlat3" );
127 case XML_legacyFlat4: return OUString( "legacyFlat4" );
128 case XML_legacyNormal1: return OUString( "legacyNormal1" );
129 case XML_legacyNormal2: return OUString( "legacyNormal2" );
130 case XML_legacyNormal3: return OUString( "legacyNormal3" );
131 case XML_legacyNormal4: return OUString( "legacyNormal4" );
132 case XML_legacyHarsh1: return OUString( "legacyHarsh1" );
133 case XML_legacyHarsh2: return OUString( "legacyHarsh2" );
134 case XML_legacyHarsh3: return OUString( "legacyHarsh3" );
135 case XML_legacyHarsh4: return OUString( "legacyHarsh4" );
136 case XML_threePt: return OUString( "threePt" );
137 case XML_balanced: return OUString( "balanced" );
138 case XML_soft: return OUString( "soft" );
139 case XML_harsh: return OUString( "harsh" );
140 case XML_flood: return OUString( "flood" );
141 case XML_contrasting: return OUString( "contrasting" );
142 case XML_morning: return OUString( "morning" );
143 case XML_sunrise: return OUString( "sunrise" );
144 case XML_sunset: return OUString( "sunset" );
145 case XML_chilly: return OUString( "chilly" );
146 case XML_freezing: return OUString( "freezing" );
147 case XML_flat: return OUString( "flat" );
148 case XML_twoPt: return OUString( "twoPt" );
149 case XML_glow: return OUString( "glow" );
150 case XML_brightRoom: return OUString( "brightRoom" );
152 SAL_WARN( "oox.drawingml", "Shape3DProperties::getLightRigName - unexpected token" );
153 return OUString();
156 OUString Shape3DProperties::getLightRigDirName( sal_Int32 nElement )
158 switch( nElement )
160 case XML_tl: return OUString( "tl" );
161 case XML_t: return OUString( "t" );
162 case XML_tr: return OUString( "tr" );
163 case XML_l: return OUString( "l" );
164 case XML_r: return OUString( "r" );
165 case XML_bl: return OUString( "bl" );
166 case XML_b: return OUString( "b" );
167 case XML_br: return OUString( "br" );
169 SAL_WARN( "oox.drawingml", "Shape3DProperties::getLightRigDirName - unexpected token" );
170 return OUString();
173 OUString Shape3DProperties::getBevelPresetTypeString( sal_Int32 nType )
175 switch (nType)
177 case XML_relaxedInset: return OUString("relaxedInset");
178 case XML_circle: return OUString("circle");
179 case XML_slope: return OUString("slope");
180 case XML_cross: return OUString("cross");
181 case XML_angle: return OUString("angle");
182 case XML_softRound: return OUString("softRound");
183 case XML_convex: return OUString("convex");
184 case XML_coolSlant: return OUString("coolSlant");
185 case XML_divot: return OUString("divot");
186 case XML_riblet: return OUString("riblet");
187 case XML_hardEdge: return OUString("hardEdge");
188 case XML_artDeco: return OUString("artDeco");
190 SAL_WARN( "oox.drawingml", "Shape3DProperties::getBevelPresetTypeString - unexpected token" );
191 return OUString();
194 OUString Shape3DProperties::getPresetMaterialTypeString( sal_Int32 nType )
196 switch (nType)
198 case XML_legacyMatte: return OUString("legacyMatte");
199 case XML_legacyPlastic: return OUString("legacyPlastic");
200 case XML_legacyMetal: return OUString("legacyMetal");
201 case XML_legacyWireframe: return OUString("legacyWireframe");
202 case XML_matte: return OUString("matte");
203 case XML_plastic: return OUString("plastic");
204 case XML_metal: return OUString("metal");
205 case XML_warmMatte: return OUString("warmMatte");
206 case XML_translucentPowder: return OUString("translucentPowder");
207 case XML_powder: return OUString("powder");
208 case XML_dkEdge: return OUString("dkEdge");
209 case XML_softEdge: return OUString("softEdge");
210 case XML_clear: return OUString("clear");
211 case XML_flat: return OUString("flat");
212 case XML_softmetal: return OUString("softmetal");
213 case XML_none: return OUString("none");
215 SAL_WARN( "oox.drawingml", "Shape3DProperties::getPresetMaterialTypeString - unexpected token" );
216 return OUString();
219 css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getCameraAttributes()
221 css::uno::Sequence<css::beans::PropertyValue> aSeq(6);
222 sal_Int32 nSize = 0;
223 if( mfFieldOfVision.has() )
225 aSeq[nSize].Name = "fov";
226 aSeq[nSize].Value = css::uno::Any( mfFieldOfVision.use() );
227 nSize++;
229 if( mfZoom.has() )
231 aSeq[nSize].Name = "zoom";
232 aSeq[nSize].Value = css::uno::Any( mfZoom.use() );
233 nSize++;
235 if( mnPreset.has() )
237 aSeq[nSize].Name = "prst";
238 aSeq[nSize].Value = css::uno::Any( getCameraPrstName( mnPreset.use() ) );
239 nSize++;
241 if( maCameraRotation.mnLatitude.has() )
243 aSeq[nSize].Name = "rotLat";
244 aSeq[nSize].Value = css::uno::Any( maCameraRotation.mnLatitude.use() );
245 nSize++;
247 if( maCameraRotation.mnLongitude.has() )
249 aSeq[nSize].Name = "rotLon";
250 aSeq[nSize].Value = css::uno::Any( maCameraRotation.mnLongitude.use() );
251 nSize++;
253 if( maCameraRotation.mnRevolution.has() )
255 aSeq[nSize].Name = "rotRev";
256 aSeq[nSize].Value = css::uno::Any( maCameraRotation.mnRevolution.use() );
257 nSize++;
259 aSeq.realloc( nSize );
260 return aSeq;
263 css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getLightRigAttributes()
265 css::uno::Sequence<css::beans::PropertyValue> aSeq(5);
266 sal_Int32 nSize = 0;
267 if( mnLightRigDirection.has() )
269 aSeq[nSize].Name = "dir";
270 aSeq[nSize].Value = css::uno::Any( getLightRigDirName( mnLightRigDirection.use() ) );
271 nSize++;
273 if( mnLightRigType.has() )
275 aSeq[nSize].Name = "rig";
276 aSeq[nSize].Value = css::uno::Any( getLightRigName( mnLightRigType.use() ) );
277 nSize++;
279 if( maLightRigRotation.mnLatitude.has() )
281 aSeq[nSize].Name = "rotLat";
282 aSeq[nSize].Value = css::uno::Any( maLightRigRotation.mnLatitude.use() );
283 nSize++;
285 if( maLightRigRotation.mnLongitude.has() )
287 aSeq[nSize].Name = "rotLon";
288 aSeq[nSize].Value = css::uno::Any( maLightRigRotation.mnLongitude.use() );
289 nSize++;
291 if( maLightRigRotation.mnRevolution.has() )
293 aSeq[nSize].Name = "rotRev";
294 aSeq[nSize].Value = css::uno::Any( maLightRigRotation.mnRevolution.use() );
295 nSize++;
297 aSeq.realloc( nSize );
298 return aSeq;
301 css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getBevelAttributes( BevelProperties rProps )
303 css::uno::Sequence<css::beans::PropertyValue> aSeq(3);
304 sal_Int32 nSize = 0;
305 if( rProps.mnPreset.has() )
307 aSeq[nSize].Name = "prst";
308 aSeq[nSize].Value = css::uno::Any( getBevelPresetTypeString( rProps.mnPreset.use() ) );
309 nSize++;
311 if( rProps.mnWidth.has() )
313 aSeq[nSize].Name = "w";
314 aSeq[nSize].Value = css::uno::Any( rProps.mnWidth.use() );
315 nSize++;
317 if( rProps.mnHeight.has() )
319 aSeq[nSize].Name = "h";
320 aSeq[nSize].Value = css::uno::Any( rProps.mnHeight.use() );
321 nSize++;
323 aSeq.realloc( nSize );
324 return aSeq;
327 css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getColorAttributes(
328 const Color& rColor, const GraphicHelper& rGraphicHelper, sal_Int32 rPhClr )
330 css::uno::Sequence<css::beans::PropertyValue> aSeq(2);
331 OUString sColorScheme = rColor.getSchemeName();
332 if( sColorScheme.isEmpty() )
334 // RGB color and transparency value
335 aSeq[0].Name = "rgbClr";
336 aSeq[0].Value = css::uno::Any( rColor.getColor( rGraphicHelper, rPhClr ) );
337 aSeq[1].Name = "rgbClrTransparency";
338 aSeq[1].Value = css::uno::Any( rColor.getTransparency() );
340 else
342 // scheme color with name and transformations
343 aSeq[0].Name = "schemeClr";
344 aSeq[0].Value = css::uno::Any( sColorScheme );
345 aSeq[1].Name = "schemeClrTransformations";
346 aSeq[1].Value = css::uno::Any( rColor.getTransformations() );
348 return aSeq;
351 css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getShape3DAttributes(
352 const GraphicHelper& rGraphicHelper, sal_Int32 rPhClr )
354 css::uno::Sequence<css::beans::PropertyValue> aSeq(8);
355 sal_Int32 nSize = 0;
356 if( mnExtrusionH.has() )
358 aSeq[nSize].Name = "extrusionH";
359 aSeq[nSize].Value = css::uno::Any( mnExtrusionH.use() );
360 nSize++;
362 if( mnContourW.has() )
364 aSeq[nSize].Name = "contourW";
365 aSeq[nSize].Value = css::uno::Any( mnContourW.use() );
366 nSize++;
368 if( mnShapeZ.has() )
370 aSeq[nSize].Name = "z";
371 aSeq[nSize].Value = css::uno::Any( mnShapeZ.use() );
372 nSize++;
374 if( mnMaterial.has() )
376 aSeq[nSize].Name = "prstMaterial";
377 aSeq[nSize].Value = css::uno::Any( getPresetMaterialTypeString( mnMaterial.use() ) );
378 nSize++;
380 if( maTopBevelProperties.has() )
382 aSeq[nSize].Name = "bevelT";
383 aSeq[nSize].Value = css::uno::Any( getBevelAttributes( maTopBevelProperties.use() ) );
384 nSize++;
386 if( maBottomBevelProperties.has() )
388 aSeq[nSize].Name = "bevelB";
389 aSeq[nSize].Value = css::uno::Any( getBevelAttributes( maBottomBevelProperties.use() ) );
390 nSize++;
392 if( maExtrusionColor.isUsed() )
394 aSeq[nSize].Name = "extrusionClr";
395 aSeq[nSize].Value = css::uno::Any( getColorAttributes( maExtrusionColor, rGraphicHelper, rPhClr ) );
396 nSize++;
398 if( maContourColor.isUsed() )
400 aSeq[nSize].Name = "contourClr";
401 aSeq[nSize].Value = css::uno::Any( getColorAttributes( maContourColor, rGraphicHelper, rPhClr ) );
402 nSize++;
404 aSeq.realloc( nSize );
405 return aSeq;
408 } // namespace drawingml
409 } // namespace oox
411 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */