summaryrefslogtreecommitdiffstats
path: root/chart2
diff options
context:
space:
mode:
authorMuthu Subramanian <sumuthu@suse.com>2013-01-08 12:40:45 +0530
committerAndras Timar <atimar@suse.com>2013-01-21 12:49:53 +0100
commit6a985438f7263e8d9fa84925520bcefecafb8b2f (patch)
tree9c7df58c74a471fc9f87da876f283f5a4f2c957d /chart2
parentfix cell border line properties n#793408 (diff)
downloadcore-6a985438f7263e8d9fa84925520bcefecafb8b2f.tar.gz
core-6a985438f7263e8d9fa84925520bcefecafb8b2f.zip
n#791985: Automatically rotate chart labels (if overlapping).
This bug fixes two issues: * Overlap detection seems to be approximate and doesn't work for rotated text. Added a workaround for labels rotated at angles 45-135 and 225-315. * Auto rotate labels, which overlap. This is done only for labels having zero degrees rotate. For forcing angles, use 'enable overlap' or non-zero angles (1 degree). Of course, zero degrees plus skipping of labels would no longer occur. Better solutions?
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/axes/VCartesianAxis.cxx16
1 files changed, 15 insertions, 1 deletions
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx
index b75e12d823cc..0b948811da07 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -150,6 +150,11 @@ bool doesOverlap( const Reference< drawing::XShape >& xShape1
if( !xShape1.is() || !xShape2.is() )
return false;
+ sal_Int32 nAngle = abs(fRotationAngleDegree);
+
+ if( ( nAngle >= 45 && nAngle <= 135 ) || ( nAngle >= 225 && nAngle <= 315 ) )
+ return 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);
@@ -665,7 +670,7 @@ bool VCartesianAxis::createTextShapes(
pPREPreviousVisibleTickInfo : pPreviousVisibleTickInfo;
//don't create labels which does not fit into the rhythm
- if( nTick%rAxisLabelProperties.nRhythm != 0)
+ if( nTick%rAxisLabelProperties.nRhythm != 0 )
continue;
//don't create labels for invisible ticks
@@ -779,6 +784,15 @@ bool VCartesianAxis::createTextShapes(
}
if( bOverlapAlsoAfterSwitchingOnAutoStaggering )
{
+ /* Try auto-rotating to 45 degrees */
+ if( !rAxisLabelProperties.bOverlapAllowed && ::rtl::math::approxEqual( rAxisLabelProperties.fRotationAngleDegree, 0.0 ) )
+ {
+ rAxisLabelProperties.fRotationAngleDegree = 45;
+ rAxisLabelProperties.bLineBreakAllowed = false;
+ m_aAxisLabelProperties.fRotationAngleDegree = rAxisLabelProperties.fRotationAngleDegree;
+ removeTextShapesFromTicks();
+ return false;
+ }
if( rAxisLabelProperties.bRhythmIsFix )
{
xTarget->remove(pTickInfo->xTextShape);