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

Markus Mohrhard markus.mohrhard at googlemail.com
Mon Oct 7 16:20:01 PDT 2013


 chart2/source/view/charttypes/CandleStickChart.cxx  |   44 ++--
 chart2/source/view/diagram/VDiagram.cxx             |   12 -
 chart2/source/view/inc/AbstractShapeFactory.hxx     |   21 ++
 chart2/source/view/inc/DummyShapeFactory.hxx        |   14 +
 chart2/source/view/inc/ShapeFactory.hxx             |   13 +
 chart2/source/view/main/DataPointSymbolSupplier.cxx |    9 -
 chart2/source/view/main/DummyShapeFactory.cxx       |   19 ++
 chart2/source/view/main/ShapeFactory.cxx            |  171 +++++++++++++++++++
 chart2/source/view/main/VTitle.cxx                  |  177 ++------------------
 9 files changed, 280 insertions(+), 200 deletions(-)

New commits:
commit 1d6efe8a259446a8b6f8938f494121d5d23f6030
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue Oct 8 02:10:04 2013 +0200

    no createInstance calls any more in chart2/source/view creating shapes
    
    Change-Id: I7978d607ecd9170fff37ff0be02cdfbec7ebb89b

diff --git a/chart2/source/view/inc/AbstractShapeFactory.hxx b/chart2/source/view/inc/AbstractShapeFactory.hxx
index 03780eb..5f915f0 100644
--- a/chart2/source/view/inc/AbstractShapeFactory.hxx
+++ b/chart2/source/view/inc/AbstractShapeFactory.hxx
@@ -13,19 +13,22 @@
 #include "PropertyMapper.hxx"
 #include "VLineProperties.hxx"
 #include "BaseGFXHelper.hxx"
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/awt/Point.hpp>
 #include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/chart2/XFormattedString.hpp>
 #include <com/sun/star/drawing/Direction3D.hpp>
 #include <com/sun/star/drawing/HomogenMatrix.hpp>
 #include <com/sun/star/drawing/PointSequenceSequence.hpp>
 #include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
 #include <com/sun/star/drawing/Position3D.hpp>
-#include <com/sun/star/awt/Size.hpp>
-#include <com/sun/star/awt/Point.hpp>
 #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>
 
+#include <rtl/ustring.hxx>
+
 namespace chart {
 
 
@@ -190,6 +193,15 @@ public:
                      ) = 0;
 
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
+        createText( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xTarget2D,
+                const com::sun::star::awt::Size& rSize,
+                const com::sun::star::awt::Point& rPosition,
+                com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::chart2::XFormattedString > > xFormattedString,
+                const com::sun::star::uno::Reference<
+                com::sun::star::beans::XPropertySet > xTextProperties,
+                double nRotation, const OUString& aName ) = 0;
+
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
         createInvisibleRectangle(
             const ::com::sun::star::uno::Reference<
                 ::com::sun::star::drawing::XShapes >& xTarget
diff --git a/chart2/source/view/inc/DummyShapeFactory.hxx b/chart2/source/view/inc/DummyShapeFactory.hxx
index 0cc7b90..e3731f8 100644
--- a/chart2/source/view/inc/DummyShapeFactory.hxx
+++ b/chart2/source/view/inc/DummyShapeFactory.hxx
@@ -146,6 +146,15 @@ public:
                      );
 
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
+        createText( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xTarget2D,
+                const com::sun::star::awt::Size& rSize,
+                const com::sun::star::awt::Point& rPosition,
+                com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::chart2::XFormattedString > > xFormattedString,
+                const com::sun::star::uno::Reference<
+                com::sun::star::beans::XPropertySet > xTextProperties,
+                double nRotation, const OUString& aName );
+
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
         createInvisibleRectangle(
             const ::com::sun::star::uno::Reference<
                 ::com::sun::star::drawing::XShapes >& xTarget
diff --git a/chart2/source/view/inc/ShapeFactory.hxx b/chart2/source/view/inc/ShapeFactory.hxx
index f38f47c..4e51293 100644
--- a/chart2/source/view/inc/ShapeFactory.hxx
+++ b/chart2/source/view/inc/ShapeFactory.hxx
@@ -161,6 +161,15 @@ public:
                      );
 
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
+        createText( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xTarget2D,
+                const com::sun::star::awt::Size& rSize,
+                const com::sun::star::awt::Point& rPosition,
+                com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::chart2::XFormattedString > > xFormattedString,
+                const com::sun::star::uno::Reference<
+                com::sun::star::beans::XPropertySet > xTextProperties,
+                double nRotation, const OUString& aName );
+
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
         createInvisibleRectangle(
             const ::com::sun::star::uno::Reference<
                 ::com::sun::star::drawing::XShapes >& xTarget
diff --git a/chart2/source/view/main/DummyShapeFactory.cxx b/chart2/source/view/main/DummyShapeFactory.cxx
index eb85535..4eb6283 100644
--- a/chart2/source/view/main/DummyShapeFactory.cxx
+++ b/chart2/source/view/main/DummyShapeFactory.cxx
@@ -269,6 +269,17 @@ uno::Reference< drawing::XShape >
     return new DummyXShape();
 }
 
