From: Dirk Hohndel Date: Tue, 6 Sep 2011 14:30:48 +0000 (-0700) Subject: Fix drawing artifact with UEMIS xml data X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=d4db3e938b16c67d20a40833323f64ca5d0024f2;p=ext%2Fsubsurface.git Fix drawing artifact with UEMIS xml data Only draw the pressure line to the final data point (duration / end.mbar) if we haven't already drawn samples past that point (as the UEMIS records pressure data for a number of additional samples after the actual dive has ended) Signed-off-by: Dirk Hohndel [ Changed to use 'last actual drawn sample time that had pressure data' instead of 'last sample time' - Linus ] Signed-off-by: Linus Torvalds --- diff --git a/profile.c b/profile.c index 032bbd2..107f80b 100644 --- a/profile.c +++ b/profile.c @@ -127,7 +127,7 @@ static int get_cylinder_pressure_range(struct dive *dive, double *scalex, double static void plot_cylinder_pressure(struct dive *dive, cairo_t *cr, double topx, double topy, double maxx, double maxy) { - int i; + int i, sec = -1; double scalex, scaley; if (!get_cylinder_pressure_range(dive, &scalex, &scaley)) @@ -137,16 +137,21 @@ static void plot_cylinder_pressure(struct dive *dive, cairo_t *cr, cairo_move_to(cr, SCALE(0, dive->cylinder[0].start.mbar)); for (i = 1; i < dive->samples; i++) { - int sec, mbar; + int mbar; struct sample *sample = dive->sample + i; - sec = sample->time.seconds; mbar = sample->cylinderpressure.mbar; if (!mbar) continue; + sec = sample->time.seconds; cairo_line_to(cr, SCALE(sec, mbar)); } - cairo_line_to(cr, SCALE(dive->duration.seconds, dive->cylinder[0].end.mbar)); + /* + * We may have "surface time" events, in which case we don't go + * back to dive duration + */ + if (sec < dive->duration.seconds) + cairo_line_to(cr, SCALE(dive->duration.seconds, dive->cylinder[0].end.mbar)); cairo_stroke(cr); }