]> git.tdb.fi Git - ext/subsurface.git/blobdiff - profile.c
Remove unused variable
[ext/subsurface.git] / profile.c
index 706f60ba0d6fea984ca9c7bd73109ef6ed96aa7e..39db599cec7246245d6cb4f936dc206ec4f5eb8c 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -57,11 +57,13 @@ static int round_depth_up(depth_t depth)
 }
 
 typedef struct {
+       int size;
        double r,g,b;
-       enum {CENTER,LEFT} allign;
+       enum {CENTER,LEFT} halign;
+       enum {MIDDLE,TOP,BOTTOM} valign;
 } text_render_options_t;
 
-static void plot_text(struct graphics_context *gc, text_render_options_t *tro,
+static void plot_text(struct graphics_context *gc, const text_render_options_t *tro,
                      double x, double y, const char *fmt, ...)
 {
        cairo_t *cr = gc->cr;
@@ -74,11 +76,28 @@ static void plot_text(struct graphics_context *gc, text_render_options_t *tro,
        vsnprintf(buffer, sizeof(buffer), fmt, args);
        va_end(args);
 
+       cairo_set_font_size(cr, tro->size);
        cairo_text_extents(cr, buffer, &extents);
        dx = 0;
-       if (tro->allign == CENTER)
+       switch (tro->halign) {
+       case CENTER:
                dx = -(extents.width/2 + extents.x_bearing);
-       dy = extents.height * 1.2;
+               break;
+       case LEFT:
+               dx = 0;
+               break;
+       }
+       switch (tro->valign) {
+       case TOP:
+               dy = extents.height * 1.2;
+               break;
+       case BOTTOM:
+               dy = -extents.height * 0.8;
+               break;
+       case MIDDLE:
+               dy = 0;
+               break;
+       }
 
        move_to(gc, x, y);
        cairo_rel_move_to(cr, dx, dy);
@@ -94,8 +113,28 @@ static void plot_text(struct graphics_context *gc, text_render_options_t *tro,
        cairo_show_text(cr, buffer);
 }
 
+static void render_depth_sample(struct graphics_context *gc, struct sample *sample, const text_render_options_t *tro)
+{
+       int sec = sample->time.seconds;
+       depth_t depth = sample->depth;
+       const char *fmt;
+       double d;
+
+       switch (output_units.length) {
+       case METERS:
+               d = depth.mm / 1000.0;
+               fmt = "%.1f";
+               break;
+       case FEET:
+               d = to_feet(depth);
+               fmt = "%.0f";
+               break;
+       }
+       plot_text(gc, tro, sec, depth.mm, fmt, d);
+}
+
 /*
- * Find the next maximum point in a 10-minute window.
+ * Find the next minimum/maximum point.
  *
  * We exit early if we hit "enough" of a depth reversal,
  * which is roughly 10 feet.
@@ -113,12 +152,11 @@ static struct sample *next_minmax(struct sample *sample, struct sample *end, int
        result = NULL;
 
        for (;;) {
-               int time, depth;
+               int depth;
 
                sample++;
                if (sample >= end)
                        return NULL;
-               time = sample->time.seconds;
                depth = sample->depth.mm;
 
                if (minmax) {
@@ -141,44 +179,24 @@ static struct sample *next_minmax(struct sample *sample, struct sample *end, int
        return result;
 }
 
-static void render_depth_sample(struct graphics_context *gc, struct sample *sample)
-{
-       text_render_options_t tro = {1.0, 0.2, 0.2, CENTER};
-       int sec = sample->time.seconds;
-       depth_t depth = sample->depth;
-       const char *fmt;
-       double d;
-
-       switch (output_units.length) {
-       case METERS:
-               d = depth.mm / 1000.0;
-               fmt = "%.1f";
-               break;
-       case FEET:
-               d = to_feet(depth);
-               fmt = "%.0f";
-               break;
-       }
-       plot_text(gc, &tro, sec, depth.mm, fmt, d);
-}
-
 static void plot_text_samples(struct graphics_context *gc, struct sample *a, struct sample *b)
 {
-       struct sample *max, *min;
+       static const text_render_options_t deep = {14, 1.0, 0.2, 0.2, CENTER, TOP};
+       static const text_render_options_t shallow = {14, 1.0, 0.2, 0.2, CENTER, BOTTOM};
 
-       if (b <= a)
-               return;
-       if (b[-1].time.seconds - a->time.seconds < 3*60)
-               return;
-
-       max = next_minmax(a, b, 1);
-       if (max) {
-               render_depth_sample(gc, max);
-               min = next_minmax(max, b, 0);
-               if (min) {
-                       plot_text_samples(gc, min, b);
-                       return;
-               }
+       for (;;) {
+               if (b <= a)
+                       break;
+               a = next_minmax(a, b, 1);
+               if (!a)
+                       break;
+               render_depth_sample(gc, a, &deep);
+               a = next_minmax(a, b, 0);
+               if (!a)
+                       break;
+               if (a->depth.mm < 2500)
+                       continue;
+               render_depth_sample(gc, a, &shallow);
        }
 }
 
@@ -194,8 +212,6 @@ static void plot_depth_text(struct dive *dive, struct graphics_context *gc)
        gc->scalex = maxtime;
        gc->scaley = maxdepth;
 
-       cairo_set_font_size(gc->cr, 14);
-
        sample = dive->sample;
        end = dive->sample + dive->samples;
 
@@ -368,7 +384,7 @@ static double calculate_airuse(struct dive *dive)
 
 static void plot_info(struct dive *dive, struct graphics_context *gc)
 {
-       text_render_options_t tro = {0.2, 1.0, 0.2, LEFT};
+       text_render_options_t tro = {10, 0.2, 1.0, 0.2, LEFT, TOP};
        const double liters_per_cuft = 28.317;
        const char *unit;
        double airuse;
@@ -399,8 +415,6 @@ static void plot_cylinder_pressure_text(struct dive *dive, struct graphics_conte
 {
        pressure_t startp, endp;
 
-       cairo_set_font_size(gc->cr, 10);
-
        if (get_cylinder_pressure_range(dive, gc, &startp, &endp)) {
                int start, end;
                const char *unit = "bar";
@@ -423,7 +437,7 @@ static void plot_cylinder_pressure_text(struct dive *dive, struct graphics_conte
                        break;
                }
 
-               text_render_options_t tro = {0.2, 1.0, 0.2, LEFT};
+               text_render_options_t tro = {10, 0.2, 1.0, 0.2, LEFT, TOP};
                plot_text(gc, &tro, 0, startp.mbar, "%d %s", start, unit);
                plot_text(gc, &tro, dive->duration.seconds, endp.mbar,
                          "%d %s", end, unit);