summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJochen Nitschke <j.nitschke+logerrit@ok.de>2016-06-05 22:45:43 +0200
committerJochen Nitschke <j.nitschke+logerrit@ok.de>2016-06-11 10:24:57 +0000
commit99226f343e4ad9ebcbb4e31c17d3fb706153e18b (patch)
treee54430f4e6525b12ae9a5d9fb251bebd495fb421
parentffac8e3a483c84de2961784fceac2b21aa39a18c (diff)
try auto rotate tick labels only when useful tdf#99883
By default we try to fit as many tick labels as possible on an axis. One way is (auto) rotating the labels at 45 degrees. But rotating only works for horizontal axes with horizontal text or vertical axes with vertical text, else rotated tick labels need more space. Join the check for this prerequisite with isAutoStaggeringOfLabelsAllowed. while here make isAutoStaggeringOfLabelsAllowed local and wrap stuff in anonymous namespaces Change-Id: I5784d0e5aa42ff90927e19d0bd2c6fed488d39f4 Reviewed-on: https://gerrit.libreoffice.org/25792 Reviewed-by: Jochen Nitschke <j.nitschke+logerrit@ok.de> Tested-by: Jochen Nitschke <j.nitschke+logerrit@ok.de>
-rw-r--r--chart2/source/view/axes/VCartesianAxis.cxx34
-rw-r--r--chart2/source/view/axes/VCartesianAxis.hxx7
2 files changed, 24 insertions, 17 deletions
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx
index 59a497208f52..97912a5cb349 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -497,20 +497,21 @@ bool VCartesianAxis::isBreakOfLabelsAllowed(
//break only for horizontal axis
return bIsHorizontalAxis;
}
+namespace{
-bool VCartesianAxis::isAutoStaggeringOfLabelsAllowed(
- const AxisLabelProperties& rAxisLabelProperties, bool bIsHorizontalAxis, bool bIsVerticalAxis )
+bool canAutoAdjustLabelPlacement(
+ const AxisLabelProperties& rAxisLabelProperties, bool bIsHorizontalAxis, bool bIsVerticalAxis)
{
- if( rAxisLabelProperties.eStaggering != STAGGER_AUTO )
- return false;
+ // joined prerequisite checks for auto rotate and auto stagger
if( rAxisLabelProperties.bOverlapAllowed )
return false;
- if( rAxisLabelProperties.bLineBreakAllowed ) //auto line break or auto staggering, doing both automatisms they may conflict...
+ if( rAxisLabelProperties.bLineBreakAllowed ) // auto line break may conflict with...
return false;
if( !::rtl::math::approxEqual( rAxisLabelProperties.fRotationAngleDegree, 0.0 ) )
return false;
- //automatic staggering only for horizontal axis with horizontal text
- //or vertical axis with vertical text
+ // automatic adjusting labels only works for
+ // horizontal axis with horizontal text
+ // or vertical axis with vertical text
if( bIsHorizontalAxis )
return !rAxisLabelProperties.bStackCharacters;
if( bIsVerticalAxis )
@@ -518,6 +519,18 @@ bool VCartesianAxis::isAutoStaggeringOfLabelsAllowed(
return false;
}
+bool isAutoStaggeringOfLabelsAllowed(
+ const AxisLabelProperties& rAxisLabelProperties, bool bIsHorizontalAxis, bool bIsVerticalAxis )
+{
+ if( rAxisLabelProperties.eStaggering != STAGGER_AUTO )
+ return false;
+ return canAutoAdjustLabelPlacement(rAxisLabelProperties, bIsHorizontalAxis, bIsVerticalAxis);
+}
+
+// make clear that we check for auto rotation prerequisites
+const auto& isAutoRotatingOfLabelsAllowed = canAutoAdjustLabelPlacement;
+
+} // namespace
void VCartesianAxis::createAllTickInfosFromComplexCategories( TickInfoArraysType& rAllTickInfos, bool bShiftedPosition )
{
//no minor tickmarks will be generated!
@@ -827,7 +840,8 @@ bool VCartesianAxis::createTextShapes(
{
// Compatibility option: starting from LibreOffice 5.1 the rotated
// layout is preferred to staggering for axis labels.
- if( m_aAxisProperties.m_bTryStaggeringFirst || !(::rtl::math::approxEqual( rAxisLabelProperties.fRotationAngleDegree, 0.0 ) ) )
+ if( !isAutoRotatingOfLabelsAllowed(rAxisLabelProperties, bIsHorizontalAxis, bIsVerticalAxis)
+ || m_aAxisProperties.m_bTryStaggeringFirst )
{
bIsStaggered = true;
rAxisLabelProperties.eStaggering = STAGGER_EVEN;
@@ -844,7 +858,7 @@ bool VCartesianAxis::createTextShapes(
if (bOverlapsAfterAutoStagger)
{
// Staggering didn't solve the overlap.
- if( !rAxisLabelProperties.bOverlapAllowed && ::rtl::math::approxEqual( rAxisLabelProperties.fRotationAngleDegree, 0.0 ) )
+ if( isAutoRotatingOfLabelsAllowed(rAxisLabelProperties, bIsHorizontalAxis, bIsVerticalAxis) )
{
// Try auto-rotating the labels at 45 degrees and
// start over. This rotation angle will be stored for
@@ -986,7 +1000,7 @@ bool VCartesianAxis::createTextShapesSimple(
if( doesOverlap( pLastVisibleNeighbourTickInfo->xTextShape, pTickInfo->xTextShape, rAxisLabelProperties.fRotationAngleDegree ) )
{
// It overlaps.
- if( !rAxisLabelProperties.bOverlapAllowed && ::rtl::math::approxEqual( rAxisLabelProperties.fRotationAngleDegree, 0.0 ) )
+ if( isAutoRotatingOfLabelsAllowed(rAxisLabelProperties, bIsHorizontalAxis, bIsVerticalAxis) )
{
// Try auto-rotating the labels at 45 degrees and
// start over. This rotation angle will be stored for
diff --git a/chart2/source/view/axes/VCartesianAxis.hxx b/chart2/source/view/axes/VCartesianAxis.hxx
index 8ba89a455380..61c14d4f5473 100644
--- a/chart2/source/view/axes/VCartesianAxis.hxx
+++ b/chart2/source/view/axes/VCartesianAxis.hxx
@@ -147,13 +147,6 @@ private: //methods
, TickFactory2D* pTickFactory2D );
/**
- * @return true if we can try to stagger labels in order to avoid
- * overlaps, otherwise false.
- */
- static bool isAutoStaggeringOfLabelsAllowed(
- const AxisLabelProperties& rAxisLabelProperties, bool bIsHorizontalAxis, bool bIsVerticalAxis );
-
- /**
* @return true if we can break a single line label text into multiple
* lines for better fitting, otherwise false.
*/