summaryrefslogtreecommitdiff
path: root/oox/source/drawingml
diff options
context:
space:
mode:
authorJacobo Aragunde Pérez <jaragunde@igalia.com>2014-05-09 12:01:46 +0200
committerJacobo Aragunde Pérez <jaragunde@igalia.com>2014-05-09 14:11:38 +0200
commitf6422b3dfcb00e451ef103127aace1856dc752a9 (patch)
tree135bd8dd5be8354897e125b73ba4f626d3794504 /oox/source/drawingml
parent6566c218afec3cd8c4d36094777bc30b1970e9e4 (diff)
ooxml: Preserve shape 3d effects: top and bottom bevel
Shapes 3D effects can specify top and bottom bevels like in the following example: <a:sp3d z="488950" extrusionH="63500" contourW="50800"> <a:bevelT w="139700" h="88900" prst="cross"/> <a:bevelB h="88900" prst="relaxedInset"/> </a:sp3d> This patch preserves the a:bevel* tags and their attributes using the shape grab bag and modifies an existing unit test to add this check. Change-Id: I4762111e4d2f75ba2fd3721a126aa324a28a853c
Diffstat (limited to 'oox/source/drawingml')
-rw-r--r--oox/source/drawingml/scene3dcontext.cxx26
-rw-r--r--oox/source/drawingml/shape3dproperties.cxx61
2 files changed, 86 insertions, 1 deletions
diff --git a/oox/source/drawingml/scene3dcontext.cxx b/oox/source/drawingml/scene3dcontext.cxx
index bbae7abedd10..124a74183f48 100644
--- a/oox/source/drawingml/scene3dcontext.cxx
+++ b/oox/source/drawingml/scene3dcontext.cxx
@@ -80,6 +80,32 @@ Shape3DPropertiesContext::Shape3DPropertiesContext( ContextHandler2Helper& rPare
mr3DProperties.mnShapeZ = rAttribs.getInteger( XML_z, 0 );
}
+ContextHandlerRef Shape3DPropertiesContext::onCreateContext( sal_Int32 aElementToken, const AttributeList& rAttribs )
+{
+ switch( aElementToken )
+ {
+ case A_TOKEN( bevelT ):
+ case A_TOKEN( bevelB ):
+ {
+ BevelProperties aProps;
+ if( rAttribs.hasAttribute( XML_w ) )
+ aProps.mnWidth = rAttribs.getInteger( XML_w, 0 );
+ if( rAttribs.hasAttribute( XML_h ) )
+ aProps.mnHeight = rAttribs.getInteger( XML_h, 0 );
+ if( rAttribs.hasAttribute( XML_prst ) )
+ aProps.mnPreset = rAttribs.getToken( XML_prst, XML_none );
+
+ if( aElementToken == A_TOKEN( bevelT ) )
+ mr3DProperties.maTopBevelProperties.set( aProps );
+ else
+ mr3DProperties.maBottomBevelProperties.set( aProps );
+
+ break;
+ }
+ }
+ return 0;
+}
+
Scene3DRotationPropertiesContext::Scene3DRotationPropertiesContext( ContextHandler2Helper& rParent, RotationProperties& rRotationProperties ) throw()
: ContextHandler2( rParent )
, mrRotationProperties( rRotationProperties )
diff --git a/oox/source/drawingml/shape3dproperties.cxx b/oox/source/drawingml/shape3dproperties.cxx
index 7da8a0b4d9f1..28d907922b31 100644
--- a/oox/source/drawingml/shape3dproperties.cxx
+++ b/oox/source/drawingml/shape3dproperties.cxx
@@ -171,6 +171,27 @@ OUString Shape3DProperties::getLightRigDirName( sal_Int32 nElement )
return OUString();
}
+OUString Shape3DProperties::getBevelPresetTypeString( sal_Int32 nType )
+{
+ switch (nType)
+ {
+ case XML_relaxedInset: return OUString("relaxedInset");
+ case XML_circle: return OUString("circle");
+ case XML_slope: return OUString("slope");
+ case XML_cross: return OUString("cross");
+ case XML_angle: return OUString("angle");
+ case XML_softRound: return OUString("softRound");
+ case XML_convex: return OUString("convex");
+ case XML_coolSlant: return OUString("coolSlant");
+ case XML_divot: return OUString("divot");
+ case XML_riblet: return OUString("riblet");
+ case XML_hardEdge: return OUString("hardEdge");
+ case XML_artDeco: return OUString("artDeco");
+ }
+ SAL_WARN( "oox.drawingml", "Shape3DProperties::getBevelPresetTypeString - unexpected token" );
+ return OUString();
+}
+
css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getCameraAttributes()
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(6);
@@ -253,10 +274,36 @@ css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getLightRigAt
return aSeq;
}
-css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getShape3DAttributes()
+css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getBevelAttributes( BevelProperties rProps )
{
css::uno::Sequence<css::beans::PropertyValue> aSeq(3);
sal_Int32 nSize = 0;
+ if( rProps.mnPreset.has() )
+ {
+ aSeq[nSize].Name = "prst";
+ aSeq[nSize].Value = css::uno::Any( getBevelPresetTypeString( rProps.mnPreset.use() ) );
+ nSize++;
+ }
+ if( rProps.mnWidth.has() )
+ {
+ aSeq[nSize].Name = "w";
+ aSeq[nSize].Value = css::uno::Any( rProps.mnWidth.use() );
+ nSize++;
+ }
+ if( rProps.mnHeight.has() )
+ {
+ aSeq[nSize].Name = "h";
+ aSeq[nSize].Value = css::uno::Any( rProps.mnHeight.use() );
+ nSize++;
+ }
+ aSeq.realloc( nSize );
+ return aSeq;
+}
+
+css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getShape3DAttributes()
+{
+ css::uno::Sequence<css::beans::PropertyValue> aSeq(5);
+ sal_Int32 nSize = 0;
if( mnExtrusionH.has() )
{
aSeq[nSize].Name = "extrusionH";
@@ -275,6 +322,18 @@ css::uno::Sequence< css::beans::PropertyValue > Shape3DProperties::getShape3DAtt
aSeq[nSize].Value = css::uno::Any( mnShapeZ.use() );
nSize++;
}
+ if( maTopBevelProperties.has() )
+ {
+ aSeq[nSize].Name = "bevelT";
+ aSeq[nSize].Value = css::uno::Any( getBevelAttributes( maTopBevelProperties.use() ) );
+ nSize++;
+ }
+ if( maBottomBevelProperties.has() )
+ {
+ aSeq[nSize].Name = "bevelB";
+ aSeq[nSize].Value = css::uno::Any( getBevelAttributes( maBottomBevelProperties.use() ) );
+ nSize++;
+ }
aSeq.realloc( nSize );
return aSeq;
}