mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
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 <dirk@hohndel.org> [ Changed to use 'last actual drawn sample time that had pressure data' instead of 'last sample time' - Linus ] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
f7a36cfefd
commit
d4db3e938b
1 changed files with 9 additions and 4 deletions
13
profile.c
13
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,
|
static void plot_cylinder_pressure(struct dive *dive, cairo_t *cr,
|
||||||
double topx, double topy, double maxx, double maxy)
|
double topx, double topy, double maxx, double maxy)
|
||||||
{
|
{
|
||||||
int i;
|
int i, sec = -1;
|
||||||
double scalex, scaley;
|
double scalex, scaley;
|
||||||
|
|
||||||
if (!get_cylinder_pressure_range(dive, &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));
|
cairo_move_to(cr, SCALE(0, dive->cylinder[0].start.mbar));
|
||||||
for (i = 1; i < dive->samples; i++) {
|
for (i = 1; i < dive->samples; i++) {
|
||||||
int sec, mbar;
|
int mbar;
|
||||||
struct sample *sample = dive->sample + i;
|
struct sample *sample = dive->sample + i;
|
||||||
|
|
||||||
sec = sample->time.seconds;
|
|
||||||
mbar = sample->cylinderpressure.mbar;
|
mbar = sample->cylinderpressure.mbar;
|
||||||
if (!mbar)
|
if (!mbar)
|
||||||
continue;
|
continue;
|
||||||
|
sec = sample->time.seconds;
|
||||||
cairo_line_to(cr, SCALE(sec, mbar));
|
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);
|
cairo_stroke(cr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue