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 */
double topx, topy, maxx, maxy;
double scalex, scaley;
int maxtime, maxdepth;
+ int begins, sec, depth;
topx = w / 20.0;
topy = h / 20.0;
/* 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 */
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;
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);