From 1dbd088e4fb9597b0e2f5e4c4db6ecf047d85da3 Mon Sep 17 00:00:00 2001 From: Noel Power Date: Tue, 12 Mar 2013 20:37:15 +0000 Subject: [PATCH] bnc#798309 inherit group style from parent Change-Id: Ie4f1d244f1c9b4935305742d12cabaee3e38647c --- oox/inc/oox/drawingml/shape.hxx | 5 ++++- .../drawingml/chart/chartdrawingfragment.cxx | 2 +- oox/source/drawingml/shape.cxx | 15 +++++++++++---- oox/source/ppt/dgmimport.cxx | 2 +- oox/source/ppt/pptshape.cxx | 2 +- oox/source/ppt/slidepersist.cxx | 2 +- oox/source/shape/ShapeContextHandler.cxx | 6 +++--- sc/source/filter/oox/drawingfragment.cxx | 2 +- 8 files changed, 23 insertions(+), 13 deletions(-) diff --git a/oox/inc/oox/drawingml/shape.hxx b/oox/inc/oox/drawingml/shape.hxx index 0b82a0174cc4..88d37b3df25a 100644 --- a/oox/inc/oox/drawingml/shape.hxx +++ b/oox/inc/oox/drawingml/shape.hxx @@ -149,6 +149,7 @@ public: const Theme* pTheme, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes, basegfx::B2DHomMatrix& aTransformation, + FillProperties& rShapeOrParentShapeFillProps, const ::com::sun::star::awt::Rectangle* pShapeRect = 0, ShapeIdMap* pShapeMap = 0 ); @@ -183,7 +184,9 @@ protected: const ::com::sun::star::awt::Rectangle* pShapeRect, sal_Bool bClearText, sal_Bool bDoNotInsertEmptyTextBody, - basegfx::B2DHomMatrix& aTransformation ); + basegfx::B2DHomMatrix& aTransformation, + FillProperties& rShapeOrParentShapeFillProps + ); void addChildren( ::oox::core::XmlFilterBase& rFilterBase, diff --git a/oox/source/drawingml/chart/chartdrawingfragment.cxx b/oox/source/drawingml/chart/chartdrawingfragment.cxx index 707a4abd5401..4f4660310d7d 100644 --- a/oox/source/drawingml/chart/chartdrawingfragment.cxx +++ b/oox/source/drawingml/chart/chartdrawingfragment.cxx @@ -215,7 +215,7 @@ void ChartDrawingFragment::onEndElement() getLimitedValue< sal_Int32, sal_Int64 >( aShapeRectEmu.Width, 0, SAL_MAX_INT32 ), getLimitedValue< sal_Int32, sal_Int64 >( aShapeRectEmu.Height, 0, SAL_MAX_INT32 ) ); basegfx::B2DHomMatrix aMatrix; - mxShape->addShape( getFilter(), getFilter().getCurrentTheme(), mxDrawPage, aMatrix, &aShapeRectEmu32 ); + mxShape->addShape( getFilter(), getFilter().getCurrentTheme(), mxDrawPage, aMatrix, mxShape->getFillProperties(), &aShapeRectEmu32 ); } } mxShape.reset(); diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx index 45cc868d5f0a..acb71281b6a7 100644 --- a/oox/source/drawingml/shape.cxx +++ b/oox/source/drawingml/shape.cxx @@ -193,6 +193,7 @@ void Shape::addShape( const Theme* pTheme, const Reference< XShapes >& rxShapes, basegfx::B2DHomMatrix& aTransformation, + FillProperties& rShapeOrParentShapeFillProps, const awt::Rectangle* pShapeRect, ShapeIdMap* pShapeMap ) { @@ -204,7 +205,7 @@ void Shape::addShape( if( !sServiceName.isEmpty() ) { basegfx::B2DHomMatrix aMatrix( aTransformation ); - Reference< XShape > xShape( createAndInsert( rFilterBase, sServiceName, pTheme, rxShapes, pShapeRect, sal_False, sal_False, aMatrix ) ); + Reference< XShape > xShape( createAndInsert( rFilterBase, sServiceName, pTheme, rxShapes, pShapeRect, sal_False, sal_False, aMatrix, rShapeOrParentShapeFillProps ) ); if( pShapeMap && !msId.isEmpty() ) { @@ -309,7 +310,7 @@ void Shape::addChildren( std::vector< ShapePtr >::iterator aIter( rMaster.maChildren.begin() ); while( aIter != rMaster.maChildren.end() ) { (*aIter)->setMasterTextListStyle( mpMasterTextListStyle ); - (*aIter++)->addShape( rFilterBase, pTheme, rxShapes, aChildTransformation, NULL, pShapeMap ); + (*aIter++)->addShape( rFilterBase, pTheme, rxShapes, aChildTransformation, getFillProperties(), NULL, pShapeMap ); } } @@ -321,7 +322,8 @@ Reference< XShape > Shape::createAndInsert( const awt::Rectangle* /* pShapeRect */, sal_Bool bClearText, sal_Bool bDoNotInsertEmptyTextBody, - basegfx::B2DHomMatrix& aParentTransformation ) + basegfx::B2DHomMatrix& aParentTransformation, + FillProperties& rShapeOrParentShapeFillProps ) { bool bIsEmbMedia = false; SAL_INFO("oox", OSL_THIS_FUNC << " id: " << msId); @@ -516,7 +518,12 @@ Reference< XShape > Shape::createAndInsert( } aLineProperties.assignUsed( getLineProperties() ); - aFillProperties.assignUsed( getFillProperties() ); + + // group fill inherits from parent + if ( getFillProperties().moFillType.has() && getFillProperties().moFillType.get() == XML_grpFill ) + aFillProperties.assignUsed( rShapeOrParentShapeFillProps ); + else + aFillProperties.assignUsed( getFillProperties() ); aEffectProperties.assignUsed ( getEffectProperties() ); ShapePropertyMap aShapeProps( rFilterBase.getModelObjectHelper() ); diff --git a/oox/source/ppt/dgmimport.cxx b/oox/source/ppt/dgmimport.cxx index 0918f82eaa90..10d16141cc70 100644 --- a/oox/source/ppt/dgmimport.cxx +++ b/oox/source/ppt/dgmimport.cxx @@ -78,7 +78,7 @@ bool QuickDiagrammingImport::importDocument() throw() pShape->addShape( *this, pTheme.get(), xParentShape, - aMatrix ); + aMatrix, pShape->getFillProperties() ); return true; } diff --git a/oox/source/ppt/pptshape.cxx b/oox/source/ppt/pptshape.cxx index 6bf64984db7b..a91ecbb2ae6f 100644 --- a/oox/source/ppt/pptshape.cxx +++ b/oox/source/ppt/pptshape.cxx @@ -328,7 +328,7 @@ void PPTShape::addShape( } else setMasterTextListStyle( aMasterTextListStyle ); - Reference< XShape > xShape( createAndInsert( rFilterBase, sServiceName, pTheme, rxShapes, pShapeRect, bClearText, mpPlaceholder.get() != NULL, aTransformation ) ); + Reference< XShape > xShape( createAndInsert( rFilterBase, sServiceName, pTheme, rxShapes, pShapeRect, bClearText, mpPlaceholder.get() != NULL, aTransformation, getFillProperties() ) ); if ( !rSlidePersist.isMasterPage() && rSlidePersist.getPage().is() && ( (sal_Int32)mnSubType == XML_title ) ) { try diff --git a/oox/source/ppt/slidepersist.cxx b/oox/source/ppt/slidepersist.cxx index 277096c37e66..92be16e10da5 100644 --- a/oox/source/ppt/slidepersist.cxx +++ b/oox/source/ppt/slidepersist.cxx @@ -136,7 +136,7 @@ void SlidePersist::createXShapes( XmlFilterBase& rFilterBase ) if ( pPPTShape ) pPPTShape->addShape( rFilterBase, *this, getTheme().get(), xShapes, aTransformation, 0, &getShapeMap() ); else - (*aChildIter)->addShape( rFilterBase, getTheme().get(), xShapes, aTransformation, 0, &getShapeMap() ); + (*aChildIter)->addShape( rFilterBase, getTheme().get(), xShapes, aTransformation, maShapesPtr->getFillProperties(), 0, &getShapeMap() ); aChildIter++; } } diff --git a/oox/source/shape/ShapeContextHandler.cxx b/oox/source/shape/ShapeContextHandler.cxx index 6b62396a8feb..9c8da2d0549d 100644 --- a/oox/source/shape/ShapeContextHandler.cxx +++ b/oox/source/shape/ShapeContextHandler.cxx @@ -290,7 +290,7 @@ ShapeContextHandler::getShape() throw (uno::RuntimeException) basegfx::B2DHomMatrix aMatrix; if (mpShape->getExtDrawings().size() == 0) { - mpShape->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix ); + mpShape->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix, mpShape->getFillProperties() ); xResult = mpShape->getXShape(); } else @@ -302,7 +302,7 @@ ShapeContextHandler::getShape() throw (uno::RuntimeException) OUString aFragmentPath(pDiagramGraphicDataContext->getFragmentPathFromRelId(*aIt)); oox::drawingml::ShapePtr pShapePtr( new Shape( "com.sun.star.drawing.GroupShape" ) ); mxFilterBase->importFragment(new ShapeDrawingFragmentHandler(*mxFilterBase, aFragmentPath, pShapePtr)); - pShapePtr->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix ); + pShapePtr->addShape( *mxFilterBase, mpThemePtr.get(), xShapes, aMatrix, pShapePtr->getFillProperties() ); xResult = pShapePtr->getXShape(); } mpShape.reset((Shape*)0); @@ -312,7 +312,7 @@ ShapeContextHandler::getShape() throw (uno::RuntimeException) else if (mpShape.get() != NULL) { basegfx::B2DHomMatrix aTransformation; - mpShape->addShape(*mxFilterBase, mpThemePtr.get(), xShapes, aTransformation); + mpShape->addShape(*mxFilterBase, mpThemePtr.get(), xShapes, aTransformation, mpShape->getFillProperties() ); xResult.set(mpShape->getXShape()); mxGraphicShapeContext.clear( ); } diff --git a/sc/source/filter/oox/drawingfragment.cxx b/sc/source/filter/oox/drawingfragment.cxx index d187a4f72db2..261473dfeb5d 100644 --- a/sc/source/filter/oox/drawingfragment.cxx +++ b/sc/source/filter/oox/drawingfragment.cxx @@ -281,7 +281,7 @@ void DrawingFragment::onEndElement() mxShape->setSize(Size(aShapeRectEmu.Width, aShapeRectEmu.Height)); basegfx::B2DHomMatrix aTransformation; - mxShape->addShape( getOoxFilter(), &getTheme(), mxDrawPage, aTransformation, &aShapeRectEmu32 ); + mxShape->addShape( getOoxFilter(), &getTheme(), mxDrawPage, aTransformation, mxShape->getFillProperties(), &aShapeRectEmu32 ); /* Collect all shape positions in the WorksheetHelper base class. But first, scale EMUs to 1/100 mm. */