]> git.tdb.fi Git - ext/subsurface.git/blobdiff - profile.c
Don't colorize the pressure plot when printing
[ext/subsurface.git] / profile.c
index 9fab8b2e89f5ae72cf4732f91e48d4a3cb73de00..b01514a574be3001aa80d3f5ee3cff96d846c614 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -622,12 +622,16 @@ static void set_sac_color(struct graphics_context *gc, int sac, int avg_sac)
        int sac_index = 0;
        int delta = sac - avg_sac + 7000;
 
-       sac_index = delta / 2000;
-       if (sac_index < 0)
-               sac_index = 0;
-       if (sac_index > SAC_COLORS - 1)
-               sac_index = SAC_COLORS - 1;
-       set_source_rgb_struct(gc, &sac_color[sac_index]);
+       if (!gc->printer) {
+               sac_index = delta / 2000;
+               if (sac_index < 0)
+                       sac_index = 0;
+               if (sac_index > SAC_COLORS - 1)
+                       sac_index = SAC_COLORS - 1;
+               set_source_rgb_struct(gc, &sac_color[sac_index]);
+       } else {
+               set_source_rgb(gc, 1.0, 1.0, 1.0);
+       }
 }
 
 /* calculate the current SAC in ml/min and convert to int */
@@ -669,10 +673,7 @@ static void plot_cylinder_pressure(struct graphics_context *gc, struct plot_info
                if (!last_entry) {
                        last = i;
                        last_entry = entry;
-                       if (first_plot) {
-                               /* don't start with a sac of 0, so just calculate the first one */
-                               sac = GET_LOCAL_SAC(entry, pi->entry + i + 1, dive);
-                       }
+                       sac = GET_LOCAL_SAC(entry, pi->entry + i + 1, dive);
                } else {
                        int j;
                        sac = 0;
@@ -949,6 +950,21 @@ static void list_free(pr_track_t *list)
        free(list);
 }
 
+static void dump_pr_track(pr_track_t **track_pr)
+{
+       int cyl;
+       pr_track_t *list;
+
+       for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) {
+               list = track_pr[cyl];
+               while (list) {
+                       printf("cyl%d: start %d end %d t_start %d t_end %d pt %6.3f\n", cyl,
+                               list->start, list->end, list->t_start, list->t_end, list->pressure_time);
+                       list = list->next;
+               }
+       }
+}
+
 static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
                                        pr_track_t **track_pr)
 {
@@ -959,6 +975,10 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
        struct plot_data *entry;
        int cur_pr[MAX_CYLINDERS];
 
+       if (0) {
+               /* another great debugging tool */
+               dump_pr_track(track_pr);
+       }
        for (cyl = 0; cyl < MAX_CYLINDERS; cyl++) {
                cur_pr[cyl] = track_pr[cyl]->start;
        }
@@ -1004,7 +1024,7 @@ static void fill_missing_tank_pressures(struct dive *dive, struct plot_info *pi,
                                double cur_pt = (entry->sec - (entry-1)->sec) *
                                        (1 + (entry->depth + (entry-1)->depth) / 20000.0);
                                INTERPOLATED_PRESSURE(entry) =
-                                       cur_pr[entry->cylinderindex] + cur_pt * magic;
+                                       cur_pr[entry->cylinderindex] + cur_pt * magic + 0.5;
                                cur_pr[entry->cylinderindex] = INTERPOLATED_PRESSURE(entry);
                        } else
                                INTERPOLATED_PRESSURE(entry) = cur_pr[entry->cylinderindex];
@@ -1141,8 +1161,13 @@ static struct plot_info *create_plot_info(struct dive *dive, int nr_samples, str
                while (ev && ev->time.seconds < sample->time.seconds) {
                        /* insert two fake plot info structures for the end of
                         * the old tank and the start of the new tank */
-                       entry->sec = ev->time.seconds;
-                       (entry+1)->sec = ev->time.seconds + 1;
+                       if (ev->time.seconds == sample->time.seconds - 1) {
+                               entry->sec = ev->time.seconds - 1;
+                               (entry+1)->sec = ev->time.seconds;
+                       } else {
+                               entry->sec = ev->time.seconds;
+                               (entry+1)->sec = ev->time.seconds + 1;
+                       }
                        /* we need a fake depth - let's interpolate */
                        if (i) {
                                entry->depth = sample->depth.mm -