chart2/source/view/charttypes/PieChart.cxx |   13 +++++++++++--
 chart2/source/view/charttypes/PieChart.hxx |    7 +++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

New commits:
commit dfacc5a522a7458646f4ec42b9fc58c1f3fdb0a8
Author:     Kurt Nordback <kurt.nordb...@protonmail.com>
AuthorDate: Thu Dec 7 06:47:50 2023 -0700
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Feb 19 07:57:44 2024 +0100

    tdf#50934: Try to fix wedge ordering for imported of-pie charts
    
    Change-Id: I6e9a0d5426fb213c99ee99092596f68d688b928c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160736
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/view/charttypes/PieChart.cxx 
b/chart2/source/view/charttypes/PieChart.cxx
index 402857b85cdc..61583c9d477a 100644
--- a/chart2/source/view/charttypes/PieChart.cxx
+++ b/chart2/source/view/charttypes/PieChart.cxx
@@ -178,6 +178,14 @@ bool PiePositionHelper::getInnerAndOuterRadius( double 
fCategoryX
     return true;
 }
 
+
+bool PiePositionHelper::clockwiseWedges() const
+{
+    const ExplicitScaleData& rAngleScale = m_bSwapXAndY ? m_aScales[1] : 
m_aScales[0];
+    return rAngleScale.Orientation == AxisOrientation_MATHEMATICAL;
+}
+
+
 PieChart::PieChart( const rtl::Reference<ChartType>& xChartTypeModel
                    , sal_Int32 nDimensionCount
                    , bool bExcludingPositioning )
@@ -1087,8 +1095,9 @@ void PieChart::createOneRing([[maybe_unused]]enum 
SubPieType eType,
             // Left of-pie has the "composite" wedge (the one expanded in the 
right
             // subgraph) facing to the right in the chart, to allow the 
expansion
             // lines to meet it
-            double compositeVal = pDataSrc->getData(pSeries, nRingPtCnt - 1, 
eType);
-            return compositeVal * 360 / (ringSum * 2);
+            const double compositeVal = pDataSrc->getData(pSeries, nRingPtCnt 
- 1, eType);
+            const double degAng = compositeVal * 360 / (ringSum * 2);
+            return m_aPosHelper.clockwiseWedges() ? 360 - degAng : degAng;
         } else {
             /// The angle degree offset is set by the same property of the
             /// data series.
diff --git a/chart2/source/view/charttypes/PieChart.hxx 
b/chart2/source/view/charttypes/PieChart.hxx
index a3e4519ead8c..abcf1cc2db9b 100644
--- a/chart2/source/view/charttypes/PieChart.hxx
+++ b/chart2/source/view/charttypes/PieChart.hxx
@@ -39,6 +39,10 @@ public:
 
     bool    getInnerAndOuterRadius( double fCategoryX, double& 
fLogicInnerRadius, double& fLogicOuterRadius, bool bUseRings, double fMaxOffset 
) const;
 
+    // Determine if the pie wedges are ordered clockwise (returns true) or
+    // counterclockwise (returns false)
+    bool    clockwiseWedges() const;
+
 public:
     //Distance between different category rings, seen relative to width of a 
ring:
     double  m_fRingDistance; //>=0 m_fRingDistance=1 --> distance == width
@@ -222,6 +226,9 @@ struct PieLabelInfo;
             sal_Int32 n3DRelativeHeight);
 
 private: //member
+    // Constants for of-pie charts. Some of these will want to become
+    // user-selectable values. TODO
+
     // Radius scalings for left and right of-pie subcharts
     static constexpr double m_fLeftScale = 2.0/3;
     static constexpr double m_fRightScale = 1.0/3;

Reply via email to