summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2018-11-29 19:11:58 +0100
committerAndras Timar <andras.timar@collabora.com>2019-01-17 13:39:59 +0100
commit58d05f5a28a5761c6ffb92bfc69beed307b8fd51 (patch)
tree0da85d07ed34c652b4146ace9bd889b3fd650d55 /chart2
parent7e011f03a8af07bddc868cf476c13f9fd87d1eb6 (diff)
tdf#42915, NaN in a date axis can destroy the whole chart
The NaN value forces the scaling of the axis to be based on years and introduces gaps in the rendering. Reviewed-on: https://gerrit.libreoffice.org/64267 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> related tdf#42915, pass NaN through date transformation Many places in chart2 use NaN to mean no available value. Not propagating NaN through the helper disables all this functionality. Reviewed-on: https://gerrit.libreoffice.org/64266 Tested-by: Jenkins Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Reviewed-on: https://gerrit.libreoffice.org/64304 (cherry picked from commit 55c5382591305a872b961d54571e3c823728ccb2) Reviewed-on: https://gerrit.libreoffice.org/64310 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 0a906dc78b575d696d402fb81900700e6e8e761e) Change-Id: I78219be289d76edb53b5672209e1c031ab62def9 37f966007b5b7cc16778c5c6903710fbd144631b
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/axes/DateHelper.cxx3
-rw-r--r--chart2/source/view/charttypes/AreaChart.cxx5
-rw-r--r--chart2/source/view/charttypes/VSeriesPlotter.cxx7
3 files changed, 15 insertions, 0 deletions
diff --git a/chart2/source/view/axes/DateHelper.cxx b/chart2/source/view/axes/DateHelper.cxx
index 046760436acd..dfe772e45f66 100644
--- a/chart2/source/view/axes/DateHelper.cxx
+++ b/chart2/source/view/axes/DateHelper.cxx
@@ -69,6 +69,9 @@ bool DateHelper::IsLessThanOneYearAway( const Date& rD1, const Date& rD2 )
double DateHelper::RasterizeDateValue( double fValue, const Date& rNullDate, long TimeResolution )
{
+ if (rtl::math::isNan(fValue))
+ return fValue;
+
Date aDate(rNullDate); aDate.AddDays(::rtl::math::approxFloor(fValue));
switch(TimeResolution)
{
diff --git a/chart2/source/view/charttypes/AreaChart.cxx b/chart2/source/view/charttypes/AreaChart.cxx
index d0bf32064738..19ce22a9119c 100644
--- a/chart2/source/view/charttypes/AreaChart.cxx
+++ b/chart2/source/view/charttypes/AreaChart.cxx
@@ -757,7 +757,12 @@ void AreaChart::createShapes()
//collect data point information (logic coordinates, style ):
double fLogicX = (*aSeriesIter)->getXValue(nIndex);
if (bDateCategory)
+ {
+ if (rtl::math::isNan(fLogicX))
+ continue;
+
fLogicX = DateHelper::RasterizeDateValue( fLogicX, m_aNullDate, m_nTimeResolution );
+ }
double fLogicY = (*aSeriesIter)->getYValue(nIndex);
if( m_nDimension==3 && m_bArea && rSeriesList.size()!=1 )
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index 6073aa126432..ec2e4c61afda 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -1462,10 +1462,17 @@ long VSeriesPlotter::calculateTimeResolutionOnXAxis()
aNullDate = m_apNumberFormatterWrapper->getNullDate();
if( aIt!=aEnd )
{
+ while (rtl::math::isNan(*aIt) && aIt != aEnd)
+ {
+ ++aIt;
+ }
Date aPrevious(aNullDate); aPrevious.AddDays(rtl::math::approxFloor(*aIt));
++aIt;
for(;aIt!=aEnd;++aIt)
{
+ if (rtl::math::isNan(*aIt))
+ continue;
+
Date aCurrent(aNullDate); aCurrent.AddDays(rtl::math::approxFloor(*aIt));
if( nRet == css::chart::TimeUnit::YEAR )
{