+
+uno::Reference< drawing::XShape >
+        DummyShapeFactory::createText( const uno::Reference< drawing::XShapes >& ,
+                const awt::Size& , const awt::Point& ,
+                uno::Sequence< uno::Reference< chart2::XFormattedString > > ,
+                const uno::Reference< beans::XPropertySet > ,
+                double , const OUString& )
+{
+    return new DummyXShape();
+}
+
 } //namespace dummy
 
 } //namespace chart
diff --git a/chart2/source/view/main/ShapeFactory.cxx b/chart2/source/view/main/ShapeFactory.cxx
index 5deac27..a0abdaf 100644
--- a/chart2/source/view/main/ShapeFactory.cxx
+++ b/chart2/source/view/main/ShapeFactory.cxx
@@ -22,6 +22,7 @@
 #include "Stripe.hxx"
 #include "CommonConverters.hxx"
 #include "macros.hxx"
+#include "RelativeSizeHelper.hxx"
 #include "PropertyMapper.hxx"
 #include <comphelper/InlineContainer.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
@@ -37,7 +38,9 @@
 #include <com/sun/star/drawing/ProjectionMode.hpp>
 #include <com/sun/star/drawing/ShadeMode.hpp>
 #include <com/sun/star/drawing/TextFitToSizeType.hpp>
+#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
 #include <com/sun/star/drawing/TextureProjectionMode.hpp>
+#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
 #include <com/sun/star/text/XText.hpp>
 #include <com/sun/star/uno/Any.hxx>
 
@@ -2116,6 +2119,162 @@ uno::Reference< drawing::XShape >
     return xShape;
 }
 
