summaryrefslogtreecommitdiff
path: root/chart2/source/view/charttypes
diff options
context:
space:
mode:
authorBalazs Varga <balazs.varga991@gmail.com>2020-08-25 12:32:02 +0200
committerLászló Németh <nemeth@numbertext.org>2020-08-27 12:10:03 +0200
commit75a8b367f2a06e0d485fc2b9f4472e8bb29d71e3 (patch)
treebabccb4f46b654c14fd38f5406251fe2639ed7a1 /chart2/source/view/charttypes
parent636d16efe45a55c1a5a7a451c46fbb8618bf0393 (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.cxx15
-rw-r--r--chart2/source/view/charttypes/VSeriesPlotter.cxx1
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");
}