X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=profile.c;h=39db599cec7246245d6cb4f936dc206ec4f5eb8c;hb=30d228f104b5f1eb2c8354460b19e0b367d899ee;hp=c2433930fe7c4c49aa1ced4f4f1a37fc65a2f2e4;hpb=75f784267521e2a02c0c84ab4fe05c105dfc68f5;p=ext%2Fsubsurface.git diff --git a/profile.c b/profile.c index c243393..39db599 100644 --- a/profile.c +++ b/profile.c @@ -63,7 +63,7 @@ typedef struct { 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; @@ -113,6 +113,26 @@ 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 minimum/maximum point. * @@ -132,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) { @@ -160,39 +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 = {14, 1.0, 0.2, 0.2, CENTER, TOP}; - 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) { + 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}; + for (;;) { if (b <= a) break; a = next_minmax(a, b, 1); if (!a) - return; - render_depth_sample(gc, 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); } }