+
+uno::Reference< drawing::XShape >
+        ShapeFactory::createText( const uno::Reference< drawing::XShapes >& xTarget,
+                const awt::Size& rSize,
+                const awt::Point& rPos,
+                uno::Sequence< uno::Reference< chart2::XFormattedString > > xFormattedString,
+                const uno::Reference<
+                beans::XPropertySet > xTextProperties,
+                double nRotation, const OUString& aName )
+{
+    //create shape and add to page
+    uno::Reference< drawing::XShape > xShape(
+            m_xShapeFactory->createInstance(
+                "com.sun.star.drawing.TextShape" ), uno::UNO_QUERY );
+    try
+    {
+        xTarget->add(xShape);
+
+        //set text and text properties
+        uno::Reference< text::XText > xText( xShape, uno::UNO_QUERY );
+        uno::Reference< text::XTextCursor > xTextCursor( xText->createTextCursor() );
+        uno::Reference< text::XTextRange > xTextRange( xTextCursor, uno::UNO_QUERY );
+        uno::Reference< beans::XPropertySet > xShapeProp( xShape, uno::UNO_QUERY );
+        if( !xText.is() || !xTextRange.is() || !xTextCursor.is() || !xShapeProp.is() || !xTextProperties.is() )
+            return xShape;
+
+        tPropertyNameValueMap aValueMap;
+        //fill line-, fill- and paragraph-properties into the ValueMap
+        {
+            tMakePropertyNameMap aNameMap = PropertyMapper::getPropertyNameMapForParagraphProperties();
+            aNameMap( PropertyMapper::getPropertyNameMapForFillAndLineProperties() );
+
+            PropertyMapper::getValueMap( aValueMap, aNameMap, xTextProperties );
+        }
+
+        //fill some more shape properties into the ValueMap
+        {
+            drawing::TextHorizontalAdjust eHorizontalAdjust = drawing::TextHorizontalAdjust_CENTER;
+            drawing::TextVerticalAdjust eVerticalAdjust = drawing::TextVerticalAdjust_CENTER;
+
+            aValueMap.insert( tPropertyNameValueMap::value_type( "TextHorizontalAdjust", uno::makeAny(eHorizontalAdjust) ) ); // drawing::TextHorizontalAdjust
+            aValueMap.insert( tPropertyNameValueMap::value_type( "TextVerticalAdjust", uno::makeAny(eVerticalAdjust) ) ); //drawing::TextVerticalAdjust
+            aValueMap.insert( tPropertyNameValueMap::value_type( "TextAutoGrowHeight", uno::makeAny(sal_True) ) ); // sal_Bool
+            aValueMap.insert( tPropertyNameValueMap::value_type( "TextAutoGrowWidth", uno::makeAny(sal_True) ) ); // sal_Bool
+
+            //set name/classified ObjectID (CID)
+            if( !aName.isEmpty() )
+                aValueMap.insert( tPropertyNameValueMap::value_type( "Name", uno::makeAny( aName ) ) ); //CID OUString
+        }
+
+        //set global title properties
+        {
+            tNameSequence aPropNames;
+            tAnySequence aPropValues;
+            PropertyMapper::getMultiPropertyListsFromValueMap( aPropNames, aPropValues, aValueMap );
+            PropertyMapper::setMultiProperties( aPropNames, aPropValues, xShapeProp );
+        }
+
+        sal_Bool bStackCharacters(sal_False);
+        try
+        {
+            xTextProperties->getPropertyValue( "StackCharacters" ) >>= bStackCharacters;
+        }
+        catch( const uno::Exception& e )
+        {
+            ASSERT_EXCEPTION( e );
+        }
+
+        if(bStackCharacters)
+        {
+            //if the characters should be stacked we use only the first character properties for code simplicity
+            if( xFormattedString.getLength()>0 )
+            {
+                OUString aLabel;
+                for( sal_Int32 nN=0; nN<xFormattedString.getLength();nN++ )
+                    aLabel += xFormattedString[nN]->getString();
+                aLabel = ShapeFactory::getStackedString( aLabel, bStackCharacters );
+
+                xTextCursor->gotoEnd(false);
+                xText->insertString( xTextRange, aLabel, false );
+                xTextCursor->gotoEnd(true);
+                uno::Reference< beans::XPropertySet > xTargetProps( xShape, uno::UNO_QUERY );
+                uno::Reference< beans::XPropertySet > xSourceProps( xFormattedString[0], uno::UNO_QUERY );
+
+                PropertyMapper::setMappedProperties( xTargetProps, xSourceProps
+                        , PropertyMapper::getPropertyNameMapForCharacterProperties() );
+
+                // adapt font size according to page size
+                awt::Size aOldRefSize;
+                if( xTextProperties->getPropertyValue( "ReferencePageSize") >>= aOldRefSize )
+                {
+                    RelativeSizeHelper::adaptFontSizes( xTargetProps, aOldRefSize, rSize );
+                }
+            }
+        }
+        else
+        {
+            uno::Sequence< uno::Reference< text::XTextCursor > > aCursorList( xFormattedString.getLength() );
+            sal_Int32 nN = 0;
+            for( nN=0; nN<xFormattedString.getLength();nN++ )
+            {
+                xTextCursor->gotoEnd(false);
+                xText->insertString( xTextRange, xFormattedString[nN]->getString(), false );
+                xTextCursor->gotoEnd(true);
+                aCursorList[nN] = xText->createTextCursorByRange( uno::Reference< text::XTextRange >(xTextCursor,uno::UNO_QUERY) );
+            }
+            awt::Size aOldRefSize;
+            bool bHasRefPageSize =
+                ( xTextProperties->getPropertyValue( "ReferencePageSize") >>= aOldRefSize );
+
+            if( xFormattedString.getLength()>0 )
+            {
+                uno::Reference< beans::XPropertySet > xTargetProps( xShape, uno::UNO_QUERY );
+                uno::Reference< beans::XPropertySet > xSourceProps( xFormattedString[0], uno::UNO_QUERY );
+                PropertyMapper::setMappedProperties( xTargetProps, xSourceProps, PropertyMapper::getPropertyNameMapForCharacterProperties() );
+
+                // adapt font size according to page size
+                if( bHasRefPageSize )
+                {
+                    RelativeSizeHelper::adaptFontSizes( xTargetProps, aOldRefSize, rSize );
+                }
+            }
+        }
+
+        // #i109336# Improve auto positioning in chart
+        float fFontHeight = 0.0;
+        if ( xShapeProp.is() && ( xShapeProp->getPropertyValue( "CharHeight" ) >>= fFontHeight ) )
+        {
+            fFontHeight *= ( 2540.0f / 72.0f );  // pt -> 1/100 mm
+            float fXFraction = 0.18f;
+            sal_Int32 nXDistance = static_cast< sal_Int32 >( ::rtl::math::round( fFontHeight * fXFraction ) );
+            float fYFraction = 0.30f;
+            sal_Int32 nYDistance = static_cast< sal_Int32 >( ::rtl::math::round( fFontHeight * fYFraction ) );
+            xShapeProp->setPropertyValue( "TextLeftDistance", uno::makeAny( nXDistance ) );
+            xShapeProp->setPropertyValue( "TextRightDistance", uno::makeAny( nXDistance ) );
+            xShapeProp->setPropertyValue( "TextUpperDistance", uno::makeAny( nYDistance ) );
+            xShapeProp->setPropertyValue( "TextLowerDistance", uno::makeAny( nYDistance ) );
+        }
+        sal_Int32 nXPos = rPos.X;
+        sal_Int32 nYPos = rPos.Y;
+
+        //set position matrix
+        //the matrix needs to be set at the end behind autogrow and such position influencing properties
+        ::basegfx::B2DHomMatrix aM;
+        aM.rotate( -nRotation*F_PI/180.0 );//#i78696#->#i80521#
+        aM.translate( nXPos, nYPos );
+        xShapeProp->setPropertyValue( "Transformation", uno::makeAny( B2DHomMatrixToHomogenMatrix3(aM) ) );
+    }
+    catch( const uno::Exception& e )
+    {
+        ASSERT_EXCEPTION( e );
+    }
+    return xShape;
+}
+
+
 } //namespace chart
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/chart2/source/view/main/VTitle.cxx b/chart2/source/view/main/VTitle.cxx
index c95ff24..41d7eeb 100644
--- a/chart2/source/view/main/VTitle.cxx
+++ b/chart2/source/view/main/VTitle.cxx
@@ -21,13 +21,10 @@
 #include "CommonConverters.hxx"
 #include "macros.hxx"
 #include "PropertyMapper.hxx"
