]> git.tdb.fi Git - ext/subsurface.git/blobdiff - profile.c
fixed indentation
[ext/subsurface.git] / profile.c
index c7d945f14060d5f1e48052c89c01b1fe27ba1154..5e603f8984e22e08065b3e4056d4b6e00eade54e 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -168,9 +168,10 @@ static void dump_pi (struct plot_info *pi)
                pi->maxpressure, pi->mintemp, pi->maxtemp);
        for (i = 0; i < pi->nr; i++)
                printf("    entry[%d]:{same_cylinder:%d cylinderindex:%d sec:%d pressure:{%d,%d}\n"
-                       "                temperature:%d depth:%d smoothed:%d}\n",
+                       "                time:%d:%02d temperature:%d depth:%d smoothed:%d}\n",
                        i, pi->entry[i].same_cylinder, pi->entry[i].cylinderindex, pi->entry[i].sec,
                        pi->entry[i].pressure[0], pi->entry[i].pressure[1],
+                       pi->entry[i].sec / 60, pi->entry[i].sec % 60,
                        pi->entry[i].temperature, pi->entry[i].depth, pi->entry[i].smoothed);
        printf("   }\n");
 }
@@ -180,14 +181,21 @@ static void dump_pi (struct plot_info *pi)
  * current dive. However, we don't scale past less than
  * 30 minutes or 90 ft, just so that small dives show
  * up as such.
+ * If the dive time is shorter than 10 minutes we assume that
+ * this has been an apnea dive and display it accordingly.
  * we also need to add 180 seconds at the end so the min/max
  * plots correctly
  */
 static int get_maxtime(struct plot_info *pi)
 {
        int seconds = pi->maxtime;
-       /* min 30 minutes, rounded up to 5 minutes, with at least 2.5 minutes to spare */
-       return MAX(30*60, ROUND_UP(seconds+150, 60*5));
+       if (seconds < 600) {
+               /* Possible apnea dive, we scale accordingly */
+               return ROUND_UP(seconds+seconds/4, 60);
+       } else {
+               /* min 30 minutes, rounded up to 5 minutes, with at least 2.5 minutes to spare */
+               return MAX(30*60, ROUND_UP(seconds+150, 60*5));
+       }
 }
 
 static int get_maxdepth(struct plot_info *pi)
@@ -447,7 +455,14 @@ static void plot_depth_profile(struct graphics_context *gc, struct plot_info *pi
        /* Get plot scaling limits */
        maxtime = get_maxtime(pi);
        maxdepth = get_maxdepth(pi);
-
+       /* We check whether this has been an apnea dive and overwrite
+       * the increments in order to get reasonable time markers */
+       if (maxtime < 600) {
+               increments[0] = 10;
+               increments[1] = 20;
+               increments[2] = 30;
+               increments[3] = 60;
+       }
        /* Time markers: at most every 5 min, but no more than 12 markers
         * and for convenience we do 5, 10, 15 or 30 min intervals.
         * This allows for 6h dives - enough (I hope) for even the craziest
@@ -472,11 +487,17 @@ static void plot_depth_profile(struct graphics_context *gc, struct plot_info *pi
        }
        cairo_stroke(cr);
 
-       /* now the text on every second time marker */
+       /* now the text on the time markers */
        text_render_options_t tro = {10, TIME_TEXT, CENTER, TOP};
-       for (i = incr; i < maxtime; i += 2 * incr)
+       if (maxtime < 600) {
+               /* Be a bit more verbose with shorter (apnea) dives */
+               for (i = incr; i < maxtime; i += incr)
+               plot_text(gc, &tro, i, 1, "%d:%d", i/60, i%60);
+       } else {
+               /* Only render the time on every second marker for normal dives */
+               for (i = incr; i < maxtime; i += 2 * incr)
                plot_text(gc, &tro, i, 1, "%d", i/60);
-
+       }
        /* Depth markers: every 30 ft or 10 m*/
        gc->leftx = 0; gc->rightx = 1.0;
        gc->topy = 0; gc->bottomy = maxdepth;
@@ -528,15 +549,8 @@ static void plot_depth_profile(struct graphics_context *gc, struct plot_info *pi
        for (i = 0; i < pi->nr; i++, entry++)
                line_to(gc, entry->sec, entry->depth);
        cairo_close_path(gc->cr);
-/*
-       if (gc->printer) {
-               set_source_rgba(gc, DEPTH_FILL_PRINTER);
-               cairo_fill_preserve(cr);
-               set_source_rgba(gc, DEPTH_STROKE_PRINTER);
-               cairo_stroke(cr);
-               return;
-       }
-*/     cairo_fill(gc->cr);
+
+       cairo_fill(gc->cr);
 
        /* Now do it again for the velocity colors */
        entry = pi->entry;
@@ -1020,8 +1034,7 @@ static void dump_pr_track(pr_track_t **track_pr)
        }
 }
 
-static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
-                                       pr_track_t **track_pr)
+static void fill_missing_tank_pressures(struct plot_info *pi, pr_track_t **track_pr)
 {
        pr_track_t *list = NULL;
        pr_track_t *nlist = NULL;
@@ -1344,7 +1357,7 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str
        pi->meandepth = dive->meandepth.mm;
 
        if (missing_pr) {
-               fill_missing_tank_pressures(dive, pi, track_pr);
+               fill_missing_tank_pressures(pi, track_pr);
        }
        for (cyl = 0; cyl < MAX_CYLINDERS; cyl++)
                list_free(track_pr[cyl]);
@@ -1389,13 +1402,13 @@ void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, stru
        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);
-
        /* Depth profile */
        plot_depth_profile(gc, pi);
        plot_events(gc, pi, dive);
 
+       /* Temperature profile */
+       plot_temperature_profile(gc, pi);
+
        /* Cylinder pressure plot */
        plot_cylinder_pressure(gc, pi, dive);