tdf#50934: Improvements to fill color for of-pie composite wedge
Change-Id: Ib9f7e3b135bb86e1817edf97b963e3620af7fdf2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/160730
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/chart2/source/view/charttypes/PieChart.cxx b/chart2/source/view/charttypes/PieChart.cxx
index c3d36cd..a946616 100644
--- a/chart2/source/view/charttypes/PieChart.cxx
+++ b/chart2/source/view/charttypes/PieChart.cxx
@@ -227,7 +227,6 @@ PieChart::~PieChart()
void PieChart::setScales( std::vector< ExplicitScaleData >&& rScales, bool /* bSwapXAndYAxis */ )
{
OSL_ENSURE(m_nDimension<=static_cast<sal_Int32>(rScales.size()),"Dimension of Plotter does not fit two dimension of given scale sequence");
m_aCartesianScales = m_pPosHelper->getScales();
m_aPosHelper.setScales( std::move(rScales), true );
}
@@ -1104,17 +1103,23 @@ void PieChart::createOneRing([[maybe_unused]]enum SubPieType eType,
xPointProperties, aParam, nRingPtCnt,
bConcentricExplosion);
// Handle coloring of the composite wedge
sal_Int32 nEnd = pDataSrc->getNPoints(pSeries, eType);
const sal_Int32 nPropIdx = (
eType == SubPieType::LEFT && nPointIndex == nEnd - 1 ?
pSeries->getTotalPointCount() :
nPointIndex);
///point color:
if (!pSeries->hasPointOwnColor(nPointIndex) && m_xColorScheme.is())
{
xPointShape->setPropertyValue("FillColor",
uno::Any(m_xColorScheme->getColorByIndex( nPointIndex )));
uno::Any(m_xColorScheme->getColorByIndex( nPropIdx )));
}
if(bHasFillColorMapping)
{
double nPropVal = pSeries->getValueByProperty(nPointIndex, "FillColor");
double nPropVal = pSeries->getValueByProperty(nPropIdx, "FillColor");
if(!std::isnan(nPropVal))
{
xPointShape->setPropertyValue("FillColor", uno::Any(static_cast<sal_Int32>( nPropVal)));
@@ -2106,16 +2111,16 @@ uno::Reference< beans::XPropertySet > OfPieDataSrc::getProps(
const VDataSeries* pSeries, sal_Int32 nPtIdx,
enum SubPieType eType) const
{
const sal_Int32 n = pSeries->getTotalPointCount() - 3;
const sal_Int32 nPts = pSeries->getTotalPointCount();
const sal_Int32 n = nPts - 3;
if (eType == SubPieType::LEFT) {
// nPtIdx should be in [0, n]
if (nPtIdx < n) {
return pSeries->getPropertiesOfPoint( nPtIdx );
} else {
assert(nPtIdx == n);
// The aggregated wedge
// Not sure what to do here, but this isn't right. TODO
return pSeries->getPropertiesOfPoint(n);
assert(nPtIdx == n);
return pSeries->getPropertiesOfPoint(nPts);
}
} else {
assert(eType == SubPieType::RIGHT);