From 10840ad753b60886ea5175060cb0ec2a77e1579a Mon Sep 17 00:00:00 2001 From: Kohei Yoshida Date: Fri, 10 Jan 2014 11:30:59 -0500 Subject: fdo#72005: Insert the border rectangle to the bottom of the stack. This will make the border and fill shape to be drawn first, then everything else drawn on top. This commit may look large, but it's actually a very trivial change. The important part is in SvxShapeGroup where new methods have been added to allow different insertion positions for the new shapes being inserted, and have the chart2 code make use of it to insert the fill rectangle to the bottom rather than to the top. Change-Id: I999160daf6fc9ce3d7e641f57b1998543df1cc4e --- chart2/source/view/inc/AbstractShapeFactory.hxx | 17 ++++++++++------- chart2/source/view/inc/OpenglShapeFactory.hxx | 13 +++++++------ chart2/source/view/inc/ShapeFactory.hxx | 13 +++++++------ chart2/source/view/main/OpenglShapeFactory.cxx | 12 +++++++----- chart2/source/view/main/ShapeFactory.cxx | 21 +++++++++++++++------ chart2/source/view/main/VLegend.cxx | 2 +- 6 files changed, 47 insertions(+), 31 deletions(-) (limited to 'chart2') diff --git a/chart2/source/view/inc/AbstractShapeFactory.hxx b/chart2/source/view/inc/AbstractShapeFactory.hxx index 36b255457baa..73fbf6989736 100644 --- a/chart2/source/view/inc/AbstractShapeFactory.hxx +++ b/chart2/source/view/inc/AbstractShapeFactory.hxx @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include @@ -60,6 +60,8 @@ class AbstractShapeFactory { public: + enum StackPosition { Top, Bottom }; + static AbstractShapeFactory* getOrCreateShapeFactory(::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> xFactory); virtual ~AbstractShapeFactory() {}; @@ -211,12 +213,13 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShapes >& xTarget - , const ::com::sun::star::awt::Size& rSize - , const ::com::sun::star::awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ) = 0; + const com::sun::star::uno::Reference< + com::sun::star::drawing::XShapes >& xTarget, + const com::sun::star::awt::Size& rSize, + const com::sun::star::awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos = Top ) = 0; virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( diff --git a/chart2/source/view/inc/OpenglShapeFactory.hxx b/chart2/source/view/inc/OpenglShapeFactory.hxx index 7d8ebdc2b083..164ba93bc400 100644 --- a/chart2/source/view/inc/OpenglShapeFactory.hxx +++ b/chart2/source/view/inc/OpenglShapeFactory.hxx @@ -162,12 +162,13 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShapes >& xTarget - , const ::com::sun::star::awt::Size& rSize - , const ::com::sun::star::awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ); + const com::sun::star::uno::Reference< + com::sun::star::drawing::XShapes >& xTarget, + const com::sun::star::awt::Size& rSize, + const com::sun::star::awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos = Top ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( diff --git a/chart2/source/view/inc/ShapeFactory.hxx b/chart2/source/view/inc/ShapeFactory.hxx index 5afb686c2d63..ed592d2a277b 100644 --- a/chart2/source/view/inc/ShapeFactory.hxx +++ b/chart2/source/view/inc/ShapeFactory.hxx @@ -177,12 +177,13 @@ public: virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( - const ::com::sun::star::uno::Reference< - ::com::sun::star::drawing::XShapes >& xTarget - , const ::com::sun::star::awt::Size& rSize - , const ::com::sun::star::awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ); + const com::sun::star::uno::Reference< + com::sun::star::drawing::XShapes >& xTarget, + const com::sun::star::awt::Size& rSize, + const com::sun::star::awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos = Top ); virtual ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createRectangle( diff --git a/chart2/source/view/main/OpenglShapeFactory.cxx b/chart2/source/view/main/OpenglShapeFactory.cxx index 2f4b6cfd625b..126707b3e474 100644 --- a/chart2/source/view/main/OpenglShapeFactory.cxx +++ b/chart2/source/view/main/OpenglShapeFactory.cxx @@ -364,15 +364,17 @@ uno::Reference< drawing::XShape > OpenglShapeFactory::createInvisibleRectangle( } uno::Reference< drawing::XShape > OpenglShapeFactory::createRectangle( - const uno::Reference< drawing::XShapes >& xTarget - , const awt::Size& rSize - , const awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ) + const uno::Reference< drawing::XShapes >& xTarget, + const awt::Size& rSize, + const awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition /*ePos*/ ) { dummy::DummyRectangle* pRectangle = new dummy::DummyRectangle(rSize, rPosition, rPropNames, rPropValues); + // TODO : Honor stack position. xTarget->add(pRectangle); return pRectangle; } diff --git a/chart2/source/view/main/ShapeFactory.cxx b/chart2/source/view/main/ShapeFactory.cxx index 17a89cb9cef5..30c1bff03a24 100644 --- a/chart2/source/view/main/ShapeFactory.cxx +++ b/chart2/source/view/main/ShapeFactory.cxx @@ -2047,17 +2047,26 @@ uno::Reference< drawing::XShape > ShapeFactory::createInvisibleRectangle( } uno::Reference< drawing::XShape > ShapeFactory::createRectangle( - const uno::Reference< drawing::XShapes >& xTarget - , const awt::Size& rSize - , const awt::Point& rPosition - , const tNameSequence& rPropNames - , const tAnySequence& rPropValues ) + const uno::Reference< drawing::XShapes >& xTarget, + const awt::Size& rSize, + const awt::Point& rPosition, + const tNameSequence& rPropNames, + const tAnySequence& rPropValues, + StackPosition ePos ) { uno::Reference< drawing::XShape > xShape( m_xShapeFactory->createInstance( "com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY ); if( xShape.is()) { - xTarget->add( xShape ); + if (ePos == Bottom) + { + uno::Reference xTarget2(xTarget, uno::UNO_QUERY); + if (xTarget2.is()) + xTarget2->addBottom(xShape); + } + else + xTarget->add(xShape); + xShape->setSize( rSize ); xShape->setPosition( rPosition ); uno::Reference< beans::XPropertySet > xPropSet( xShape, uno::UNO_QUERY_THROW ); diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index 3cdc50514c95..1f7b46e3c793 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -913,7 +913,7 @@ void VLegend::createShapes( aLegendSize, awt::Point(0,0), aLineFillProperties.first, - aLineFillProperties.second ); + aLineFillProperties.second, AbstractShapeFactory::Bottom ); //because of this name this border will be used for marking the legend AbstractShapeFactory::setShapeName( xBorder, "MarkHandles" ); -- cgit v1.2.3