X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=profile.c;h=9d84ff29d64de926983555be28660abcef2786dc;hb=f7fb74f3a78b4fbf561eb91548cf3e355af9b8b1;hp=3649bc1319aae494d42632e688a2d61cda03ff54;hpb=eed9538101a97142d8327119b9539f847f818198;p=ext%2Fsubsurface.git diff --git a/profile.c b/profile.c index 3649bc1..9d84ff2 100644 --- a/profile.c +++ b/profile.c @@ -8,16 +8,21 @@ int selected_dive = 0; #define ROUND_UP(x,y) ((((x)+(y)-1)/(y))*(y)) -#define MAX(x,y) ((x) > (y) ? (x) : (y)) +/* + * When showing dive profiles, we scale things to the + * current dive. However, we don't scale past less than + * 30 minutes or 90 ft, just so that small dives show + * up as such. + */ static int round_seconds_up(int seconds) { - return MAX(30, ROUND_UP(seconds, 60*10)); + return MAX(30*60, ROUND_UP(seconds, 60*10)); } static int round_feet_up(int feet) { - return MAX(45, ROUND_UP(feet+5, 15)); + return MAX(90, ROUND_UP(feet+5, 15)); } /* Scale to 0,0 -> maxx,maxy */ @@ -29,6 +34,7 @@ static void plot(cairo_t *cr, int w, int h, struct dive *dive, int samples, stru double topx, topy, maxx, maxy; double scalex, scaley; int maxtime, maxdepth; + int begins, sec, depth; topx = w / 20.0; topy = h / 20.0; @@ -63,11 +69,21 @@ static void plot(cairo_t *cr, int w, int h, struct dive *dive, int samples, stru /* Depth profile */ cairo_set_source_rgba(cr, 1, 0.2, 0.2, 0.80); + begins = sample->time.seconds; cairo_move_to(cr, SCALE(sample->time.seconds, to_feet(sample->depth))); for (i = 1; i < dive->samples; i++) { sample++; - cairo_line_to(cr, SCALE(sample->time.seconds, to_feet(sample->depth))); + sec = sample->time.seconds; + depth = to_feet(sample->depth); + cairo_line_to(cr, SCALE(sec, depth)); } + scaley = 1.0; + cairo_line_to(cr, SCALE(sec, 0)); + cairo_line_to(cr, SCALE(begins, 0)); + cairo_close_path(cr); + cairo_set_source_rgba(cr, 1, 0.2, 0.2, 0.20); + cairo_fill_preserve(cr); + cairo_set_source_rgba(cr, 1, 0.2, 0.2, 0.80); cairo_stroke(cr); /* Bounding box last */ @@ -84,7 +100,7 @@ static void plot(cairo_t *cr, int w, int h, struct dive *dive, int samples, stru static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { - struct dive *dive = dive_table.dives[selected_dive]; + struct dive *dive = current_dive; cairo_t *cr; int w,h; @@ -95,7 +111,7 @@ static gboolean expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer cairo_set_source_rgb(cr, 0, 0, 0); cairo_paint(cr); - if (dive->samples) + if (dive && dive->samples) plot(cr, w, h, dive, dive->samples, dive->sample); cairo_destroy(cr);