-#include "ShapeFactory.hxx"
-#include "RelativeSizeHelper.hxx"
+#include "AbstractShapeFactory.hxx"
 #include <com/sun/star/chart2/XFormattedString.hpp>
 #include <rtl/math.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/drawing/TextVerticalAdjust.hpp>
-#include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
 #include <com/sun/star/text/ControlCharacter.hpp>
 #include <com/sun/star/text/XText.hpp>
 #include <com/sun/star/text/XTextCursor.hpp>
@@ -78,7 +75,7 @@ awt::Size VTitle::getUnrotatedSize() const //size before rotation
 
 awt::Size VTitle::getFinalSize() const //size after rotation
 {
-    return ShapeFactory::getSizeAfterRotation(
+    return AbstractShapeFactory::getSizeAfterRotation(
          m_xShape, m_fRotationAngleDegree );
 }
 
@@ -111,168 +108,32 @@ void VTitle::createShapes(
       const awt::Point& rPos
     , const awt::Size& rReferenceSize )
 {
-    try
-    {
-        if(!m_xTitle.is())
-            return;
-
-        uno::Sequence< uno::Reference< XFormattedString > > aStringList = m_xTitle->getText();
-        if(aStringList.getLength()<=0)
-            return;
-
-        //create shape and add to page
-        uno::Reference< drawing::XShape > xShape(
-                m_xShapeFactory->createInstance(
-                "com.sun.star.drawing.TextShape" ), uno::UNO_QUERY );
-        m_xTarget->add(xShape);
-        m_xShape = xShape;
-
-        //set text and text properties
-        uno::Reference< text::XText > xText( xShape, uno::UNO_QUERY );
-        uno::Reference< text::XTextCursor > xTextCursor( xText->createTextCursor() );
-        uno::Reference< text::XTextRange > xTextRange( xTextCursor, uno::UNO_QUERY );
-        uno::Reference< beans::XPropertySet > xShapeProp( xShape, uno::UNO_QUERY );
-        uno::Reference< beans::XPropertySet > xTitleProperties( m_xTitle, uno::UNO_QUERY );
-        if( !xText.is() || !xTextRange.is() || !xTextCursor.is() || !xShapeProp.is() || !xTitleProperties.is() )
-            return;
-
-        tPropertyNameValueMap aValueMap;
-        //fill line-, fill- and paragraph-properties into the ValueMap
-        {
-            tMakePropertyNameMap aNameMap = PropertyMapper::getPropertyNameMapForParagraphProperties();
-            aNameMap( PropertyMapper::getPropertyNameMapForFillAndLineProperties() );
-
-            PropertyMapper::getValueMap( aValueMap, aNameMap, xTitleProperties );
-        }
-
-        //fill some more shape properties into the ValueMap
-        {
-            drawing::TextHorizontalAdjust eHorizontalAdjust = drawing::TextHorizontalAdjust_CENTER;
-            drawing::TextVerticalAdjust eVerticalAdjust = drawing::TextVerticalAdjust_CENTER;
-
-            aValueMap.insert( tPropertyNameValueMap::value_type( "TextHorizontalAdjust", uno::makeAny(eHorizontalAdjust) ) ); // drawing::TextHorizontalAdjust
-            aValueMap.insert( tPropertyNameValueMap::value_type( "TextVerticalAdjust", uno::makeAny(eVerticalAdjust) ) ); //drawing::TextVerticalAdjust
-            aValueMap.insert( tPropertyNameValueMap::value_type( "TextAutoGrowHeight", uno::makeAny(sal_True) ) ); // sal_Bool
-            aValueMap.insert( tPropertyNameValueMap::value_type( "TextAutoGrowWidth", uno::makeAny(sal_True) ) ); // sal_Bool
-
-            //set name/classified ObjectID (CID)
-            if( !m_aCID.isEmpty() )
-                aValueMap.insert( tPropertyNameValueMap::value_type( "Name", uno::makeAny( m_aCID ) ) ); //CID OUString
-        }
-
-        //set global title properties
-        {
-            tNameSequence aPropNames;
-            tAnySequence aPropValues;
-            PropertyMapper::getMultiPropertyListsFromValueMap( aPropNames, aPropValues, aValueMap );
-            PropertyMapper::setMultiProperties( aPropNames, aPropValues, xShapeProp );
-        }
-
-        sal_Bool bStackCharacters(sal_False);
-        try
-        {
-            xTitleProperties->getPropertyValue( "StackCharacters" ) >>= bStackCharacters;
-        }
-        catch( const uno::Exception& e )
-        {
-            ASSERT_EXCEPTION( e );
-        }
-
-        if(bStackCharacters)
-        {
-            //if the characters should be stacked we use only the first character properties for code simplicity
-            if( aStringList.getLength()>0 )
-            {
-                OUString aLabel;
-                for( sal_Int32 nN=0; nN<aStringList.getLength();nN++ )
-                    aLabel += aStringList[nN]->getString();
-                aLabel = ShapeFactory::getStackedString( aLabel, bStackCharacters );
-
-                xTextCursor->gotoEnd(false);
-                xText->insertString( xTextRange, aLabel, false );
-                xTextCursor->gotoEnd(true);
-                uno::Reference< beans::XPropertySet > xTargetProps( xShape, uno::UNO_QUERY );
-                uno::Reference< beans::XPropertySet > xSourceProps( aStringList[0], uno::UNO_QUERY );
-
-                PropertyMapper::setMappedProperties( xTargetProps, xSourceProps
-                    , PropertyMapper::getPropertyNameMapForCharacterProperties() );
-
-                // adapt font size according to page size
-                awt::Size aOldRefSize;
-                if( xTitleProperties->getPropertyValue( "ReferencePageSize") >>= aOldRefSize )
-                {
-                    RelativeSizeHelper::adaptFontSizes( xTargetProps, aOldRefSize, rReferenceSize );
-                }
-            }
-        }
-        else
-        {
-            uno::Sequence< uno::Reference< text::XTextCursor > > aCursorList( aStringList.getLength() );
-            sal_Int32 nN = 0;
-            for( nN=0; nN<aStringList.getLength();nN++ )
-            {
-                xTextCursor->gotoEnd(false);
-                xText->insertString( xTextRange, aStringList[nN]->getString(), false );
-                xTextCursor->gotoEnd(true);
-                aCursorList[nN] = xText->createTextCursorByRange( uno::Reference< text::XTextRange >(xTextCursor,uno::UNO_QUERY) );
-            }
-            awt::Size aOldRefSize;
-            bool bHasRefPageSize =
-                ( xTitleProperties->getPropertyValue( "ReferencePageSize") >>= aOldRefSize );
+    if(!m_xTitle.is())
+        return;
 
-            if( aStringList.getLength()>0 )
-            {
-                uno::Reference< beans::XPropertySet > xTargetProps( xShape, uno::UNO_QUERY );
-                uno::Reference< beans::XPropertySet > xSourceProps( aStringList[0], uno::UNO_QUERY );
-                PropertyMapper::setMappedProperties( xTargetProps, xSourceProps, PropertyMapper::getPropertyNameMapForCharacterProperties() );
+    uno::Sequence< uno::Reference< XFormattedString > > aStringList = m_xTitle->getText();
+    if(aStringList.getLength()<=0)
+        return;
 
-                // adapt font size according to page size
-                if( bHasRefPageSize )
-                {
-                    RelativeSizeHelper::adaptFontSizes( xTargetProps, aOldRefSize, rReferenceSize );
-                }
-            }
-        }
+    m_nXPos = rPos.X;
+    m_nYPos = rPos.Y;
 
-        // #i109336# Improve auto positioning in chart
-        float fFontHeight = 0.0;
-        if ( xShapeProp.is() && ( xShapeProp->getPropertyValue( "CharHeight" ) >>= fFontHeight ) )
-        {
-            fFontHeight *= ( 2540.0f / 72.0f );  // pt -> 1/100 mm
-            float fXFraction = 0.18f;
-            sal_Int32 nXDistance = static_cast< sal_Int32 >( ::rtl::math::round( fFontHeight * fXFraction ) );
-            float fYFraction = 0.30f;
-            sal_Int32 nYDistance = static_cast< sal_Int32 >( ::rtl::math::round( fFontHeight * fYFraction ) );
-            xShapeProp->setPropertyValue( "TextLeftDistance", uno::makeAny( nXDistance ) );
-            xShapeProp->setPropertyValue( "TextRightDistance", uno::makeAny( nXDistance ) );
-            xShapeProp->setPropertyValue( "TextUpperDistance", uno::makeAny( nYDistance ) );
-            xShapeProp->setPropertyValue( "TextLowerDistance", uno::makeAny( nYDistance ) );
-        }
+    uno::Reference< beans::XPropertySet > xTitleProperties( m_xTitle, uno::UNO_QUERY );
 
-        try
-        {
-            double fAngleDegree = 0;
-            xTitleProperties->getPropertyValue( "TextRotation" ) >>= fAngleDegree;
-            m_fRotationAngleDegree += fAngleDegree;
-        }
-        catch( const uno::Exception& e )
-        {
-            ASSERT_EXCEPTION( e );
-        }
-        m_nXPos = rPos.X;
-        m_nYPos = rPos.Y;
-
-        //set position matrix
-        //the matrix needs to be set at the end behind autogrow and such position influencing properties
-        ::basegfx::B2DHomMatrix aM;
-        aM.rotate( -m_fRotationAngleDegree*F_PI/180.0 );//#i78696#->#i80521#
-        aM.translate( m_nXPos, m_nYPos );
-        xShapeProp->setPropertyValue( "Transformation", uno::makeAny( B2DHomMatrixToHomogenMatrix3(aM) ) );
+    try
+    {
+        double fAngleDegree = 0;
+        xTitleProperties->getPropertyValue( "TextRotation" ) >>= fAngleDegree;
+        m_fRotationAngleDegree += fAngleDegree;
     }
     catch( const uno::Exception& e )
     {
         ASSERT_EXCEPTION( e );
     }
+
+    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory);
+    m_xShape =pShapeFactory->createText( m_xTarget, rReferenceSize, rPos, aStringList,
+            xTitleProperties, m_fRotationAngleDegree, m_aCID );
 }
 
 } //namespace chart
