diff options
author | Balazs Varga <balazs.varga991@gmail.com> | 2020-08-25 12:32:02 +0200 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2020-08-27 12:10:03 +0200 |
commit | 75a8b367f2a06e0d485fc2b9f4472e8bb29d71e3 (patch) | |
tree | babccb4f46b654c14fd38f5406251fe2639ed7a1 /chart2/source/view/charttypes | |
parent | 636d16efe45a55c1a5a7a451c46fbb8618bf0393 (diff) |
tdf#136105 tdf#134883 pie chart: improve data label position
Set the maximum text width of data point label shape based
on the remaining space, when text wrapping is enabled and
the label placement is OUTSIDE.
Change-Id: I9132658e44886000c692efadaee4841c4d3ffc7b
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101317
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'chart2/source/view/charttypes')
-rw-r--r-- | chart2/source/view/charttypes/PieChart.cxx | 15 | ||||
-rw-r--r-- | chart2/source/view/charttypes/VSeriesPlotter.cxx | 1 |
2 files changed, 16 insertions, 0 deletions
diff --git a/chart2/source/view/charttypes/PieChart.cxx b/chart2/source/view/charttypes/PieChart.cxx index 5ab60729cf93..000a3f4a8a90 100644 --- a/chart2/source/view/charttypes/PieChart.cxx +++ b/chart2/source/view/charttypes/PieChart.cxx @@ -350,6 +350,21 @@ void PieChart::createTextLabelShape( // set the maximum text width to be used when text wrapping is enabled double fTextMaximumFrameWidth = 0.8 * fPieRadius; + if( nLabelPlacement == css::chart::DataLabelPlacement::OUTSIDE && m_aAvailableOuterRect.getWidth() ) + { + double fAngleDegree = rParam.mfUnitCircleStartAngleDegree + rParam.mfUnitCircleWidthAngleDegree / 2.0; + while (fAngleDegree > 360.0) + fAngleDegree -= 360.0; + while (fAngleDegree < 0.0) + fAngleDegree += 360.0; + + if (fAngleDegree < 67.5 || fAngleDegree >= 292.5) + fTextMaximumFrameWidth = m_aAvailableOuterRect.getMaxX() - aPieLabelInfo.aFirstPosition.getX(); + else if (fAngleDegree < 112.5 || fAngleDegree >= 247.5) + fTextMaximumFrameWidth = m_aAvailableOuterRect.getWidth(); + else + fTextMaximumFrameWidth = aPieLabelInfo.aFirstPosition.getX() - m_aAvailableOuterRect.getMinX(); + } sal_Int32 nTextMaximumFrameWidth = ceil(fTextMaximumFrameWidth); ///the text shape for the label is created diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx index 8f7dcbb59a1d..232e86369f1d 100644 --- a/chart2/source/view/charttypes/VSeriesPlotter.cxx +++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx @@ -151,6 +151,7 @@ VSeriesPlotter::VSeriesPlotter( const uno::Reference<XChartType>& xChartTypeMode , m_pExplicitCategoriesProvider(nullptr) , m_bPointsWereSkipped(false) , m_bPieLabelsAllowToMove(false) + , m_aAvailableOuterRect(0, 0, 0, 0) { SAL_WARN_IF(!m_xChartTypeModel.is(),"chart2","no XChartType available in view, fallback to default values may be wrong"); } |