From 5d3dc5bf54c3e6d5f9b631c6cccfae7b7474bd3c Mon Sep 17 00:00:00 2001 From: oetiker Date: Tue, 9 Nov 2010 16:15:06 +0000 Subject: [PATCH] make sure we do not try to draw points all that far outside the drawing area since some versions of cairo seem to go unstable when this happens. -- Peter Stamfest git-svn-id: svn://svn.oetiker.ch/rrdtool/branches/1.4@2142 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_graph.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/program/src/rrd_graph.c b/program/src/rrd_graph.c index 5573e163..def9c9cc 100644 --- a/program/src/rrd_graph.c +++ b/program/src/rrd_graph.c @@ -3431,16 +3431,26 @@ int graph_paint( } break; case GF_LINE: - case GF_AREA: - /* fix data points at oo and -oo */ + case GF_AREA: { + rrd_value_t diffval = im->maxval - im->minval; + rrd_value_t maxlimit = im->maxval + 9 * diffval; + rrd_value_t minlimit = im->minval - 9 * diffval; for (ii = 0; ii < im->xsize; ii++) { + /* fix data points at oo and -oo */ if (isinf(im->gdes[i].p_data[ii])) { if (im->gdes[i].p_data[ii] > 0) { im->gdes[i].p_data[ii] = im->maxval; } else { im->gdes[i].p_data[ii] = im->minval; } - + } + /* some versions of cairo go unstable when trying + to draw way out of the canvas ... lets not even try */ + if (im->gdes[i].p_data[ii] > maxlimit) { + im->gdes[i].p_data[ii] = maxlimit; + } + if (im->gdes[i].p_data[ii] < minlimit) { + im->gdes[i].p_data[ii] = minlimit; } } /* for */ @@ -3667,6 +3677,7 @@ int graph_paint( } lastgdes = &(im->gdes[i]); break; + } /* GF_AREA, GF_LINE, GF_GRAD */ case GF_STACK: rrd_set_error ("STACK should already be turned into LINE or AREA here"); -- 2.30.2