chart2/source/view/charttypes/PieChart.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
New commits: commit d44e12f1f77514059375e6da3f981a992ff7de7e Author: Dennis Francis <dennis.fran...@collabora.co.uk> Date: Mon Aug 21 13:59:41 2017 +0530 tdf#62363: When pie chart sector is too small do "Outside" placement ...of its label when "Best fit" label placement setting is used. Change-Id: Id201d922505de0e134286f4772abe282bb0722bc Reviewed-on: https://gerrit.libreoffice.org/41572 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> (cherry picked from commit 8c8edfabdee656ac5a9a0b1106f90baf315f1dd4) Reviewed-on: https://gerrit.libreoffice.org/41622 diff --git a/chart2/source/view/charttypes/PieChart.cxx b/chart2/source/view/charttypes/PieChart.cxx index f3b854ee8707..98fffc60e430 100644 --- a/chart2/source/view/charttypes/PieChart.cxx +++ b/chart2/source/view/charttypes/PieChart.cxx @@ -288,14 +288,23 @@ void PieChart::createTextLabelShape( ///the label position is allowed; the `createTextLabelShape` treats the ///`AVOID_OVERLAP` as if it was of `CENTER` type; + double nVal = rSeries.getYValue(nPointIndex); //AVOID_OVERLAP is in fact "Best fit" in the UI. bool bMovementAllowed = ( nLabelPlacement == css::chart::DataLabelPlacement::AVOID_OVERLAP ); if( bMovementAllowed ) + { // Use center for "Best fit" for now. In the future we // may want to implement a real best fit algorithm. // But center is good enough, and close to what Excel // does. - nLabelPlacement = css::chart::DataLabelPlacement::CENTER; + + // Place the label outside if the sector is too small + // The threshold is set to 2%, but can be improved by making it a function of + // label width and radius too ? + double fFrac = fabs( nVal / rParam.mfLogicYSum ); + nLabelPlacement = ( fFrac <= 0.02 ) ? css::chart::DataLabelPlacement::OUTSIDE : + css::chart::DataLabelPlacement::CENTER; + } ///for `OUTSIDE` (`INSIDE`) label placements an offset of 150 (-150), in the ///radius direction, is added to the final screen position of the label @@ -354,7 +363,6 @@ void PieChart::createTextLabelShape( sal_Int32 nTextMaximumFrameWidth = ceil(fTextMaximumFrameWidth); ///the text shape for the label is created - double nVal = rSeries.getYValue(nPointIndex); aPieLabelInfo.xTextShape = createDataLabel( xTextTarget, rSeries, nPointIndex, nVal, rParam.mfLogicYSum, aScreenPosition2D, eAlignment, 0, nTextMaximumFrameWidth); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits