summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/shape.cxx125
1 files changed, 58 insertions, 67 deletions
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index edf7bf164f70..7d04518b5f25 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -46,6 +46,9 @@
#include <oox/token/properties.hxx>
#include <comphelper/classids.hxx>
+#include <comphelper/propertysequence.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <comphelper/sequence.hxx>
#include <tools/gen.hxx>
#include <tools/globname.hxx>
#include <tools/mapunit.hxx>
@@ -96,10 +99,6 @@ using namespace ::com::sun::star::style;
namespace oox { namespace drawingml {
-#define PUT_PROP( aProperties, nPos, sPropName, aPropValue ) \
- aProperties[nPos].Name = sPropName; \
- aProperties[nPos].Value <<= aPropValue;
-
Shape::Shape( const sal_Char* pServiceName, bool bDefaultHeight )
: mpLinePropertiesPtr( new LineProperties )
, mpShapeRefLinePropPtr( new LineProperties )
@@ -662,14 +661,16 @@ Reference< XShape > const & Shape::createAndInsert(
nLinePhClr = pLineRef->maPhClr.getColor( rGraphicHelper );
// Store style-related properties to InteropGrabBag to be able to export them back
- Sequence< PropertyValue > aProperties( 7 );
- PUT_PROP( aProperties, 0, "SchemeClr", pLineRef->maPhClr.getSchemeName() );
- PUT_PROP( aProperties, 1, "Idx", pLineRef->mnThemedIdx );
- PUT_PROP( aProperties, 2, "Color", nLinePhClr );
- PUT_PROP( aProperties, 3, "LineStyle", aLineProperties.getLineStyle() );
- PUT_PROP( aProperties, 4, "LineJoint", aLineProperties.getLineJoint() );
- PUT_PROP( aProperties, 5, "LineWidth", aLineProperties.getLineWidth() );
- PUT_PROP( aProperties, 6, "Transformations", pLineRef->maPhClr.getTransformations() );
+ uno::Sequence<beans::PropertyValue> aProperties = comphelper::InitPropertySequence(
+ {
+ {"SchemeClr", uno::makeAny(pLineRef->maPhClr.getSchemeName())},
+ {"Idx", uno::makeAny(pLineRef->mnThemedIdx)},
+ {"Color", uno::makeAny(nLinePhClr)},
+ {"LineStyle", uno::makeAny(aLineProperties.getLineStyle())},
+ {"LineJoint", uno::makeAny(aLineProperties.getLineJoint())},
+ {"LineWidth", uno::makeAny(aLineProperties.getLineWidth())},
+ {"Transformations", uno::makeAny(pLineRef->maPhClr.getTransformations())}
+ });
putPropertyToGrabBag( "StyleLnRef", Any( aProperties ) );
}
if( const ShapeStyleRef* pFillRef = getShapeStyleRef( XML_fillRef ) )
@@ -679,11 +680,13 @@ Reference< XShape > const & Shape::createAndInsert(
OUString sColorScheme = pFillRef->maPhClr.getSchemeName();
if( !sColorScheme.isEmpty() )
{
- Sequence< PropertyValue > aProperties(4);
- PUT_PROP( aProperties, 0, "SchemeClr", sColorScheme );
- PUT_PROP( aProperties, 1, "Idx", pFillRef->mnThemedIdx );
- PUT_PROP( aProperties, 2, "Color", nFillPhClr );
- PUT_PROP( aProperties, 3, "Transformations", pFillRef->maPhClr.getTransformations() );
+ uno::Sequence<beans::PropertyValue> aProperties = comphelper::InitPropertySequence(
+ {
+ {"SchemeClr", uno::makeAny(sColorScheme)},
+ {"Idx", uno::makeAny(pFillRef->mnThemedIdx)},
+ {"Color", uno::makeAny(nFillPhClr)},
+ {"Transformations", uno::makeAny(pFillRef->maPhClr.getTransformations())}
+ });
putPropertyToGrabBag( "StyleFillRef", Any( aProperties ) );
}
@@ -694,10 +697,12 @@ Reference< XShape > const & Shape::createAndInsert(
// nEffectPhClr = pEffectRef->maPhClr.getColor( rGraphicHelper );
// Store style-related properties to InteropGrabBag to be able to export them back
- Sequence< PropertyValue > aProperties( 3 );
- PUT_PROP( aProperties, 0, "SchemeClr", pEffectRef->maPhClr.getSchemeName() );
- PUT_PROP( aProperties, 1, "Idx", pEffectRef->mnThemedIdx );
- PUT_PROP( aProperties, 2, "Transformations", pEffectRef->maPhClr.getTransformations() );
+ uno::Sequence<beans::PropertyValue> aProperties = comphelper::InitPropertySequence(
+ {
+ {"SchemeClr", uno::makeAny(pEffectRef->maPhClr.getSchemeName())},
+ {"Idx", uno::makeAny(pEffectRef->mnThemedIdx)},
+ {"Transformations", uno::makeAny(pEffectRef->maPhClr.getTransformations())}
+ });
putPropertyToGrabBag( "StyleEffectRef", Any( aProperties ) );
}
}
@@ -925,113 +930,97 @@ Reference< XShape > const & Shape::createAndInsert(
}
// Store original fill and line colors of the shape and the theme color name to InteropGrabBag
- Sequence< PropertyValue > aProperties( 6 ); //allocate the maximum possible number of slots
- sal_Int32 nSize = 2;
- aProperties[0].Name = "OriginalSolidFillClr";
- aProperties[0].Value = aShapeProps.getProperty(PROP_FillColor);
- aProperties[1].Name = "OriginalLnSolidFillClr";
- aProperties[1].Value = aShapeProps.getProperty(PROP_LineColor);
+ std::vector<beans::PropertyValue> aProperties;
+ aProperties.push_back(comphelper::makePropertyValue("OriginalSolidFillClr", aShapeProps.getProperty(PROP_FillColor)));
+ aProperties.push_back(comphelper::makePropertyValue("OriginalLnSolidFillClr", aShapeProps.getProperty(PROP_LineColor)));
OUString sColorFillScheme = aFillProperties.maFillColor.getSchemeName();
if( !aFillProperties.maFillColor.isPlaceHolder() && !sColorFillScheme.isEmpty() )
{
- PUT_PROP( aProperties, nSize, "SpPrSolidFillSchemeClr", sColorFillScheme );
- nSize++;
- PUT_PROP( aProperties, nSize, "SpPrSolidFillSchemeClrTransformations",
- aFillProperties.maFillColor.getTransformations() );
- nSize++;
+ aProperties.push_back(comphelper::makePropertyValue("SpPrSolidFillSchemeClr", sColorFillScheme));
+ aProperties.push_back(comphelper::makePropertyValue("SpPrSolidFillSchemeClrTransformations", aFillProperties.maFillColor.getTransformations()));
}
OUString sLnColorFillScheme = aLineProperties.maLineFill.maFillColor.getSchemeName();
if( !aLineProperties.maLineFill.maFillColor.isPlaceHolder() && !sLnColorFillScheme.isEmpty() )
{
- PUT_PROP( aProperties, nSize, "SpPrLnSolidFillSchemeClr", sLnColorFillScheme );
- nSize++;
- PUT_PROP( aProperties, nSize, "SpPrLnSolidFillSchemeClrTransformations",
- aLineProperties.maLineFill.maFillColor.getTransformations() );
- nSize++;
+ aProperties.push_back(comphelper::makePropertyValue("SpPrLnSolidFillSchemeClr", sLnColorFillScheme));
+ aProperties.push_back(comphelper::makePropertyValue("SpPrLnSolidFillSchemeClrTransformations", aLineProperties.maLineFill.maFillColor.getTransformations()));
}
- aProperties.realloc( nSize ); //shrink the Sequence if we didn't use all the slots
- putPropertiesToGrabBag( aProperties );
+ putPropertiesToGrabBag(comphelper::containerToSequence(aProperties));
// Store original gradient fill of the shape to InteropGrabBag
// LibreOffice doesn't support all the kinds of gradient so we save its complete definition
if( aShapeProps.hasProperty( PROP_FillGradient ) )
{
- Sequence< PropertyValue > aGradientStops( aFillProperties.maGradientProps.maGradientStops.size() );
+ std::vector<beans::PropertyValue> aGradientStops;
::std::map< double, Color >::iterator aIt = aFillProperties.maGradientProps.maGradientStops.begin();
for( size_t i = 0; i < aFillProperties.maGradientProps.maGradientStops.size(); ++i )
{ // for each stop in the gradient definition:
// save position
- Sequence< PropertyValue > aGradientStop( 3 );
- PUT_PROP( aGradientStop, 0, "Pos", aIt->first );
+ std::vector<beans::PropertyValue> aGradientStop;
+ aGradientStop.push_back(comphelper::makePropertyValue("Pos", aIt->first));
OUString sStopColorScheme = aIt->second.getSchemeName();
if( sStopColorScheme.isEmpty() )
{
// save RGB color
- PUT_PROP( aGradientStop, 1, "RgbClr", aIt->second.getColor( rGraphicHelper, nFillPhClr ) );
+ aGradientStop.push_back(comphelper::makePropertyValue("RgbClr", aIt->second.getColor(rGraphicHelper, nFillPhClr)));
// in the case of a RGB color, transformations are already applied to
// the color with the exception of alpha transformations. We only need
// to keep the transparency value to calculate the alpha value later.
if( aIt->second.hasTransparency() )
- {
- PUT_PROP( aGradientStop, 2, "Transparency", aIt->second.getTransparency() );
- }
+ aGradientStop.push_back(comphelper::makePropertyValue("Transparency", aIt->second.getTransparency()));
}
else
{
// save color with scheme name
- PUT_PROP( aGradientStop, 1, "SchemeClr", sStopColorScheme );
+ aGradientStop.push_back(comphelper::makePropertyValue("SchemeClr", sStopColorScheme));
// save all color transformations
- PUT_PROP( aGradientStop, 2, "Transformations", aIt->second.getTransformations() );
+ aGradientStop.push_back(comphelper::makePropertyValue("Transformations", aIt->second.getTransformations()));
}
- PUT_PROP( aGradientStops, i, OUString::number( i ), aGradientStop );
+ aGradientStops.push_back(comphelper::makePropertyValue(OUString::number(i), comphelper::containerToSequence(aGradientStop)));
++aIt;
}
// If getFillProperties.moFillType is unused that means gradient is defined by a theme
// which is already saved into StyleFillRef property, so no need to save the explicit values too
if( getFillProperties().moFillType.has() )
- putPropertyToGrabBag( "GradFillDefinition", Any( aGradientStops ) );
+ putPropertyToGrabBag( "GradFillDefinition", uno::Any(comphelper::containerToSequence(aGradientStops)));
putPropertyToGrabBag( "OriginalGradFill", aShapeProps.getProperty(PROP_FillGradient) );
}
// store unsupported effect attributes in the grab bag
if (!aEffectProperties.m_Effects.empty())
{
- Sequence<PropertyValue> aEffects(aEffectProperties.m_Effects.size());
+ std::vector<beans::PropertyValue> aEffects;
sal_uInt32 i = 0;
for (auto const& it : aEffectProperties.m_Effects)
{
PropertyValue aEffect = it->getEffect();
if( !aEffect.Name.isEmpty() )
{
- Sequence< PropertyValue > aEffectsGrabBag( 3 );
- aEffectsGrabBag[0].Name = "Attribs";
- aEffectsGrabBag[0].Value = aEffect.Value;
+ std::vector<beans::PropertyValue> aEffectsGrabBag;
+ aEffectsGrabBag.push_back(comphelper::makePropertyValue("Attribs", aEffect.Value));
Color& aColor( it->moColor );
OUString sColorScheme = aColor.getSchemeName();
if( sColorScheme.isEmpty() )
{
// RGB color and transparency value
- PUT_PROP( aEffectsGrabBag, 1, "RgbClr",
- aColor.getColor( rGraphicHelper, nFillPhClr ) );
- PUT_PROP( aEffectsGrabBag, 2, "RgbClrTransparency",
- aColor.getTransparency() );
+ aEffectsGrabBag.push_back(comphelper::makePropertyValue("RgbClr", aColor.getColor(rGraphicHelper, nFillPhClr)));
+ aEffectsGrabBag.push_back(comphelper::makePropertyValue("RgbClrTransparency", aColor.getTransparency()));
}
else
{
// scheme color with name and transformations
- PUT_PROP( aEffectsGrabBag, 1, "SchemeClr", sColorScheme );
- PUT_PROP( aEffectsGrabBag, 2, "SchemeClrTransformations",
- aColor.getTransformations() );
+ aEffectsGrabBag.push_back(comphelper::makePropertyValue("SchemeClr", sColorScheme));
+ aEffectsGrabBag.push_back(comphelper::makePropertyValue("SchemeClrTransformations", aColor.getTransformations()));
}
- PUT_PROP( aEffects, i, aEffect.Name, aEffectsGrabBag );
+ aEffects.push_back(comphelper::makePropertyValue(aEffect.Name, comphelper::containerToSequence(aEffectsGrabBag)));
++i;
}
}
- putPropertyToGrabBag( "EffectProperties", Any( aEffects ) );
+ putPropertyToGrabBag("EffectProperties", uno::Any(comphelper::containerToSequence(aEffects)));
}
// add 3D effects if any
@@ -1040,10 +1029,12 @@ Reference< XShape > const & Shape::createAndInsert(
Sequence< PropertyValue > aShape3DEffects = get3DProperties().getShape3DAttributes( rGraphicHelper, nFillPhClr );
if( aCamera3DEffects.getLength() > 0 || aLightRig3DEffects.getLength() > 0 || aShape3DEffects.getLength() > 0 )
{
- Sequence< PropertyValue > a3DEffectsGrabBag( 3 );
- PUT_PROP( a3DEffectsGrabBag, 0, "Camera", aCamera3DEffects );
- PUT_PROP( a3DEffectsGrabBag, 1, "LightRig", aLightRig3DEffects );
- PUT_PROP( a3DEffectsGrabBag, 2, "Shape3D", aShape3DEffects );
+ uno::Sequence<beans::PropertyValue> a3DEffectsGrabBag = comphelper::InitPropertySequence(
+ {
+ {"Camera", uno::makeAny(aCamera3DEffects)},
+ {"LightRig", uno::makeAny(aLightRig3DEffects)},
+ {"Shape3D", uno::makeAny(aShape3DEffects)}
+ });
putPropertyToGrabBag( "3DEffectProperties", Any( a3DEffectsGrabBag ) );
}