summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorMuthu Subramanian <sumuthu@suse.com>2013-04-30 10:14:54 +0530
committerJan Holesovsky <kendy@suse.cz>2013-06-05 11:50:29 +0200
commit4d19f82c97694db258c18959313f2b4f1842a5b5 (patch)
treed3bd088839bd2ebb9efacf40fb58f4a36d0570d1 /chart2
parente0413e9da0687d381bac4a7275c56c529f6552cd (diff)
n#816939: Improved label overlap detection.
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/axes/VCartesianAxis.cxx28
1 files changed, 22 insertions, 6 deletions
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx
index 40b48862d7c1..261b23ecf4f6 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -43,6 +43,11 @@
#include <algorithm>
#include <boost/scoped_ptr.hpp>
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
+#include <basegfx/polygon/b2dpolygonclipper.hxx>
+#include <basegfx/matrix/b2dhommatrix.hxx>
//.............................................................................
namespace chart
@@ -52,6 +57,8 @@ using namespace ::com::sun::star;
using namespace ::com::sun::star::chart2;
using namespace ::rtl::math;
using ::com::sun::star::uno::Reference;
+using ::basegfx::B2DPolygon;
+using ::basegfx::B2DPolyPolygon;
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
@@ -137,14 +144,22 @@ bool doesOverlap( const Reference< drawing::XShape >& xShape1
if( !xShape1.is() || !xShape2.is() )
return false;
- sal_Int32 nAngle = abs(fRotationAngleDegree);
+ ::basegfx::B2DRectangle aRect1( BaseGFXHelper::makeRectangle( xShape1->getPosition(), ShapeFactory::getSizeAfterRotation( xShape1, 0 ) ));
+ ::basegfx::B2DRectangle aRect2( BaseGFXHelper::makeRectangle( xShape2->getPosition(), ShapeFactory::getSizeAfterRotation( xShape2, 0 ) ));
- if( ( nAngle >= 45 && nAngle <= 135 ) || ( nAngle >= 225 && nAngle <= 315 ) )
- return false;
+ B2DPolygon aPoly1 = basegfx::tools::createPolygonFromRect( aRect1 );
+ B2DPolygon aPoly2 = basegfx::tools::createPolygonFromRect( aRect2 );
+ ::basegfx::B2DHomMatrix aMatrix;
+ aMatrix.rotate( fRotationAngleDegree );
+ aPoly1.transform( aMatrix );
+ aPoly2.transform( aMatrix );
+
+ B2DPolyPolygon aPolyPoly1, aPolyPoly2;
+ aPolyPoly1.append( aPoly1 );
+ aPolyPoly2.append( aPoly2 );
+ B2DPolyPolygon overlapPoly = ::basegfx::tools::clipPolyPolygonOnPolyPolygon( aPolyPoly1, aPolyPoly2, true, false );
- ::basegfx::B2IRectangle aRect1( BaseGFXHelper::makeRectangle(xShape1->getPosition(),ShapeFactory::getSizeAfterRotation( xShape1, fRotationAngleDegree )));
- ::basegfx::B2IRectangle aRect2( BaseGFXHelper::makeRectangle(xShape2->getPosition(),ShapeFactory::getSizeAfterRotation( xShape2, fRotationAngleDegree )));
- return aRect1.overlaps(aRect2);
+ return (overlapPoly.count() > 0);
}
void removeShapesAtWrongRhythm( TickIter& rIter
@@ -786,6 +801,7 @@ bool VCartesianAxis::createTextShapes(
{
rAxisLabelProperties.fRotationAngleDegree = 45;
rAxisLabelProperties.bLineBreakAllowed = false;
+ rAxisLabelProperties.eStaggering = SIDE_BY_SIDE;
m_aAxisLabelProperties.fRotationAngleDegree = rAxisLabelProperties.fRotationAngleDegree;
removeTextShapesFromTicks();
return false;