From: oetiker Date: Tue, 9 Nov 2010 16:15:06 +0000 (+0000) Subject: make sure we do not try to draw points all that far outside the drawing area X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=d395cf9dd2a1db1dba29f52ff0cfa2cac36535ca;p=rrdtool.git 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/program@2142 a5681a0c-68f1-0310-ab6d-d61299d08faa --- diff --git a/src/rrd_graph.c b/src/rrd_graph.c index 5573e16..def9c9c 100644 --- a/src/rrd_graph.c +++ b/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");