[Libreoffice-commits] core.git: Branch 'private/moggi/abstract-chart-rendering' - chart2/source

Markus Mohrhard markus.mohrhard at googlemail.com
Fri Oct 4 15:59:57 PDT 2013


 chart2/source/view/axes/VCartesianAxis.cxx           |   16 ++++----
 chart2/source/view/axes/VCoordinateSystem.cxx        |   16 ++++----
 chart2/source/view/axes/VPolarAngleAxis.cxx          |   12 +++---
 chart2/source/view/charttypes/AreaChart.cxx          |   14 +++----
 chart2/source/view/charttypes/BubbleChart.cxx        |    2 -
 chart2/source/view/charttypes/PieChart.cxx           |    6 +--
 chart2/source/view/charttypes/VSeriesPlotter.cxx     |   26 ++++++-------
 chart2/source/view/diagram/VDiagram.cxx              |   22 +++++------
 chart2/source/view/inc/AbstractShapeFactory.hxx      |    3 +
 chart2/source/view/inc/LabelPositionHelper.hxx       |    6 +--
 chart2/source/view/inc/PlotterBase.hxx               |    4 +-
 chart2/source/view/inc/PlottingPositionHelper.hxx    |    4 +-
 chart2/source/view/inc/PolarLabelPositionHelper.hxx  |    2 -
 chart2/source/view/inc/ShapeFactory.hxx              |    4 +-
 chart2/source/view/inc/VDiagram.hxx                  |    6 +--
 chart2/source/view/main/AbstractShapeFactory.cxx     |   18 +++++++++
 chart2/source/view/main/ChartView.cxx                |   36 ++++++++++---------
 chart2/source/view/main/DataPointSymbolSupplier.cxx  |    8 ++--
 chart2/source/view/main/DrawModelWrapper.cxx         |    8 ++--
 chart2/source/view/main/LabelPositionHelper.cxx      |    4 +-
 chart2/source/view/main/PlotterBase.cxx              |    4 +-
 chart2/source/view/main/PlottingPositionHelper.cxx   |    4 +-
 chart2/source/view/main/PolarLabelPositionHelper.cxx |    2 -
 chart2/source/view/main/VLegend.cxx                  |    6 +--
 chart2/source/view/main/VLegendSymbolFactory.cxx     |   10 ++---
 25 files changed, 134 insertions(+), 109 deletions(-)

New commits:
commit f9291f231dddcce96779fc0839d440b8a06cbedd
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Oct 5 01:50:11 2013 +0200

    make it possible to switch between different ShapeFactories
    
    Change-Id: I49f6b16182c25ead486a15ab86f722902b36933e

diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx
index b022fdf..be3922b 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -21,7 +21,7 @@
 
 #include "VCartesianAxis.hxx"
 #include "PlottingPositionHelper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "CommonConverters.hxx"
 #include "macros.hxx"
 #include "ViewDefines.hxx"
@@ -93,11 +93,11 @@ Reference< drawing::XShape > createSingleLabel(
 
     // #i78696# use mathematically correct rotation now
     const double fRotationAnglePi(rAxisLabelProperties.fRotationAngleDegree * (F_PI / -180.0));
-    uno::Any aATransformation = ShapeFactory::makeTransformation( rAnchorScreenPosition2D, fRotationAnglePi );
-    OUString aLabel = ShapeFactory::getStackedString( rLabel, rAxisLabelProperties.bStackCharacters );
+    uno::Any aATransformation = AbstractShapeFactory::makeTransformation( rAnchorScreenPosition2D, fRotationAnglePi );
+    OUString aLabel = AbstractShapeFactory::getStackedString( rLabel, rAxisLabelProperties.bStackCharacters );
 
-    Reference< drawing::XShape > xShape2DText = ShapeFactory(xShapeFactory)
-                    .createText( xTarget, aLabel, rPropNames, rPropValues, aATransformation );
+    Reference< drawing::XShape > xShape2DText = AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory)
+                    ->createText( xTarget, aLabel, rPropNames, rPropValues, aATransformation );
 
     LabelPositionHelper::correctPositionForRotation( xShape2DText
         , rAxisProperties.m_aLabelAlignment, rAxisLabelProperties.fRotationAngleDegree, rAxisProperties.m_bComplexCategories );
