X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=profile.c;h=6f19902026e48bef55fcfec7c14b6e16cb759ce9;hb=b72ade0e78825dd97add4c7607c574df351abed0;hp=2edaf694cd5f429387d5e3cba08f32c7fd3aeda8;hpb=ab3c6731bea1043e35d450b227fc2f41e137c397;p=ext%2Fsubsurface.git diff --git a/profile.c b/profile.c index 2edaf69..6f19902 100644 --- a/profile.c +++ b/profile.c @@ -22,6 +22,7 @@ struct plot_info { int maxtime; int meandepth, maxdepth; int minpressure, maxpressure; + int endpressure; /* start pressure better be max pressure */ int mintemp, maxtemp; struct plot_data { int sec; @@ -471,6 +472,7 @@ static int get_cylinder_pressure_range(struct graphics_context *gc, struct plot_ static void plot_cylinder_pressure(struct graphics_context *gc, struct plot_info *pi) { int i; + int have_pressure = FALSE; if (!get_cylinder_pressure_range(gc, pi)) return; @@ -485,9 +487,15 @@ static void plot_cylinder_pressure(struct graphics_context *gc, struct plot_info mbar = entry->pressure; if (!mbar) continue; + have_pressure = TRUE; line_to(gc, entry->sec, mbar); } - line_to(gc, pi->maxtime, pi->minpressure); + /* if we have valid samples, we don't want to draw a line to the minpressure + * but just end wherever the dive ended (think valve shutdowns during dive) + * but that doesn't work so well if we have only max and min + */ + if (! have_pressure) + line_to(gc, pi->maxtime, pi->minpressure); cairo_stroke(gc->cr); } @@ -506,24 +514,24 @@ static void plot_cylinder_pressure_text(struct graphics_context *gc, struct plot switch (output_units.pressure) { case PASCAL: start = pi->maxpressure * 100; - end = pi->minpressure * 100; + end = pi->endpressure * 100; unit = "pascal"; break; case BAR: start = (pi->maxpressure + 500) / 1000; - end = (pi->minpressure + 500) / 1000; + end = (pi->endpressure + 500) / 1000; unit = "bar"; break; case PSI: start = mbar_to_PSI(pi->maxpressure); - end = mbar_to_PSI(pi->minpressure); + end = mbar_to_PSI(pi->endpressure); unit = "psi"; break; } text_render_options_t tro = {10, 0.2, 1.0, 0.2, LEFT, TOP}; plot_text(gc, &tro, 0, pi->maxpressure, "%d %s", start, unit); - plot_text(gc, &tro, pi->maxtime, pi->minpressure, + plot_text(gc, &tro, pi->maxtime, pi->endpressure, "%d %s", end, unit); } } @@ -706,7 +714,7 @@ static struct plot_info *create_plot_info(struct dive *dive) pi->nr = lastindex+1; pi->maxtime = pi->entry[lastindex].sec; - pi->minpressure = dive->cylinder[0].end.mbar; + pi->endpressure = pi->minpressure = dive->cylinder[0].end.mbar; pi->maxpressure = dive->cylinder[0].start.mbar; pi->meandepth = dive->meandepth.mm; @@ -714,14 +722,11 @@ static struct plot_info *create_plot_info(struct dive *dive) return analyze_plot_info(pi); } -void plot(struct graphics_context *gc, int w, int h, struct dive *dive) +void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, struct dive *dive) { - double topx, topy; struct plot_info *pi = create_plot_info(dive); - topx = w / 20.0; - topy = h / 20.0; - cairo_translate(gc->cr, topx, topy); + cairo_translate(gc->cr, drawing_area->x, drawing_area->y); cairo_set_line_width(gc->cr, 2); cairo_set_line_cap(gc->cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join(gc->cr, CAIRO_LINE_JOIN_ROUND); @@ -733,8 +738,8 @@ void plot(struct graphics_context *gc, int w, int h, struct dive *dive) * * Snif. What a pity. */ - gc->maxx = (w - 2*topx); - gc->maxy = (h - 2*topy); + gc->maxx = (drawing_area->width - 2*drawing_area->x); + gc->maxy = (drawing_area->height - 2*drawing_area->y); /* Temperature profile */ plot_temperature_profile(gc, pi);