commit eccd6d1afc4a0fcfd569d70eb1f4a3aaf8ef3b95
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Tue Oct 8 00:17:37 2013 +0200

    only one createInstance call left
    
    Change-Id: Iabefaea11e9190f84cecc1991585c4a958802fae

diff --git a/chart2/source/view/charttypes/CandleStickChart.cxx b/chart2/source/view/charttypes/CandleStickChart.cxx
index 88cb2c2..3c62b26 100644
--- a/chart2/source/view/charttypes/CandleStickChart.cxx
+++ b/chart2/source/view/charttypes/CandleStickChart.cxx
@@ -231,37 +231,33 @@ void CandleStickChart::createShapes()
                     //create min-max line
                     if( isValidPosition(aPosMiddleMinimum) && isValidPosition(aPosMiddleMaximum) )
                     {
-                        uno::Reference< drawing::XShape > xShape(
-                            m_xShapeFactory->createInstance( "com.sun.star.drawing.PolyLineShape" ),
-                            uno::UNO_QUERY );
-                        xPointGroupShape_Shapes->add(xShape);
-                        uno::Reference< beans::XPropertySet > xProp( xShape, uno::UNO_QUERY );
-                        if(xProp.is())
-                        {
-                            drawing::PolyPolygonShape3D aPoly;
-                            sal_Int32 nLineIndex =0;
-                            AddPointToPoly( aPoly, aPosMiddleMinimum, nLineIndex);
-                            AddPointToPoly( aPoly, aPosMiddleMaximum, nLineIndex);
-                            xProp->setPropertyValue( UNO_NAME_POLYPOLYGON, uno::makeAny( PolyToPointSequence(aPoly) ) );
-                        }
+                        drawing::PolyPolygonShape3D aPoly;
+                        sal_Int32 nLineIndex =0;
+                        AddPointToPoly( aPoly, aPosMiddleMinimum, nLineIndex);
+                        AddPointToPoly( aPoly, aPosMiddleMaximum, nLineIndex);
+
+                        uno::Reference< drawing::XShape > xShape =
+                            m_pShapeFactory->createLine2D( xPointGroupShape_Shapes,
+                                    PolyToPointSequence(aPoly), NULL);
                         this->setMappedProperties( xShape, xPointProp, PropertyMapper::getPropertyNameMapForLineSeriesProperties() );
                     }
 
                     //create first-last shape
                     if(bJapaneseStyle && isValidPosition(aPosLeftFirst) && isValidPosition(aPosRightLast) )
                     {
-                        uno::Reference< drawing::XShape > xShape(
-                            m_xShapeFactory->createInstance( "com.sun.star.drawing.RectangleShape" ),
-                            uno::UNO_QUERY );
-                        xLossGainTarget->add(xShape);
-
-                        xShape->setPosition( Position3DToAWTPoint( aPosLeftFirst ) );
                         drawing::Direction3D aDiff = aPosRightLast-aPosLeftFirst;
                         awt::Size aAWTSize( Direction3DToAWTSize( aDiff ));
                         // workaround for bug in drawing: if height is 0 the box gets infinitely large
                         if( aAWTSize.Height == 0 )
                             aAWTSize.Height = 1;
-                        xShape->setSize( aAWTSize );
+
+                        tNameSequence aNames;
+                        tAnySequence aValues;
+
+                        uno::Reference< drawing::XShape > xShape =
+                            m_pShapeFactory->createRectangle( xLossGainTarget,
+                                    aAWTSize, Position3DToAWTPoint( aPosLeftFirst ),
+                                    aNames, aValues);
 
                         uno::Reference< beans::XPropertySet > xProp( xShape, uno::UNO_QUERY );
                         if(xProp.is())
@@ -292,14 +288,12 @@ void CandleStickChart::createShapes()
 
                         if( aPoly.SequenceX.getLength() )
                         {
-                            uno::Reference< drawing::XShape > xShape(
-                                m_xShapeFactory->createInstance( "com.sun.star.drawing.PolyLineShape" ),
-                                uno::UNO_QUERY );
-                            xPointGroupShape_Shapes->add(xShape);
+                            uno::Reference< drawing::XShape > xShape =
+                                m_pShapeFactory->createLine2D( xPointGroupShape_Shapes,
+                                        PolyToPointSequence(aPoly), NULL );
                             uno::Reference< beans::XPropertySet > xProp( xShape, uno::UNO_QUERY );
                             if(xProp.is())
                             {
-                                xProp->setPropertyValue( UNO_NAME_POLYPOLYGON, uno::makeAny( PolyToPointSequence(aPoly) ) );
                                 this->setMappedProperties( xShape, xPointProp, PropertyMapper::getPropertyNameMapForLineSeriesProperties() );
                             }
                         }
commit afc7b3d7923d354ef0933d1f360e32bbc8e6887f
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Mon Oct 7 01:43:11 2013 +0200

    use AbstractShapeFactory in more places
    
    Change-Id: I1c34f6e56579c4a43e4ba28a81799c3f67d679cb

diff --git a/chart2/source/view/diagram/VDiagram.cxx b/chart2/source/view/diagram/VDiagram.cxx
index 643146c..a07d262 100644
--- a/chart2/source/view/diagram/VDiagram.cxx
+++ b/chart2/source/view/diagram/VDiagram.cxx
@@ -170,11 +170,10 @@ void VDiagram::createShapes_2d()
 
     //add back wall
     {
-        m_xWall2D = uno::Reference< drawing::XShape >(
-            m_xShapeFactory->createInstance(
-            "com.sun.star.drawing.RectangleShape" ), uno::UNO_QUERY );
+        AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory);
+        m_xWall2D = pShapeFactory->createRectangle(
+                xGroupForWall );
 
-        xGroupForWall->add(m_xWall2D);
         uno::Reference< beans::XPropertySet > xProp( m_xWall2D, uno::UNO_QUERY );
         if( xProp.is())
         {
@@ -477,10 +476,7 @@ void VDiagram::createShapes_3d()
 
     //create shape
     m_xOuterGroupShape = uno::Reference< drawing::XShape >(
-            m_xShapeFactory->createInstance(
-            "com.sun.star.drawing.Shape3DSceneObject" ), uno::UNO_QUERY );
-    AbstractShapeFactory::setShapeName( m_xOuterGroupShape, "PlotAreaExcludingAxes" );
-    m_xTarget->add(m_xOuterGroupShape);
+            m_pShapeFactory->createGroup3D( m_xTarget, "PlotAreaExcludingAxes" ), uno::UNO_QUERY);
 
     uno::Reference< drawing::XShapes > xOuterGroup_Shapes =
             uno::Reference<drawing::XShapes>( m_xOuterGroupShape, uno::UNO_QUERY );
diff --git a/chart2/source/view/inc/AbstractShapeFactory.hxx b/chart2/source/view/inc/AbstractShapeFactory.hxx
index fc25226..03780eb 100644
--- a/chart2/source/view/inc/AbstractShapeFactory.hxx
+++ b/chart2/source/view/inc/AbstractShapeFactory.hxx
@@ -204,6 +204,11 @@ public:
                 , const tNameSequence& rPropNames
                 , const tAnySequence& rPropValues ) = 0;
 
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
+        createRectangle(
+            const ::com::sun::star::uno::Reference<
+                ::com::sun::star::drawing::XShapes >& xTarget ) = 0;
+
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >
          getOrCreateChartRootShape( const ::com::sun::star::uno::Reference<
             ::com::sun::star::drawing::XDrawPage>& xPage ) = 0;