@@ -113,7 +113,7 @@ bool lcl_doesShapeOverlapWithTickmark( const Reference< drawing::XShape >& xShap
     if(!xShape.is())
         return false;
 
-    ::basegfx::B2IRectangle aShapeRect = BaseGFXHelper::makeRectangle(xShape->getPosition(),ShapeFactory::getSizeAfterRotation( xShape, fRotationAngleDegree ));
+    ::basegfx::B2IRectangle aShapeRect = BaseGFXHelper::makeRectangle(xShape->getPosition(),AbstractShapeFactory::getSizeAfterRotation( xShape, fRotationAngleDegree ));
 
     if( bIsVerticalAxis )
     {
@@ -293,7 +293,7 @@ B2DVector lcl_getLabelsDistance( TickIter& rIter, const B2DVector& rDistanceTick
         xShape2DText = pTickInfo->xTextShape;
         if( xShape2DText.is() )
         {
-            awt::Size aSize = ShapeFactory::getSizeAfterRotation( xShape2DText, fRotationAngleDegree );
+            awt::Size aSize = AbstractShapeFactory::getSizeAfterRotation( xShape2DText, fRotationAngleDegree );
             if(fabs(aStaggerDirection.getX())>fabs(aStaggerDirection.getY()))
                 nDistance = ::std::max(nDistance,aSize.Width);
             else
@@ -1525,7 +1525,7 @@ void VCartesianAxis::updatePositions()
 
                     // #i78696# use mathematically correct rotation now
                     const double fRotationAnglePi(fRotationAngleDegree * (F_PI / -180.0));
-                    uno::Any aATransformation = ShapeFactory::makeTransformation(aAnchorScreenPosition2D, fRotationAnglePi);
+                    uno::Any aATransformation = AbstractShapeFactory::makeTransformation(aAnchorScreenPosition2D, fRotationAnglePi);
 
                     //set new position
                     uno::Reference< beans::XPropertySet > xProp( xShape2DText, uno::UNO_QUERY );
diff --git a/chart2/source/view/axes/VCoordinateSystem.cxx b/chart2/source/view/axes/VCoordinateSystem.cxx
index 521e58a..3124f0c 100644
--- a/chart2/source/view/axes/VCoordinateSystem.cxx
+++ b/chart2/source/view/axes/VCoordinateSystem.cxx
@@ -22,7 +22,7 @@
 #include "VPolarCoordinateSystem.hxx"
 #include "ScaleAutomatism.hxx"
 #include "VSeriesPlotter.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "servicenames_coosystems.hxx"
 #include "macros.hxx"
 #include "AxisIndexDefines.hxx"
@@ -104,20 +104,20 @@ void VCoordinateSystem::initPlottingTargets(  const Reference< drawing::XShapes
 
     sal_Int32 nDimensionCount = m_xCooSysModel->getDimension();
     //create group shape for grids first thus axes are always painted above grids
-    ShapeFactory aShapeFactory(xShapeFactory);
+    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory);
     if(nDimensionCount==2)
     {
         //create and add to target
-        m_xLogicTargetForGrids = aShapeFactory.createGroup2D( xLogicTarget );
-        xLogicTargetForSeriesBehindAxis = aShapeFactory.createGroup2D( xLogicTarget );
-        m_xLogicTargetForAxes = aShapeFactory.createGroup2D( xLogicTarget );
+        m_xLogicTargetForGrids = pShapeFactory->createGroup2D( xLogicTarget );
+        xLogicTargetForSeriesBehindAxis = pShapeFactory->createGroup2D( xLogicTarget );
+        m_xLogicTargetForAxes = pShapeFactory->createGroup2D( xLogicTarget );
     }
     else
     {
         //create and added to target
-        m_xLogicTargetForGrids = aShapeFactory.createGroup3D( xLogicTarget );
-        xLogicTargetForSeriesBehindAxis = aShapeFactory.createGroup3D( xLogicTarget );
-        m_xLogicTargetForAxes = aShapeFactory.createGroup3D( xLogicTarget );
+        m_xLogicTargetForGrids = pShapeFactory->createGroup3D( xLogicTarget );
+        xLogicTargetForSeriesBehindAxis = pShapeFactory->createGroup3D( xLogicTarget );
+        m_xLogicTargetForAxes = pShapeFactory->createGroup3D( xLogicTarget );
     }
     m_xFinalTarget  = xFinalTarget;
     m_xShapeFactory = xShapeFactory;
diff --git a/chart2/source/view/axes/VPolarAngleAxis.cxx b/chart2/source/view/axes/VPolarAngleAxis.cxx
index fb89a0b9..9d24c5c 100644
--- a/chart2/source/view/axes/VPolarAngleAxis.cxx
+++ b/chart2/source/view/axes/VPolarAngleAxis.cxx
@@ -21,7 +21,7 @@
 
 #include "VPolarAngleAxis.hxx"
 #include "VPolarGrid.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "macros.hxx"
 #include "NumberFormatterWrapper.hxx"
 #include "PolarLabelPositionHelper.hxx"
@@ -56,7 +56,7 @@ bool VPolarAngleAxis::createTextShapes_ForAngleAxis(
                      , double fLogicZ )
 {
     sal_Int32 nDimensionCount = 2;
-    ShapeFactory aShapeFactory(m_xShapeFactory);
+    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory);
 
     FixedNumberFormatter aFixedNumberFormatter(
         m_xNumberFormatsSupplier, rAxisLabelProperties.nNumberFormatKey );
@@ -118,7 +118,7 @@ bool VPolarAngleAxis::createTextShapes_ForAngleAxis(
             double fLogicAngle = pTickInfo->getUnscaledTickValue();
 
             LabelAlignment eLabelAlignment(LABEL_ALIGN_CENTER);
-            PolarLabelPositionHelper aPolarLabelPositionHelper(m_pPosHelper,nDimensionCount,xTarget,&aShapeFactory);
+            PolarLabelPositionHelper aPolarLabelPositionHelper(m_pPosHelper,nDimensionCount,xTarget, pShapeFactory);
             sal_Int32 nScreenValueOffsetInRadiusDirection = m_aAxisLabelProperties.m_aMaximumSpaceForLabels.Height/15;
             awt::Point aAnchorScreenPosition2D( aPolarLabelPositionHelper.getLabelScreenPositionAndAlignmentForLogicValues(
                     eLabelAlignment, fLogicAngle, fLogicRadius, fLogicZ, nScreenValueOffsetInRadiusDirection ));
@@ -127,10 +127,10 @@ bool VPolarAngleAxis::createTextShapes_ForAngleAxis(
             // #i78696# use mathematically correct rotation now
             const double fRotationAnglePi(rAxisLabelProperties.fRotationAngleDegree * (F_PI / -180.0));
 
-            uno::Any aATransformation = ShapeFactory::makeTransformation( aAnchorScreenPosition2D, fRotationAnglePi );
-            OUString aStackedLabel = ShapeFactory::getStackedString( aLabel, rAxisLabelProperties.bStackCharacters );
+            uno::Any aATransformation = AbstractShapeFactory::makeTransformation( aAnchorScreenPosition2D, fRotationAnglePi );
+            OUString aStackedLabel = AbstractShapeFactory::getStackedString( aLabel, rAxisLabelProperties.bStackCharacters );
 
-            pTickInfo->xTextShape = aShapeFactory.createText( xTarget, aStackedLabel, aPropNames, aPropValues, aATransformation );
+            pTickInfo->xTextShape = pShapeFactory->createText( xTarget, aStackedLabel, aPropNames, aPropValues, aATransformation );
         }
 
         //if NO OVERLAP -> remove overlapping shapes
diff --git a/chart2/source/view/charttypes/AreaChart.cxx b/chart2/source/view/charttypes/AreaChart.cxx
index 1fc5ab1..a534b81 100644
--- a/chart2/source/view/charttypes/AreaChart.cxx
+++ b/chart2/source/view/charttypes/AreaChart.cxx
@@ -19,7 +19,7 @@
 
 #include "AreaChart.hxx"
 #include "PlottingPositionHelper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "CommonConverters.hxx"
 #include "macros.hxx"
 #include "ViewDefines.hxx"
@@ -442,7 +442,7 @@ bool AreaChart::impl_createLine( VDataSeries* pSeries
     { // default to creating a straight line
         SAL_WARN_IF(CurveStyle_LINES != m_eCurveStyle, "chart2.areachart", "Unknown curve style");
         bool bIsClipped = false;
-        if( m_bConnectLastToFirstPoint && !ShapeFactory::isPolygonEmptyOrSinglePoint(*pSeriesPoly) )
+        if( m_bConnectLastToFirstPoint && !AbstractShapeFactory::isPolygonEmptyOrSinglePoint(*pSeriesPoly) )
         {
             // do NOT connect last and first point, if one is NAN, and NAN handling is NAN_AS_GAP
             double fFirstY = pSeries->getYValue( 0 );
@@ -465,7 +465,7 @@ bool AreaChart::impl_createLine( VDataSeries* pSeries
             Clipping::clipPolygonAtRectangle( *pSeriesPoly, pPosHelper->getScaledLogicClipDoubleRect(), aPoly );
     }
 
-    if(!ShapeFactory::hasPolygonAnyLines(aPoly))
+    if(!AbstractShapeFactory::hasPolygonAnyLines(aPoly))
         return false;
 
     //transformation 3) -> 4)
@@ -524,7 +524,7 @@ bool AreaChart::impl_createArea( VDataSeries* pSeries
 
     drawing::PolyPolygonShape3D aPoly( *pSeriesPoly );
     //add second part to the polygon (grounding points or previous series points)
-    if( m_bConnectLastToFirstPoint && !ShapeFactory::isPolygonEmptyOrSinglePoint(*pSeriesPoly) )
+    if( m_bConnectLastToFirstPoint && !AbstractShapeFactory::isPolygonEmptyOrSinglePoint(*pSeriesPoly) )
     {
         if( pPreviousSeriesPoly )
             addPolygon( aPoly, *pPreviousSeriesPoly );
@@ -556,17 +556,17 @@ bool AreaChart::impl_createArea( VDataSeries* pSeries
     {
         appendPoly( aPoly, *pPreviousSeriesPoly );
     }
-    ShapeFactory::closePolygon(aPoly);
+    AbstractShapeFactory::closePolygon(aPoly);
 
     //apply clipping
     {
         drawing::PolyPolygonShape3D aClippedPoly;
         Clipping::clipPolygonAtRectangle( aPoly, pPosHelper->getScaledLogicClipDoubleRect(), aClippedPoly, false );
-        ShapeFactory::closePolygon(aClippedPoly); //again necessary after clipping
+        AbstractShapeFactory::closePolygon(aClippedPoly); //again necessary after clipping
         aPoly = aClippedPoly;
     }
 
-    if(!ShapeFactory::hasPolygonAnyLines(aPoly))
+    if(!AbstractShapeFactory::hasPolygonAnyLines(aPoly))
         return false;
 
     //transformation 3) -> 4)
diff --git a/chart2/source/view/charttypes/BubbleChart.cxx b/chart2/source/view/charttypes/BubbleChart.cxx
index 4c61887..fd6306d 100644
--- a/chart2/source/view/charttypes/BubbleChart.cxx
+++ b/chart2/source/view/charttypes/BubbleChart.cxx
@@ -19,7 +19,7 @@
 
 #include "BubbleChart.hxx"
 #include "PlottingPositionHelper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "CommonConverters.hxx"
 #include "macros.hxx"
 #include "ViewDefines.hxx"
diff --git a/chart2/source/view/charttypes/PieChart.cxx b/chart2/source/view/charttypes/PieChart.cxx
index 48a97f1..1e7c1af 100644
--- a/chart2/source/view/charttypes/PieChart.cxx
+++ b/chart2/source/view/charttypes/PieChart.cxx
@@ -19,7 +19,7 @@
 
 #include "PieChart.hxx"
 #include "PlottingPositionHelper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "PolarLabelPositionHelper.hxx"
 #include "macros.hxx"
 #include "CommonConverters.hxx"
@@ -494,7 +494,7 @@ void PieChart::createShapes()
 
                 if(!bDoExplode)
                 {
-                    ShapeFactory::setShapeName( xPointShape
+                    AbstractShapeFactory::setShapeName( xPointShape
                                 , ObjectIdentifier::createPointCID( pSeries->getPointCID_Stub(), nPointIndex ) );
                 }
                 else try
@@ -521,7 +521,7 @@ void PieChart::createShapes()
                             nOffsetPercent, aMinimumPosition, aMaximumPosition )
                         ) );
 
-                    ShapeFactory::setShapeName( xPointShape
+                    AbstractShapeFactory::setShapeName( xPointShape
                                 , ObjectIdentifier::createPointCID( aPointCIDStub, nPointIndex ) );
                 }
                 catch( const uno::Exception& e )
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index e78806e..be9af9f 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -18,7 +18,7 @@
  */
 
 #include "VSeriesPlotter.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "chartview/ExplicitValueProvider.hxx"
 
 #include "CommonConverters.hxx"
@@ -543,9 +543,9 @@ uno::Reference< drawing::XShape > VSeriesPlotter::createDataLabel( const uno::Re
         LabelPositionHelper::changeTextAdjustment( *pPropValues, *pPropNames, eAlignment );
 
         //create text shape
-        xTextShape = ShapeFactory(m_xShapeFactory).
+        xTextShape = AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory)->
             createText( xTarget_, aText.makeStringAndClear()
-                        , *pPropNames, *pPropValues, ShapeFactory::makeTransformation( aScreenPosition2D ) );
+                        , *pPropNames, *pPropValues, AbstractShapeFactory::makeTransformation( aScreenPosition2D ) );
 
         if( !xTextShape.is() )
             return xTextShape;
@@ -556,7 +556,7 @@ uno::Reference< drawing::XShape > VSeriesPlotter::createDataLabel( const uno::Re
             const double fDegreesPi( fRotationDegrees * ( F_PI / -180.0 ) );
             uno::Reference< beans::XPropertySet > xProp( xTextShape, uno::UNO_QUERY );
             if( xProp.is() )
-                xProp->setPropertyValue( "Transformation", ShapeFactory::makeTransformation( aScreenPosition2D, fDegreesPi ) );
+                xProp->setPropertyValue( "Transformation", AbstractShapeFactory::makeTransformation( aScreenPosition2D, fDegreesPi ) );
             LabelPositionHelper::correctPositionForRotation( xTextShape, eAlignment, fRotationDegrees, true /*bRotateAroundCenter*/ );
         }
 
@@ -1086,7 +1086,7 @@ void VSeriesPlotter::createRegressionCurvesShapes( VDataSeries& rVDataSeries,
                 createGroupShape( xTarget, rVDataSeries.getDataCurveCID( nN, bAverageLine ) );
             uno::Reference< drawing::XShape > xShape = m_pShapeFactory->createLine2D(
                 xRegressionGroupShapes, PolyToPointSequence( aRegressionPoly ), &aVLineProperties );
-            m_pShapeFactory->setShapeName( xShape, "MarkHandles" );
+            AbstractShapeFactory::setShapeName( xShape, "MarkHandles" );
             aDefaultPos = xShape->getPosition();
         }
 
@@ -1189,12 +1189,12 @@ void VSeriesPlotter::createRegressionCurveEquationShapes(
 
             uno::Reference< drawing::XShape > xTextShape = m_pShapeFactory->createText(
                 xEquationTarget, aFormula.makeStringAndClear(),
-                aNames, aValues, ShapeFactory::makeTransformation( aScreenPosition2D ));
+                aNames, aValues, AbstractShapeFactory::makeTransformation( aScreenPosition2D ));
 
             OSL_ASSERT( xTextShape.is());
             if( xTextShape.is())
             {
-                ShapeFactory::setShapeName( xTextShape, rEquationCID );
+                AbstractShapeFactory::setShapeName( xTextShape, rEquationCID );
                 awt::Size aSize( xTextShape->getSize() );
                 awt::Point aPos( RelativePositionHelper::getUpperLeftCornerOfAnchoredObject(
                     aScreenPosition2D, aSize, aRelativePosition.Anchor ) );
@@ -2306,7 +2306,7 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntriesForSeries(
             for( sal_Int32 nIdx=0; nIdx<aCategoryNames.getLength(); ++nIdx )
             {
                 // symbol
-                uno::Reference< drawing::XShapes > xSymbolGroup( ShapeFactory(xShapeFactory).createGroup2D( xTarget ));
+                uno::Reference< drawing::XShapes > xSymbolGroup( AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory)->createGroup2D( xTarget ));
 
                 // create the symbol
                 Reference< drawing::XShape > xShape( this->createLegendSymbolForPoint( rEntryKeyAspectRatio,
@@ -2320,7 +2320,7 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntriesForSeries(
                     OUString aChildParticle( ObjectIdentifier::createChildParticleWithIndex( OBJECTTYPE_DATA_POINT, nIdx ) );
                     aChildParticle = ObjectIdentifier::addChildParticle( aChildParticle, ObjectIdentifier::createChildParticleWithIndex( OBJECTTYPE_LEGEND_ENTRY, 0 ) );
                     OUString aCID = ObjectIdentifier::createClassifiedIdentifierForParticles( rSeries.getSeriesParticle(), aChildParticle );
-                    ShapeFactory::setShapeName( xShape, aCID );
+                    AbstractShapeFactory::setShapeName( xShape, aCID );
                 }
 
                 // label
@@ -2335,7 +2335,7 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntriesForSeries(
         else
         {
             // symbol
-            uno::Reference< drawing::XShapes > xSymbolGroup( ShapeFactory(xShapeFactory).createGroup2D( xTarget ));
+            uno::Reference< drawing::XShapes > xSymbolGroup( AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory)->createGroup2D( xTarget ));
 
             // create the symbol
             Reference< drawing::XShape > xShape( this->createLegendSymbolForSeries(
@@ -2348,7 +2348,7 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntriesForSeries(
 
                 OUString aChildParticle( ObjectIdentifier::createChildParticleWithIndex( OBJECTTYPE_LEGEND_ENTRY, 0 ) );
                 OUString aCID = ObjectIdentifier::createClassifiedIdentifierForParticles( rSeries.getSeriesParticle(), aChildParticle );
-                ShapeFactory::setShapeName( xShape, aCID );
+                AbstractShapeFactory::setShapeName( xShape, aCID );
             }
 
             // label
@@ -2378,7 +2378,7 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntriesForSeries(
                     aEntry.aLabel = FormattedStringHelper::createFormattedStringSequence( xContext, aResStr, xTextProperties );
 
                     // symbol
-                    uno::Reference< drawing::XShapes > xSymbolGroup( ShapeFactory(xShapeFactory).createGroup2D( xTarget ));
+                    uno::Reference< drawing::XShapes > xSymbolGroup( AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory)->createGroup2D( xTarget ));
 
                     // create the symbol
                     Reference< drawing::XShape > xShape( VLegendSymbolFactory::createSymbol( rEntryKeyAspectRatio,
@@ -2396,7 +2396,7 @@ std::vector< ViewLegendEntry > VSeriesPlotter::createLegendEntriesForSeries(
                         OUString aChildParticle( ObjectIdentifier::createChildParticleWithIndex( eObjectType, i ) );
                         aChildParticle = ObjectIdentifier::addChildParticle( aChildParticle, ObjectIdentifier::createChildParticleWithIndex( OBJECTTYPE_LEGEND_ENTRY, 0 ) );
                         OUString aCID = ObjectIdentifier::createClassifiedIdentifierForParticles( rSeries.getSeriesParticle(), aChildParticle );
-                        ShapeFactory::setShapeName( xShape, aCID );
+                        AbstractShapeFactory::setShapeName( xShape, aCID );
                     }
 
                     aResult.push_back(aEntry);
diff --git a/chart2/source/view/diagram/VDiagram.cxx b/chart2/source/view/diagram/VDiagram.cxx
index 58bb49f..36b0d20 100644
--- a/chart2/source/view/diagram/VDiagram.cxx
+++ b/chart2/source/view/diagram/VDiagram.cxx
@@ -95,7 +95,7 @@ void VDiagram::init(
 
     m_xTarget  = xTarget;
     m_xShapeFactory = xFactory;
-    m_pShapeFactory = new ShapeFactory(xFactory);
+    m_pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(xFactory);
 }
 
 void VDiagram::createShapes( const awt::Point& rPos, const awt::Size& rSize )
@@ -132,10 +132,10 @@ void VDiagram::createShapes( const awt::Point& rPos, const awt::Size& rSize )
         //do not change aspect ratio
         awt::Size  aAspectRatio( static_cast<sal_Int32>(m_aPreferredAspectRatio.DirectionX*FIXED_SIZE_FOR_3D_CHART_VOLUME),
                                  static_cast<sal_Int32>(m_aPreferredAspectRatio.DirectionY*FIXED_SIZE_FOR_3D_CHART_VOLUME ));
-        m_aCurrentSizeWithoutAxes = awt::Size( ShapeFactory::calculateNewSizeRespectingAspectRatio(
+        m_aCurrentSizeWithoutAxes = awt::Size( AbstractShapeFactory::calculateNewSizeRespectingAspectRatio(
                         rAvailableSize, aAspectRatio ) );
         //center diagram position
-        m_aCurrentPosWithoutAxes = awt::Point( ShapeFactory::calculateTopLeftPositionToCenterObject(
+        m_aCurrentPosWithoutAxes = awt::Point( AbstractShapeFactory::calculateTopLeftPositionToCenterObject(
             rPos, rAvailableSize, m_aCurrentSizeWithoutAxes ) );
 
     }
@@ -192,7 +192,7 @@ void VDiagram::createShapes_2d()
                 {
                     //we always need this object as dummy object for correct scene dimensions
                     //but it should not be visible in this case:
-                    ShapeFactory::makeShapeInvisible( m_xWall2D );
+                    AbstractShapeFactory::makeShapeInvisible( m_xWall2D );
                 }
                 else
                 {
@@ -458,12 +458,12 @@ void VDiagram::adjustAspectRatio3d( const awt::Size& rAvailableSize )
     adjustAspectRatio3d( rAvailableSize );
 
     //do not change aspect ratio of 3D scene with 2D bound rect
-    m_aCurrentSizeWithoutAxes = ShapeFactory::calculateNewSizeRespectingAspectRatio(
+    m_aCurrentSizeWithoutAxes = AbstractShapeFactory::calculateNewSizeRespectingAspectRatio(
                     rAvailableSize, m_xOuterGroupShape->getSize() );
     m_xOuterGroupShape->setSize( m_aCurrentSizeWithoutAxes );
 
     //center diagram position
-    m_aCurrentPosWithoutAxes= ShapeFactory::calculateTopLeftPositionToCenterObject(
+    m_aCurrentPosWithoutAxes= AbstractShapeFactory::calculateTopLeftPositionToCenterObject(
          rPos, rAvailableSize, m_aCurrentSizeWithoutAxes );
     m_xOuterGroupShape->setPosition(m_aCurrentPosWithoutAxes);
 
@@ -480,7 +480,7 @@ void VDiagram::createShapes_3d()
     m_xOuterGroupShape = uno::Reference< drawing::XShape >(
             m_xShapeFactory->createInstance(
             "com.sun.star.drawing.Shape3DSceneObject" ), uno::UNO_QUERY );
-    ShapeFactory::setShapeName( m_xOuterGroupShape, "PlotAreaExcludingAxes" );
+    AbstractShapeFactory::setShapeName( m_xOuterGroupShape, "PlotAreaExcludingAxes" );
     m_xTarget->add(m_xOuterGroupShape);
 
     uno::Reference< drawing::XShapes > xOuterGroup_Shapes =
@@ -535,7 +535,7 @@ void VDiagram::createShapes_3d()
             {
                 //we always need this object as dummy object for correct scene dimensions
                 //but it should not be visible in this case:
-                ShapeFactory::makeShapeInvisible( xShape );
+                AbstractShapeFactory::makeShapeInvisible( xShape );
             }
         }
         //add back wall
@@ -563,7 +563,7 @@ void VDiagram::createShapes_3d()
             {
                 //we always need this object as dummy object for correct scene dimensions
                 //but it should not be visible in this case:
-                ShapeFactory::makeShapeInvisible( xShape );
+                AbstractShapeFactory::makeShapeInvisible( xShape );
             }
         }
     }
@@ -639,12 +639,12 @@ void VDiagram::createShapes_3d()
         {
             //we always need this object as dummy object for correct scene dimensions
             //but it should not be visible in this case:
-            ShapeFactory::makeShapeInvisible( xShape );
+            AbstractShapeFactory::makeShapeInvisible( xShape );
         }
         else
         {
             OUString aFloorCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM_FLOOR, OUString() ) );//@todo read CID from model
-            ShapeFactory::setShapeName( xShape, aFloorCID );
+            AbstractShapeFactory::setShapeName( xShape, aFloorCID );
         }
     }
 
diff --git a/chart2/source/view/inc/AbstractShapeFactory.hxx b/chart2/source/view/inc/AbstractShapeFactory.hxx
index b4a3b75..163bfa3 100644
--- a/chart2/source/view/inc/AbstractShapeFactory.hxx
+++ b/chart2/source/view/inc/AbstractShapeFactory.hxx
@@ -22,6 +22,7 @@
 #include <com/sun/star/drawing/XDrawPage.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
 #include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
 
 namespace chart {
 
@@ -52,6 +53,8 @@ class AbstractShapeFactory
 {
 public:
 
+    static AbstractShapeFactory* getOrCreateShapeFactory(::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> xFactory);
+
     virtual ~AbstractShapeFactory() {};
 
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >
diff --git a/chart2/source/view/inc/LabelPositionHelper.hxx b/chart2/source/view/inc/LabelPositionHelper.hxx
index af2a2a0..0e73a2a 100644
--- a/chart2/source/view/inc/LabelPositionHelper.hxx
+++ b/chart2/source/view/inc/LabelPositionHelper.hxx
@@ -32,7 +32,7 @@ namespace chart
 /**
 */
 class PlottingPositionHelper;
-class ShapeFactory;
+class AbstractShapeFactory;
 
 class LabelPositionHelper
 {
@@ -41,7 +41,7 @@ public:
         PlottingPositionHelper* pPosHelper
         , sal_Int32 nDimensionCount
         , const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xLogicTarget
-        , ShapeFactory* pShapeFactory );
+        , AbstractShapeFactory* pShapeFactory );
     virtual ~LabelPositionHelper();
 
     ::com::sun::star::awt::Point transformSceneToScreenPosition(
@@ -66,7 +66,7 @@ private:
     //these members are only necessary for transformation from 3D to 2D
     ::com::sun::star::uno::Reference<
                     ::com::sun::star::drawing::XShapes >    m_xLogicTarget;
-    ShapeFactory*                                           m_pShapeFactory;
+    AbstractShapeFactory* m_pShapeFactory;
 };
 
 } //namespace chart
diff --git a/chart2/source/view/inc/PlotterBase.hxx b/chart2/source/view/inc/PlotterBase.hxx
index 3deb8e4..d477d2f 100644
--- a/chart2/source/view/inc/PlotterBase.hxx
+++ b/chart2/source/view/inc/PlotterBase.hxx
@@ -35,7 +35,7 @@
 namespace chart
 {
 
-class ShapeFactory;
+class AbstractShapeFactory;
 class PlottingPositionHelper;
 
 class PlotterBase
@@ -79,7 +79,7 @@ protected: //member
                     ::com::sun::star::drawing::XShapes >                m_xFinalTarget;
     ::com::sun::star::uno::Reference<
                     ::com::sun::star::lang::XMultiServiceFactory>       m_xShapeFactory;
-    ShapeFactory*                                                       m_pShapeFactory;
+    AbstractShapeFactory* m_pShapeFactory;
     OUString   m_aCID;
 
     sal_Int32                                           m_nDimension;
diff --git a/chart2/source/view/inc/PlottingPositionHelper.hxx b/chart2/source/view/inc/PlottingPositionHelper.hxx
index 4e29626..1e9a650 100644
--- a/chart2/source/view/inc/PlottingPositionHelper.hxx
+++ b/chart2/source/view/inc/PlottingPositionHelper.hxx
@@ -35,7 +35,7 @@
 namespace chart
 {
 
-class ShapeFactory;
+class AbstractShapeFactory;
 
 class PlottingPositionHelper
 {
@@ -81,7 +81,7 @@ public:
     static com::sun::star::awt::Point transformSceneToScreenPosition(
                   const com::sun::star::drawing::Position3D& rScenePosition3D
                 , const com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& xSceneTarget
-                , ShapeFactory* pShapeFactory, sal_Int32 nDimensionCount );
+                , AbstractShapeFactory* pShapeFactory, sal_Int32 nDimensionCount );
 
     inline double getLogicMinX() const;
     inline double getLogicMinY() const;
diff --git a/chart2/source/view/inc/PolarLabelPositionHelper.hxx b/chart2/source/view/inc/PolarLabelPositionHelper.hxx
index 00a4e09..085c4fd 100644
--- a/chart2/source/view/inc/PolarLabelPositionHelper.hxx
+++ b/chart2/source/view/inc/PolarLabelPositionHelper.hxx
@@ -38,7 +38,7 @@ public:
         PolarPlottingPositionHelper* pPosHelper
         , sal_Int32 nDimensionCount
         , const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xLogicTarget
-        , ShapeFactory* pShapeFactory );
+        , AbstractShapeFactory* pShapeFactory );
     virtual ~PolarLabelPositionHelper();
 
     ::com::sun::star::awt::Point getLabelScreenPositionAndAlignmentForLogicValues(
diff --git a/chart2/source/view/inc/ShapeFactory.hxx b/chart2/source/view/inc/ShapeFactory.hxx
index f51dcaf..f67bfcc 100644
--- a/chart2/source/view/inc/ShapeFactory.hxx
+++ b/chart2/source/view/inc/ShapeFactory.hxx
@@ -27,10 +27,12 @@ namespace chart
 
 class ShapeFactory : public AbstractShapeFactory
 {
-public:
+    friend AbstractShapeFactory;
+
     ShapeFactory(::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> xFactory)
         {m_xShapeFactory = xFactory;}
 
+public:
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >
         createGroup2D(
             const ::com::sun::star::uno::Reference<
diff --git a/chart2/source/view/inc/VDiagram.hxx b/chart2/source/view/inc/VDiagram.hxx
index 89f55b1..cfeb552 100644
--- a/chart2/source/view/inc/VDiagram.hxx
+++ b/chart2/source/view/inc/VDiagram.hxx
@@ -22,13 +22,13 @@
 #include <com/sun/star/drawing/HomogenMatrix.hpp>
 #include <com/sun/star/drawing/XShapes.hpp>
 #include <com/sun/star/chart2/XDiagram.hpp>
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include <basegfx/range/b2irectangle.hxx>
 
 namespace chart
 {
 
-class ShapeFactory;
+class AbstractShapeFactory;
 
 /** The VDiagram is responsible to generate the visible parts of the Diagram
 that is wall, floor, axes and data series.
@@ -81,7 +81,7 @@ private: //members
                     ::com::sun::star::drawing::XShapes >                    m_xTarget;
     ::com::sun::star::uno::Reference<
                     ::com::sun::star::lang::XMultiServiceFactory>           m_xShapeFactory;
-    ShapeFactory*                                                           m_pShapeFactory;
+    AbstractShapeFactory* m_pShapeFactory;
 
     // this is the surrounding shape which contains floor, wall and coordinate
     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >   m_xOuterGroupShape;
diff --git a/chart2/source/view/main/AbstractShapeFactory.cxx b/chart2/source/view/main/AbstractShapeFactory.cxx
index 6a8f7a8..77f9d59 100644
--- a/chart2/source/view/main/AbstractShapeFactory.cxx
+++ b/chart2/source/view/main/AbstractShapeFactory.cxx
@@ -38,11 +38,29 @@
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/matrix/b3dhommatrix.hxx>
 
+#include "DummyShapeFactory.hxx"
+#include "ShapeFactory.hxx"
+
 using namespace com::sun::star;
 using ::com::sun::star::uno::Reference;
 
 namespace chart {
 
+AbstractShapeFactory* AbstractShapeFactory::getOrCreateShapeFactory(uno::Reference< lang::XMultiServiceFactory> xFactory)
+{
+    static AbstractShapeFactory* pShapeFactory = NULL;
+
+    if(pShapeFactory)
+        return pShapeFactory;
+
+    if(getenv("CHART_DUMMY_FACTORY"))
+        pShapeFactory = new dummy::DummyShapeFactory();
+    else
+        pShapeFactory = new ShapeFactory(xFactory);
+
+    return pShapeFactory;
+}
+
 sal_Int32 AbstractShapeFactory::getSymbolCount()
 {
     return Symbol_COUNT;
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 1332ce4..c9198be 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -23,7 +23,7 @@
 #include "ViewDefines.hxx"
 #include "VDiagram.hxx"
 #include "VTitle.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "VCoordinateSystem.hxx"
 #include "VSeriesPlotter.hxx"
 #include "CommonConverters.hxx"
@@ -1404,7 +1404,7 @@ awt::Rectangle ChartView::impl_createDiagramAndContent( SeriesPlotterContainer&
             aVDiagram.reduceToMimimumSize();
     }
 
-    uno::Reference< drawing::XShapes > xTextTargetShapes( ShapeFactory(m_xShapeFactory).createGroup2D(xDiagramPlusAxes_Shapes) );
+    uno::Reference< drawing::XShapes > xTextTargetShapes( AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory)->createGroup2D(xDiagramPlusAxes_Shapes) );
 
     // - create axis and grids for all coordinate systems
 
@@ -1432,7 +1432,7 @@ awt::Rectangle ChartView::impl_createDiagramAndContent( SeriesPlotterContainer&
         VCoordinateSystem* pVCooSys = rVCooSysList[0];
         pVCooSys->createMaximumAxesLabels();
 
-        aConsumedOuterRect = ::basegfx::B2IRectangle( ShapeFactory::getRectangleOfShape(xBoundingShape) );
+        aConsumedOuterRect = ::basegfx::B2IRectangle( AbstractShapeFactory::getRectangleOfShape(xBoundingShape) );
         ::basegfx::B2IRectangle aNewInnerRect( aVDiagram.getCurrentRectangle() );
         if( !bUseFixedInnerSize )
             aNewInnerRect = aVDiagram.adjustInnerSize( aConsumedOuterRect );
@@ -1449,7 +1449,7 @@ awt::Rectangle ChartView::impl_createDiagramAndContent( SeriesPlotterContainer&
 
         bool bLessSpaceConsumedThanExpected = false;
         {
-            aConsumedOuterRect = ShapeFactory::getRectangleOfShape(xBoundingShape);
+            aConsumedOuterRect = AbstractShapeFactory::getRectangleOfShape(xBoundingShape);
             if( aConsumedOuterRect.getMinX() > aAvailableOuterRect.getMinX()
                 || aConsumedOuterRect.getMaxX() < aAvailableOuterRect.getMaxX()
                 || aConsumedOuterRect.getMinY() > aAvailableOuterRect.getMinY()
@@ -1516,7 +1516,7 @@ awt::Rectangle ChartView::impl_createDiagramAndContent( SeriesPlotterContainer&
     {
         m_bPointsWereSkipped = false;
 
-        aConsumedOuterRect = ::basegfx::B2IRectangle( ShapeFactory::getRectangleOfShape(xBoundingShape) );
+        aConsumedOuterRect = ::basegfx::B2IRectangle( AbstractShapeFactory::getRectangleOfShape(xBoundingShape) );
         ::basegfx::B2IRectangle aNewInnerRect( aVDiagram.getCurrentRectangle() );
         if( !bUseFixedInnerSize )
             aNewInnerRect = aVDiagram.adjustInnerSize( aConsumedOuterRect );
@@ -1528,9 +1528,9 @@ awt::Rectangle ChartView::impl_createDiagramAndContent( SeriesPlotterContainer&
         }
 
         //clear and recreate
-        ShapeFactory::removeSubShapes( xSeriesTargetInFrontOfAxis ); //xSeriesTargetBehindAxis is a sub shape of xSeriesTargetInFrontOfAxis and will be removed here
+        AbstractShapeFactory::removeSubShapes( xSeriesTargetInFrontOfAxis ); //xSeriesTargetBehindAxis is a sub shape of xSeriesTargetInFrontOfAxis and will be removed here
         xSeriesTargetBehindAxis.clear();
-        ShapeFactory::removeSubShapes( xTextTargetShapes );
+        AbstractShapeFactory::removeSubShapes( xTextTargetShapes );
 
         //set new transformation
         for( nC=0; nC < rVCooSysList.size(); nC++)
@@ -2428,8 +2428,9 @@ void ChartView::createShapes()
 
     awt::Size aPageSize = ChartModelHelper::getPageSize( m_xChartModel );
 
-    uno::Reference<drawing::XShapes> xPageShapes( ShapeFactory(m_xShapeFactory)
-        .getOrCreateChartRootShape( m_xDrawPage ) );
+    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory);
+    uno::Reference<drawing::XShapes> xPageShapes(
+            pShapeFactory->getOrCreateChartRootShape( m_xDrawPage ) );
 
     SdrPage* pPage = ChartView::getSdrPage();
     if(pPage) //it is necessary to use the implementation here as the uno page does not provide a propertyset
@@ -2452,17 +2453,18 @@ void ChartView::createShapes()
         //create the group shape for diagram and axes first to have title and legends on top of it
         uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( m_xChartModel ) );
         OUString aDiagramCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM, OUString::number( 0 ) ) );//todo: other index if more than one diagram is possible
-        uno::Reference< drawing::XShapes > xDiagramPlusAxesPlusMarkHandlesGroup_Shapes( ShapeFactory(m_xShapeFactory).createGroup2D(xPageShapes,aDiagramCID) );
+        uno::Reference< drawing::XShapes > xDiagramPlusAxesPlusMarkHandlesGroup_Shapes(
+                pShapeFactory->createGroup2D(xPageShapes,aDiagramCID) );
 
-        uno::Reference< drawing::XShape > xDiagram_MarkHandles( ShapeFactory(m_xShapeFactory).createInvisibleRectangle(
+        uno::Reference< drawing::XShape > xDiagram_MarkHandles( pShapeFactory->createInvisibleRectangle(
                     xDiagramPlusAxesPlusMarkHandlesGroup_Shapes, awt::Size(0,0) ) );
-        ShapeFactory::setShapeName( xDiagram_MarkHandles, "MarkHandles" );
+        AbstractShapeFactory::setShapeName( xDiagram_MarkHandles, "MarkHandles" );
 
-        uno::Reference< drawing::XShape > xDiagram_OuterRect( ShapeFactory(m_xShapeFactory).createInvisibleRectangle(
+        uno::Reference< drawing::XShape > xDiagram_OuterRect( pShapeFactory->createInvisibleRectangle(
                     xDiagramPlusAxesPlusMarkHandlesGroup_Shapes, awt::Size(0,0) ) );
-        ShapeFactory::setShapeName( xDiagram_OuterRect, "PlotAreaIncludingAxes" );
+        AbstractShapeFactory::setShapeName( xDiagram_OuterRect, "PlotAreaIncludingAxes" );
 
-        uno::Reference< drawing::XShapes > xDiagramPlusAxes_Shapes( ShapeFactory(m_xShapeFactory).createGroup2D(xDiagramPlusAxesPlusMarkHandlesGroup_Shapes ) );
+        uno::Reference< drawing::XShapes > xDiagramPlusAxes_Shapes( pShapeFactory->createGroup2D(xDiagramPlusAxesPlusMarkHandlesGroup_Shapes ) );
 
         bool bAutoPositionDummy = true;
 
@@ -2979,8 +2981,8 @@ uno::Sequence< OUString > ChartView::getAvailableServiceNames() throw (uno::Runt
 OUString ChartView::dump() throw (uno::RuntimeException)
 {
     impl_updateView();
-    uno::Reference<drawing::XShapes> xPageShapes( ShapeFactory(m_xShapeFactory)
-        .getOrCreateChartRootShape( m_xDrawPage ) );
+    uno::Reference<drawing::XShapes> xPageShapes( AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory)
+        ->getOrCreateChartRootShape( m_xDrawPage ) );
 
     if (!xPageShapes.is())
         return OUString();
diff --git a/chart2/source/view/main/DataPointSymbolSupplier.cxx b/chart2/source/view/main/DataPointSymbolSupplier.cxx
index 5ce3f65..af87754 100644
--- a/chart2/source/view/main/DataPointSymbolSupplier.cxx
+++ b/chart2/source/view/main/DataPointSymbolSupplier.cxx
@@ -18,7 +18,7 @@
  */
 
 #include "chartview/DataPointSymbolSupplier.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "macros.hxx"
 
 namespace chart
@@ -38,11 +38,11 @@ uno::Reference< drawing::XShapes > DataPointSymbolSupplier::create2DSymbolList(
     uno::Reference< drawing::XShapes > xGroupShapes =
         uno::Reference<drawing::XShapes>( xGroup, uno::UNO_QUERY );
 
-    ShapeFactory aShapeFactory(xShapeFactory);
+    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory);
     drawing::Position3D  aPos(0,0,0);
-    for(sal_Int32 nS=0;nS<ShapeFactory::getSymbolCount();nS++)
+    for(sal_Int32 nS=0;nS<AbstractShapeFactory::getSymbolCount();nS++)
     {
-        aShapeFactory.createSymbol2D( xGroupShapes, aPos, rSize, nS );
+        pShapeFactory->createSymbol2D( xGroupShapes, aPos, rSize, nS );
     }
     return xGroupShapes;
 }
diff --git a/chart2/source/view/main/DrawModelWrapper.cxx b/chart2/source/view/main/DrawModelWrapper.cxx
index d99d46b..dedf65e 100644
--- a/chart2/source/view/main/DrawModelWrapper.cxx
+++ b/chart2/source/view/main/DrawModelWrapper.cxx
@@ -19,7 +19,7 @@
 
 #include "chartview/DrawModelWrapper.hxx"
 #include "macros.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "ChartItemPool.hxx"
 #include "ObjectIdentifier.hxx"
 #include <svx/unomodel.hxx>
@@ -235,7 +235,7 @@ uno::Reference< drawing::XDrawPage > DrawModelWrapper::getMainDrawPage()
         }
     }
     //ensure that additional shapes are in front of the chart objects so create the chart root before
-    ShapeFactory(this->getShapeFactory()).getOrCreateChartRootShape( m_xMainDrawPage );
+    AbstractShapeFactory::getOrCreateShapeFactory(this->getShapeFactory())->getOrCreateChartRootShape( m_xMainDrawPage );
     return m_xMainDrawPage;
 }
 uno::Reference< drawing::XDrawPage > DrawModelWrapper::getHiddenDrawPage()
@@ -265,7 +265,7 @@ uno::Reference< drawing::XDrawPage > DrawModelWrapper::getHiddenDrawPage()
 void DrawModelWrapper::clearMainDrawPage()
 {
     //uno::Reference<drawing::XShapes> xChartRoot( m_xMainDrawPage, uno::UNO_QUERY );
-    uno::Reference<drawing::XShapes> xChartRoot( ShapeFactory::getChartRootShape( m_xMainDrawPage ) );
+    uno::Reference<drawing::XShapes> xChartRoot( AbstractShapeFactory::getChartRootShape( m_xMainDrawPage ) );
     if( xChartRoot.is() )
     {
         sal_Int32 nSubCount = xChartRoot->getCount();
@@ -281,7 +281,7 @@ void DrawModelWrapper::clearMainDrawPage()
 uno::Reference< drawing::XShapes > DrawModelWrapper::getChartRootShape(
     const uno::Reference< drawing::XDrawPage>& xDrawPage )
 {
-    return ShapeFactory::getChartRootShape( xDrawPage );
+    return AbstractShapeFactory::getChartRootShape( xDrawPage );
 }
 
 void DrawModelWrapper::lockControllers()
diff --git a/chart2/source/view/main/LabelPositionHelper.cxx b/chart2/source/view/main/LabelPositionHelper.cxx
index fd2c9b4..cfa023f 100644
--- a/chart2/source/view/main/LabelPositionHelper.cxx
+++ b/chart2/source/view/main/LabelPositionHelper.cxx
@@ -21,7 +21,7 @@
 #include "PlottingPositionHelper.hxx"
 #include "CommonConverters.hxx"
 #include "PropertyMapper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "macros.hxx"
 #include "RelativeSizeHelper.hxx"
 #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
@@ -36,7 +36,7 @@ LabelPositionHelper::LabelPositionHelper(
                     PlottingPositionHelper* pPosHelper
                     , sal_Int32 nDimensionCount
                     , const uno::Reference< drawing::XShapes >& xLogicTarget
-                    , ShapeFactory* pShapeFactory )
+                    , AbstractShapeFactory* pShapeFactory )
                     : m_pPosHelper(pPosHelper)
                     , m_nDimensionCount(nDimensionCount)
                     , m_xLogicTarget(xLogicTarget)
diff --git a/chart2/source/view/main/PlotterBase.cxx b/chart2/source/view/main/PlotterBase.cxx
index f079d90..a81b041 100644
--- a/chart2/source/view/main/PlotterBase.cxx
+++ b/chart2/source/view/main/PlotterBase.cxx
@@ -19,7 +19,7 @@
 
 #include "PlotterBase.hxx"
 #include "PlottingPositionHelper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include <rtl/math.hxx>
 #include <com/sun/star/chart2/DataPointLabel.hpp>
 
@@ -50,7 +50,7 @@ void PlotterBase::initPlotter(  const uno::Reference< drawing::XShapes >& xLogic
     m_xLogicTarget  = xLogicTarget;
     m_xFinalTarget  = xFinalTarget;
     m_xShapeFactory = xShapeFactory;
-    m_pShapeFactory = new ShapeFactory(xShapeFactory);
+    m_pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory);
     m_aCID = rCID;
 }
 
diff --git a/chart2/source/view/main/PlottingPositionHelper.cxx b/chart2/source/view/main/PlottingPositionHelper.cxx
index 1269536..cfc496a 100644
--- a/chart2/source/view/main/PlottingPositionHelper.cxx
+++ b/chart2/source/view/main/PlottingPositionHelper.cxx
@@ -22,7 +22,7 @@
 #include "ViewDefines.hxx"
 #include "Linear3DTransformation.hxx"
 #include "VPolarTransformation.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "PropertyMapper.hxx"
 #include "DateHelper.hxx"
 #include "defines.hxx"
@@ -203,7 +203,7 @@ drawing::Position3D PlottingPositionHelper::transformScaledLogicToScene(
 
 awt::Point PlottingPositionHelper::transformSceneToScreenPosition( const drawing::Position3D& rScenePosition3D
                 , const uno::Reference< drawing::XShapes >& xSceneTarget
-                , ShapeFactory* pShapeFactory
+                , AbstractShapeFactory* pShapeFactory
                 , sal_Int32 nDimensionCount )
 {
     //@todo would like to have a cheaper method to do this transformation
diff --git a/chart2/source/view/main/PolarLabelPositionHelper.cxx b/chart2/source/view/main/PolarLabelPositionHelper.cxx
index f620f18..d1fbee7 100644
--- a/chart2/source/view/main/PolarLabelPositionHelper.cxx
+++ b/chart2/source/view/main/PolarLabelPositionHelper.cxx
@@ -34,7 +34,7 @@ PolarLabelPositionHelper::PolarLabelPositionHelper(
                     PolarPlottingPositionHelper* pPosHelper
                     , sal_Int32 nDimensionCount
                     , const uno::Reference< drawing::XShapes >& xLogicTarget
-                    , ShapeFactory* pShapeFactory )
+                    , AbstractShapeFactory* pShapeFactory )
                     : LabelPositionHelper( pPosHelper, nDimensionCount, xLogicTarget, pShapeFactory )
                     , m_pPosHelper(pPosHelper)
 {
diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx
index b4b1738..5efb74a 100644
--- a/chart2/source/view/main/VLegend.cxx
+++ b/chart2/source/view/main/VLegend.cxx
@@ -23,7 +23,7 @@
 #include "CommonConverters.hxx"
 #include "ObjectIdentifier.hxx"
 #include "RelativePositionHelper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "RelativeSizeHelper.hxx"
 #include "LegendEntryProvider.hxx"
 #include "chartview/DrawModelWrapper.hxx"
@@ -847,7 +847,7 @@ void VLegend::createShapes(
         // set name to enable selection
         {
             OUString aLegendParticle( ObjectIdentifier::createParticleForLegend( m_xLegend, m_xModel ) );
-            ShapeFactory::setShapeName( m_xShape, ObjectIdentifier::createClassifiedIdentifierForParticle( aLegendParticle ) );
+            AbstractShapeFactory::setShapeName( m_xShape, ObjectIdentifier::createClassifiedIdentifierForParticle( aLegendParticle ) );
         }
 
         // create and insert sub-shapes
@@ -894,7 +894,7 @@ void VLegend::createShapes(
                     Reference< beans::XPropertySet >( xBorder, uno::UNO_QUERY ));
 
                 //because of this name this border will be used for marking the legend
-                ShapeFactory(m_xShapeFactory).setShapeName( xBorder, "MarkHandles" );
+                AbstractShapeFactory::setShapeName( xBorder, "MarkHandles" );
             }
 
             // create entries
diff --git a/chart2/source/view/main/VLegendSymbolFactory.cxx b/chart2/source/view/main/VLegendSymbolFactory.cxx
index b3b1a15..4588273 100644
--- a/chart2/source/view/main/VLegendSymbolFactory.cxx
+++ b/chart2/source/view/main/VLegendSymbolFactory.cxx
@@ -20,7 +20,7 @@
 #include "VLegendSymbolFactory.hxx"
 #include "macros.hxx"
 #include "PropertyMapper.hxx"
-#include "ShapeFactory.hxx"
+#include "AbstractShapeFactory.hxx"
 #include "ObjectIdentifier.hxx"
 #include <com/sun/star/drawing/LineStyle.hpp>
 #include <com/sun/star/chart2/Symbol.hpp>
@@ -110,7 +110,7 @@ Reference< drawing::XShape > VLegendSymbolFactory::createSymbol(
         return xResult;
 
     // add an invisible square box to maintain aspect ratio
-    Reference< drawing::XShape > xBound( ShapeFactory(xShapeFactory).createInvisibleRectangle(
+    Reference< drawing::XShape > xBound( AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory)->createInvisibleRectangle(
                 xResultGroup, rEntryKeyAspectRatio  ));
 
     // create symbol
@@ -136,7 +136,7 @@ Reference< drawing::XShape > VLegendSymbolFactory::createSymbol(
             {
                 drawing::Direction3D aSymbolSize( nSize, nSize, 0 );
                 drawing::Position3D aPos( rEntryKeyAspectRatio.Width/2, rEntryKeyAspectRatio.Height/2, 0 );
-                ShapeFactory aFactory( xShapeFactory );
+                AbstractShapeFactory* pFactory = AbstractShapeFactory::getOrCreateShapeFactory( xShapeFactory );
                 if( aSymbol.Style == chart2::SymbolStyle_STANDARD )
                 {
                     // take series color as fill color
@@ -144,7 +144,7 @@ Reference< drawing::XShape > VLegendSymbolFactory::createSymbol(
                     // border of symbols always same as fill color
                     aSymbol.BorderColor = aSymbol.FillColor;
 
-                    xSymbol.set( aFactory.createSymbol2D(
+                    xSymbol.set( pFactory->createSymbol2D(
                                      xResultGroup,
                                      aPos,
                                      aSymbolSize,
@@ -154,7 +154,7 @@ Reference< drawing::XShape > VLegendSymbolFactory::createSymbol(
                 }
                 else if( aSymbol.Style == chart2::SymbolStyle_GRAPHIC )
                 {
-                    xSymbol.set( aFactory.createGraphic2D(
+                    xSymbol.set( pFactory->createGraphic2D(
                                      xResultGroup,
                                      aPos,
                                      aSymbolSize,


More information about the Libreoffice-commits mailing list