chart2/qa/extras/chart2import.cxx          |   21 +++++++++++++++++
 chart2/qa/extras/data/xlsx/tdf133376.xlsx  |binary
 chart2/source/view/charttypes/PieChart.cxx |   35 +++++++++++++++++++++++++++++
 3 files changed, 56 insertions(+)

New commits:
commit 73477348e30c6931a537cba5557c250183fbeb9b
Author:     Balazs Varga <balazs.varga...@gmail.com>
AuthorDate: Tue May 26 14:13:00 2020 +0200
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Tue Jun 2 14:07:08 2020 +0200

    tdf#133376 Chart view: improve BestFit position of data labels
    
    Put exceeding data label outside the pie slice
    without overlapping the other pie slices.
    
    Change-Id: I220fd43f0d52c940cf3ef30764074776d19da184
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/94859
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/chart2/qa/extras/chart2import.cxx 
b/chart2/qa/extras/chart2import.cxx
index df324ee5e7a3..e47f1234ef60 100644
--- a/chart2/qa/extras/chart2import.cxx
+++ b/chart2/qa/extras/chart2import.cxx
@@ -159,6 +159,7 @@ public:
     void testTdf130032();
     void testTdf119138MissingAutoTitleDeleted();
     void testStockChartShiftedCategoryPosition();
+    void testTdf133376();
 
     CPPUNIT_TEST_SUITE(Chart2ImportTest);
     CPPUNIT_TEST(Fdo60083);
@@ -266,6 +267,7 @@ public:
     CPPUNIT_TEST(testTdf130032);
     CPPUNIT_TEST(testTdf119138MissingAutoTitleDeleted);
     CPPUNIT_TEST(testStockChartShiftedCategoryPosition);
+    CPPUNIT_TEST(testTdf133376);
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -2482,6 +2484,25 @@ void 
Chart2ImportTest::testStockChartShiftedCategoryPosition()
     CPPUNIT_ASSERT(aScaleData.ShiftedCategoryPosition);
 }
 
+void Chart2ImportTest::testTdf133376()
+{
+    load("/chart2/qa/extras/data/xlsx/", "tdf133376.xlsx");
+    Reference<chart::XChartDocument> xChartDoc(getChartDocFromSheet(0, 
mxComponent),
+        UNO_QUERY_THROW);
+
+    Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(xChartDoc, 
UNO_QUERY_THROW);
+    Reference<drawing::XDrawPage> xDrawPage(xDrawPageSupplier->getDrawPage(), 
UNO_SET_THROW);
+    Reference<drawing::XShapes> xShapes(xDrawPage->getByIndex(0), 
UNO_QUERY_THROW);
+    Reference<drawing::XShape> xDataPointLabel(getShapeByName(xShapes,
+        "CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"), 
UNO_SET_THROW);
+
+    CPPUNIT_ASSERT(xDataPointLabel.is());
+    // Check the position of the 3rd data point label, which is out from the 
pie slice
+    awt::Point aLabelPosition = xDataPointLabel->getPosition();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1466, aLabelPosition.X, 30);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(5269, aLabelPosition.Y, 30);
+}
+
 CPPUNIT_TEST_SUITE_REGISTRATION(Chart2ImportTest);
 
 CPPUNIT_PLUGIN_IMPLEMENT();
diff --git a/chart2/qa/extras/data/xlsx/tdf133376.xlsx 
b/chart2/qa/extras/data/xlsx/tdf133376.xlsx
new file mode 100644
index 000000000000..2000733ec8ba
Binary files /dev/null and b/chart2/qa/extras/data/xlsx/tdf133376.xlsx differ
diff --git a/chart2/source/view/charttypes/PieChart.cxx 
b/chart2/source/view/charttypes/PieChart.cxx
index 009552c1800f..03e928a85c23 100644
--- a/chart2/source/view/charttypes/PieChart.cxx
+++ b/chart2/source/view/charttypes/PieChart.cxx
@@ -1591,6 +1591,41 @@ void PieChart::performLabelBestFit(ShapeParam& 
rShapeParam, PieLabelInfo const &
     aTranslationVector.setLength(150);
     aScreenPosition2D.X += aTranslationVector.getX();
     aScreenPosition2D.Y += aTranslationVector.getY();
+
+    double fAngleDegree = rShapeParam.mfUnitCircleStartAngleDegree + 
rShapeParam.mfUnitCircleWidthAngleDegree / 2.0;
+    ::basegfx::B2IRectangle aBb(lcl_getRect(rPieLabelInfo.xLabelGroupShape));
+    double fLabelWidth = aBb.getWidth();
+    double fLabelHeight = aBb.getHeight();
+
+    while (fAngleDegree > 360.0)
+        fAngleDegree -= 360.0;
+    while (fAngleDegree < 0.0)
+        fAngleDegree += 360.0;
+
+    if( fAngleDegree <= 22.5 || fAngleDegree >= 337.5 )
+        aScreenPosition2D.Y -= fLabelHeight / 2;
+    else if( fAngleDegree < 67.5 )
+        aScreenPosition2D.Y -= fLabelHeight;
+    else if( fAngleDegree < 112.5 )
+    {
+        aScreenPosition2D.X -= fLabelWidth / 2;
+        aScreenPosition2D.Y -= fLabelHeight;
+    }
+    else if (fAngleDegree <= 157.5)
+    {
+        aScreenPosition2D.X -= fLabelWidth;
+        aScreenPosition2D.Y -= fLabelHeight;
+    }
+    else if (fAngleDegree <= 202.5)
+    {
+        aScreenPosition2D.X -= fLabelWidth;
+        aScreenPosition2D.Y -= fLabelHeight / 2;
+    }
+    else if (fAngleDegree < 247.5)
+        aScreenPosition2D.X -= fLabelWidth;
+    else if (fAngleDegree < 292.5)
+        aScreenPosition2D.X -= fLabelWidth / 2;
+
     rPieLabelInfo.xLabelGroupShape->setPosition(aScreenPosition2D);
 }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to