diff options
author | Eilidh McAdam <eilidh@lanedo.com> | 2012-09-26 12:22:17 +0100 |
---|---|---|
committer | Radek Doulik <rodo@novell.com> | 2012-12-11 18:05:09 +0100 |
commit | 8846afb15b468bf3397ab5c2acbcca8c835cf9c6 (patch) | |
tree | 1efc8c584e4b98cc195b72e0ff6a6e7c8d2db0c5 | |
parent | 2b4455b03c8bed08bb0a6463794197c912d9f78a (diff) |
Import shadow effect properties for shapes in docx.
Change-Id: I0cfd6b45be268d688b7389c79c5e9ad7f48eb12d
Reviewed-on: https://gerrit.libreoffice.org/702
Reviewed-by: Noel Power <noel.power@suse.com>
Tested-by: Noel Power <noel.power@suse.com>
-rw-r--r-- | oox/Library_oox.mk | 2 | ||||
-rw-r--r-- | oox/inc/oox/drawingml/drawingmltypes.hxx | 3 | ||||
-rw-r--r-- | oox/inc/oox/drawingml/effectproperties.hxx | 53 | ||||
-rw-r--r-- | oox/inc/oox/drawingml/effectpropertiescontext.hxx | 41 | ||||
-rw-r--r-- | oox/inc/oox/drawingml/shape.hxx | 3 | ||||
-rw-r--r-- | oox/inc/oox/drawingml/shapepropertymap.hxx | 1 | ||||
-rw-r--r-- | oox/source/drawingml/effectproperties.cxx | 59 | ||||
-rw-r--r-- | oox/source/drawingml/effectpropertiescontext.cxx | 56 | ||||
-rw-r--r-- | oox/source/drawingml/shape.cxx | 9 | ||||
-rw-r--r-- | oox/source/drawingml/shapepropertiescontext.cxx | 2 | ||||
-rw-r--r-- | oox/source/token/properties.txt | 5 |
11 files changed, 234 insertions, 0 deletions
diff --git a/oox/Library_oox.mk b/oox/Library_oox.mk index a7a658acf606..680dba702e5a 100644 --- a/oox/Library_oox.mk +++ b/oox/Library_oox.mk @@ -150,6 +150,8 @@ $(eval $(call gb_Library_add_exception_objects,oox,\ oox/source/drawingml/diagram/diagramlayoutatoms \ oox/source/drawingml/diagram/layoutnodecontext \ oox/source/drawingml/drawingmltypes \ + oox/source/drawingml/effectproperties \ + oox/source/drawingml/effectpropertiescontext \ oox/source/drawingml/embeddedwavaudiofile \ oox/source/drawingml/fillproperties \ oox/source/drawingml/fillpropertiesgroupcontext \ diff --git a/oox/inc/oox/drawingml/drawingmltypes.hxx b/oox/inc/oox/drawingml/drawingmltypes.hxx index 71174b36b43a..6d0431df534f 100644 --- a/oox/inc/oox/drawingml/drawingmltypes.hxx +++ b/oox/inc/oox/drawingml/drawingmltypes.hxx @@ -69,6 +69,9 @@ typedef ::boost::shared_ptr< TextCharacterProperties > TextCharacterPropertiesPt struct TextBodyProperties; typedef ::boost::shared_ptr< TextBodyProperties > TextBodyPropertiesPtr; +struct EffectProperties; +typedef ::boost::shared_ptr< EffectProperties > EffectPropertiesPtr; + class TextBody; typedef ::boost::shared_ptr< TextBody > TextBodyPtr; diff --git a/oox/inc/oox/drawingml/effectproperties.hxx b/oox/inc/oox/drawingml/effectproperties.hxx new file mode 100644 index 000000000000..55c5ec34a20f --- /dev/null +++ b/oox/inc/oox/drawingml/effectproperties.hxx @@ -0,0 +1,53 @@ +/* -*- 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/. + */ + +#ifndef OOX_DRAWINGML_EFFECTPROPERTIES_HXX +#define OOX_DRAWINGML_EFFECTPROPERTIES_HXX + +#include "oox/drawingml/fillproperties.hxx" + +namespace oox { +namespace drawingml { + +// ============================================================================ + +struct EffectShadowProperties +{ + OptValue< sal_Int64 > moShadowDist; + OptValue< sal_Int64 > moShadowDir; + OptValue< sal_Int64 > moShadowAlpha; + Color moShadowColor; + + /** Overwrites all members that are explicitly set in rSourceProps. */ + void assignUsed( const EffectShadowProperties& rSourceProps ); +}; + +// ============================================================================ + +struct OOX_DLLPUBLIC EffectProperties +{ + EffectShadowProperties maShadow; + + /** Overwrites all members that are explicitly set in rSourceProps. */ + void assignUsed( const EffectProperties& rSourceProps ); + + /** Writes the properties to the passed property map. */ + void pushToPropMap( + PropertyMap& rPropMap, + const GraphicHelper& rGraphicHelper ) const; +}; + +// ============================================================================ + +} // namespace drawingml +} // namespace oox + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/inc/oox/drawingml/effectpropertiescontext.hxx b/oox/inc/oox/drawingml/effectpropertiescontext.hxx new file mode 100644 index 000000000000..cd5e2eba28f5 --- /dev/null +++ b/oox/inc/oox/drawingml/effectpropertiescontext.hxx @@ -0,0 +1,41 @@ +/* -*- 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/. + */ + +#ifndef OOX_DRAWINGML_EFFECTPROPERTIESCONTEXT_HXX +#define OOX_DRAWINGML_EFFECTPROPERTIESCONTEXT_HXX + +#include "oox/core/contexthandler.hxx" +#include "oox/dllapi.h" + +namespace oox { namespace drawingml { + +// --------------------------------------------------------------------- + +struct EffectProperties; + +class OOX_DLLPUBLIC EffectPropertiesContext : public ::oox::core::ContextHandler +{ +public: + EffectPropertiesContext( ::oox::core::ContextHandler& rParent, + EffectProperties& rEffectProperties ) throw(); + ~EffectPropertiesContext(); + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastContextHandler > SAL_CALL + createFastChildContext( ::sal_Int32 Element, const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XFastAttributeList >& Attribs ) + throw (::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException); + +protected: + EffectProperties& mrEffectProperties; +}; + +} } + +#endif // OOX_DRAWINGML_EFFECTPROPERTIESCONTEXT_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/inc/oox/drawingml/shape.hxx b/oox/inc/oox/drawingml/shape.hxx index 09ea5028b94e..b93469de8c0d 100644 --- a/oox/inc/oox/drawingml/shape.hxx +++ b/oox/inc/oox/drawingml/shape.hxx @@ -106,6 +106,8 @@ public: table::TablePropertiesPtr getTableProperties(); + inline EffectProperties& getEffectProperties() { return *mpEffectPropertiesPtr; } + void setChildPosition( com::sun::star::awt::Point nPosition ){ maChPosition = nPosition; } void setChildSize( com::sun::star::awt::Size aSize ){ maChSize = aSize; } void moveAllToPosition( const com::sun::star::awt::Point &rPoint ); @@ -224,6 +226,7 @@ protected: CustomShapePropertiesPtr mpCustomShapePropertiesPtr; table::TablePropertiesPtr mpTablePropertiesPtr; Shape3DPropertiesPtr mp3DPropertiesPtr; + EffectPropertiesPtr mpEffectPropertiesPtr; PropertyMap maShapeProperties; PropertyMap maDefaultShapeProperties; TextListStylePtr mpMasterTextListStyle; diff --git a/oox/inc/oox/drawingml/shapepropertymap.hxx b/oox/inc/oox/drawingml/shapepropertymap.hxx index 69b9cfa555ae..21b9ab60c25c 100644 --- a/oox/inc/oox/drawingml/shapepropertymap.hxx +++ b/oox/inc/oox/drawingml/shapepropertymap.hxx @@ -70,6 +70,7 @@ enum ShapePropertyId SHAPEPROP_FillBitmapOffsetX, SHAPEPROP_FillBitmapOffsetY, SHAPEPROP_FillBitmapRectanglePoint, + SHAPEPROP_ShadowXDistance, SHAPEPROP_END }; diff --git a/oox/source/drawingml/effectproperties.cxx b/oox/source/drawingml/effectproperties.cxx new file mode 100644 index 000000000000..799169bf0f54 --- /dev/null +++ b/oox/source/drawingml/effectproperties.cxx @@ -0,0 +1,59 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-baosic-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 "oox/drawingml/effectproperties.hxx" +#include "oox/drawingml/drawingmltypes.hxx" +#include "oox/drawingml/shapepropertymap.hxx" +#include "oox/helper/graphichelper.hxx" +#include "oox/token/tokens.hxx" + +#include <basegfx/numeric/ftools.hxx> + +namespace oox { +namespace drawingml { + +// ============================================================================ + +void EffectShadowProperties::assignUsed(const EffectShadowProperties& rSourceProps) +{ + moShadowDist.assignIfUsed( rSourceProps.moShadowDist ); + moShadowDir.assignIfUsed( rSourceProps.moShadowDir ); + moShadowColor.assignIfUsed( rSourceProps.moShadowColor ); +} + +void EffectProperties::assignUsed( const EffectProperties& rSourceProps ) +{ + maShadow.assignUsed(rSourceProps.maShadow); +} + +void EffectProperties::pushToPropMap( PropertyMap& rPropMap, + const GraphicHelper& rGraphicHelper ) const +{ + if (maShadow.moShadowDist.has()) + { + // Negative X or Y dist indicates left or up, respectively + double nAngle = (maShadow.moShadowDir.get(0) / PER_DEGREE) * F_PI180; + sal_Int32 nDist = convertEmuToHmm(maShadow.moShadowDist.get(0)); + sal_Int32 nXDist = cos(nAngle) * nDist; + sal_Int32 nYDist = sin(nAngle) * nDist; + + rPropMap.setProperty( PROP_Shadow, sal_True ); + rPropMap.setProperty( PROP_ShadowXDistance, nXDist); + rPropMap.setProperty( PROP_ShadowYDistance, nYDist); + rPropMap.setProperty( PROP_ShadowColor, maShadow.moShadowColor.getColor(rGraphicHelper, -1 ) ); + rPropMap.setProperty( PROP_ShadowTransparence, maShadow.moShadowColor.getTransparency()); + } +} + +// ============================================================================ + +} // namespace drawingml +} // namespace oox + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/source/drawingml/effectpropertiescontext.cxx b/oox/source/drawingml/effectpropertiescontext.cxx new file mode 100644 index 000000000000..700f225de5b7 --- /dev/null +++ b/oox/source/drawingml/effectpropertiescontext.cxx @@ -0,0 +1,56 @@ +/* -*- 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 "oox/drawingml/effectpropertiescontext.hxx" +#include "oox/drawingml/drawingmltypes.hxx" +#include "oox/drawingml/fillpropertiesgroupcontext.hxx" +#include "oox/drawingml/effectproperties.hxx" +#include "oox/helper/attributelist.hxx" + +using ::rtl::OUString; +using namespace ::oox::core; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::xml::sax; + +// CT_EffectProperties + +namespace oox { namespace drawingml { +// --------------------------------------------------------------------- + +EffectPropertiesContext::EffectPropertiesContext( ContextHandler& rParent, + EffectProperties& rEffectProperties ) throw() +: ContextHandler( rParent ) +, mrEffectProperties( rEffectProperties ) +{ +} + +EffectPropertiesContext::~EffectPropertiesContext() +{ +} + +Reference< XFastContextHandler > EffectPropertiesContext::createFastChildContext( sal_Int32 nElement, const Reference< XFastAttributeList >& xAttribs ) throw (SAXException, RuntimeException) +{ + AttributeList aAttribs( xAttribs ); + switch( nElement ) + { + case A_TOKEN( outerShdw ): + { + mrEffectProperties.maShadow.moShadowDist = aAttribs.getInteger( XML_dist, 0 ); + mrEffectProperties.maShadow.moShadowDir = aAttribs.getInteger( XML_dir, 0 ); + return new ColorContext( *this, mrEffectProperties.maShadow.moShadowColor ); + } + break; + } + + return 0; +} + +} } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 792cce4d570a..c422926b40b4 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -31,6 +31,7 @@ #include "oox/drawingml/theme.hxx" #include "oox/drawingml/fillproperties.hxx" #include "oox/drawingml/lineproperties.hxx" +#include "oox/drawingml/effectproperties.hxx" #include "oox/drawingml/shapepropertymap.hxx" #include "oox/drawingml/textbody.hxx" #include "oox/drawingml/table/tableproperties.hxx" @@ -82,6 +83,7 @@ Shape::Shape( const sal_Char* pServiceName ) , mpFillPropertiesPtr( new FillProperties ) , mpGraphicPropertiesPtr( new GraphicProperties ) , mpCustomShapePropertiesPtr( new CustomShapeProperties ) +, mpEffectPropertiesPtr( new EffectProperties ) , mpMasterTextListStyle( new TextListStyle ) , mnSubType( 0 ) , meFrameType( FRAMETYPE_GENERIC ) @@ -106,6 +108,7 @@ Shape::Shape( const ShapePtr& pSourceShape ) , mpCustomShapePropertiesPtr( pSourceShape->mpCustomShapePropertiesPtr ) , mpTablePropertiesPtr( pSourceShape->mpTablePropertiesPtr ) , mp3DPropertiesPtr( pSourceShape->mp3DPropertiesPtr ) +, mpEffectPropertiesPtr (pSourceShape->mpEffectPropertiesPtr) , maShapeProperties( pSourceShape->maShapeProperties ) , mpMasterTextListStyle( pSourceShape->mpMasterTextListStyle ) , mxShape() @@ -243,6 +246,7 @@ void Shape::applyShapeReference( const Shape& rReferencedShape, bool bUseText ) mpFillPropertiesPtr = FillPropertiesPtr( new FillProperties( *rReferencedShape.mpFillPropertiesPtr.get() ) ); mpCustomShapePropertiesPtr = CustomShapePropertiesPtr( new CustomShapeProperties( *rReferencedShape.mpCustomShapePropertiesPtr.get() ) ); mpTablePropertiesPtr = table::TablePropertiesPtr( rReferencedShape.mpTablePropertiesPtr.get() ? new table::TableProperties( *rReferencedShape.mpTablePropertiesPtr.get() ) : NULL ); + mpEffectPropertiesPtr = EffectPropertiesPtr( new EffectProperties( *rReferencedShape.mpEffectPropertiesPtr.get() ) ); mpMasterTextListStyle = TextListStylePtr( new TextListStyle( *rReferencedShape.mpMasterTextListStyle.get() ) ); maShapeStyleRefs = rReferencedShape.maShapeStyleRefs; maSize = rReferencedShape.maSize; @@ -495,6 +499,7 @@ Reference< XShape > Shape::createAndInsert( FillProperties aFillProperties; aFillProperties.moFillType = XML_noFill; sal_Int32 nFillPhClr = -1; + EffectProperties aEffectProperties; if( pTheme ) { @@ -520,6 +525,7 @@ Reference< XShape > Shape::createAndInsert( aLineProperties.assignUsed( getLineProperties() ); aFillProperties.assignUsed( getFillProperties() ); + aEffectProperties.assignUsed ( getEffectProperties() ); ShapePropertyMap aShapeProps( rFilterBase.getModelObjectHelper() ); @@ -539,6 +545,7 @@ Reference< XShape > Shape::createAndInsert( mpTablePropertiesPtr->pushToPropSet( rFilterBase, xSet, mpMasterTextListStyle ); aFillProperties.pushToPropMap( aShapeProps, rGraphicHelper, mnRotation, nFillPhClr ); aLineProperties.pushToPropMap( aShapeProps, rGraphicHelper, nLinePhClr ); + aEffectProperties.pushToPropMap( aShapeProps, rGraphicHelper ); // applying autogrowheight property before setting shape size, because // the shape size might be changed if currently autogrowheight is true @@ -551,7 +558,9 @@ Reference< XShape > Shape::createAndInsert( // do not set properties at a group shape (this causes assertions from svx) if( aServiceName != "com.sun.star.drawing.GroupShape" ) + { PropertySet( xSet ).setProperties( aShapeProps ); + } if( bIsCustomShape ) { diff --git a/oox/source/drawingml/shapepropertiescontext.cxx b/oox/source/drawingml/shapepropertiescontext.cxx index 7f862e4f91af..357dfb1f81a9 100644 --- a/oox/source/drawingml/shapepropertiescontext.cxx +++ b/oox/source/drawingml/shapepropertiescontext.cxx @@ -39,6 +39,7 @@ #include "oox/drawingml/fillpropertiesgroupcontext.hxx" #include "oox/drawingml/transform2dcontext.hxx" #include "oox/drawingml/customshapegeometry.hxx" +#include "oox/drawingml/effectpropertiescontext.hxx" using rtl::OUString; using namespace oox::core; @@ -111,6 +112,7 @@ Reference< XFastContextHandler > ShapePropertiesContext::createFastChildContext( // todo not supported by core case A_TOKEN( effectLst ): // CT_EffectList case A_TOKEN( effectDag ): // CT_EffectContainer + xRet.set( new EffectPropertiesContext( *this, mrShape.getEffectProperties() ) ); break; // todo diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt index 8835c2cc87f5..cd427214b063 100644 --- a/oox/source/token/properties.txt +++ b/oox/source/token/properties.txt @@ -407,6 +407,11 @@ ScrollValueMin Segments SelectedItems SelectedPage +Shadow +ShadowColor +ShadowTransparence +ShadowXDistance +ShadowYDistance Show ShowBorder ShowCharts |