diff --git a/chart2/source/view/inc/DummyShapeFactory.hxx b/chart2/source/view/inc/DummyShapeFactory.hxx
index fab8132..0cc7b90 100644
--- a/chart2/source/view/inc/DummyShapeFactory.hxx
+++ b/chart2/source/view/inc/DummyShapeFactory.hxx
@@ -160,6 +160,11 @@ public:
                 , const tNameSequence& rPropNames
                 , const tAnySequence& rPropValues );
 
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
+        createRectangle(
+            const ::com::sun::star::uno::Reference<
+                ::com::sun::star::drawing::XShapes >& xTarget );
+
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >
          getOrCreateChartRootShape( const ::com::sun::star::uno::Reference<
             ::com::sun::star::drawing::XDrawPage>& xPage );
diff --git a/chart2/source/view/inc/ShapeFactory.hxx b/chart2/source/view/inc/ShapeFactory.hxx
index 0f5d5e9..f38f47c 100644
--- a/chart2/source/view/inc/ShapeFactory.hxx
+++ b/chart2/source/view/inc/ShapeFactory.hxx
@@ -175,6 +175,10 @@ public:
                 , const tNameSequence& rPropNames
                 , const tAnySequence& rPropValues );
 
+    virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >
+        createRectangle(
+            const ::com::sun::star::uno::Reference<
+                ::com::sun::star::drawing::XShapes >& xTarget );
 
     virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >
          getOrCreateChartRootShape( const ::com::sun::star::uno::Reference<
diff --git a/chart2/source/view/main/DataPointSymbolSupplier.cxx b/chart2/source/view/main/DataPointSymbolSupplier.cxx
index af87754..96190d1 100644
--- a/chart2/source/view/main/DataPointSymbolSupplier.cxx
+++ b/chart2/source/view/main/DataPointSymbolSupplier.cxx
@@ -30,15 +30,10 @@ uno::Reference< drawing::XShapes > DataPointSymbolSupplier::create2DSymbolList(
             , const uno::Reference< drawing::XShapes >& xTarget
             , const drawing::Direction3D& rSize )
 {
-    uno::Reference< drawing::XShape > xGroup(
-                xShapeFactory->createInstance(
-                "com.sun.star.drawing.GroupShape" ), uno::UNO_QUERY );
-    if(xTarget.is())
-        xTarget->add(xGroup);
+    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory);
     uno::Reference< drawing::XShapes > xGroupShapes =
-        uno::Reference<drawing::XShapes>( xGroup, uno::UNO_QUERY );
+        pShapeFactory->createGroup2D( xTarget );
 
-    AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(xShapeFactory);
     drawing::Position3D  aPos(0,0,0);
     for(sal_Int32 nS=0;nS<AbstractShapeFactory::getSymbolCount();nS++)
     {
diff --git a/chart2/source/view/main/DummyShapeFactory.cxx b/chart2/source/view/main/DummyShapeFactory.cxx
index 187e8fe..eb85535 100644
--- a/chart2/source/view/main/DummyShapeFactory.cxx
+++ b/chart2/source/view/main/DummyShapeFactory.cxx
@@ -252,6 +252,14 @@ uno::Reference< drawing::XShape > DummyShapeFactory::createRectangle(
 }
 
 uno::Reference< drawing::XShape >
+    DummyShapeFactory::createRectangle(
+            const uno::Reference<
+            drawing::XShapes >& )
+{
+    return new DummyXShape();
+}
+
+uno::Reference< drawing::XShape >
         DummyShapeFactory::createText( const uno::Reference< drawing::XShapes >&
                     , const OUString&
                     , const tNameSequence&
diff --git a/chart2/source/view/main/ShapeFactory.cxx b/chart2/source/view/main/ShapeFactory.cxx
index 69cc0c1..5deac27 100644
--- a/chart2/source/view/main/ShapeFactory.cxx
+++ b/chart2/source/view/main/ShapeFactory.cxx
@@ -2061,6 +2061,18 @@ uno::Reference< drawing::XShape > ShapeFactory::createRectangle(
 }
 
 uno::Reference< drawing::XShape >
+    ShapeFactory::createRectangle(
+            const uno::Reference<
+            drawing::XShapes >& xTarget )
+{
+    uno::Reference< drawing::XShape > xShape( m_xShapeFactory->createInstance(
+                "com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY );
+    xTarget->add( xShape );
+
+    return xShape;
+}
+
+uno::Reference< drawing::XShape >
         ShapeFactory::createText( const uno::Reference< drawing::XShapes >& xTarget
                     , const OUString& rText
                     , const tNameSequence& rPropNames


More information about the Libreoffice-commits mailing list