]> git.tdb.fi Git - ext/subsurface.git/blobdiff - print.c
Fix crash when editing weight system info
[ext/subsurface.git] / print.c
diff --git a/print.c b/print.c
index 8d3bc6150cc6514d1d6d8f5d40f37dcfeeb89c56..bdebcfe15634fcf0bdda5fbe51e211ab42130495 100644 (file)
--- a/print.c
+++ b/print.c
@@ -26,10 +26,12 @@ static void set_font(PangoLayout *layout, PangoFontDescription *font, double siz
  */
 static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, PangoFontDescription *font)
 {
-       int len, width, height, maxwidth, maxheight;
+       double depth;
+       const char *unit;
+       int len, decimals, width, height, maxwidth, maxheight;
        PangoLayout *layout;
        struct tm *tm;
-       char buffer[1024], divenr[20];
+       char buffer[80], divenr[20], *people;
 
        maxwidth = w * PANGO_SCALE;
        maxheight = h * PANGO_SCALE * 0.9;
@@ -42,7 +44,6 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
        if (dive->number)
                snprintf(divenr, sizeof(divenr), "Dive #%d - ", dive->number);
 
-
        tm = gmtime(&dive->when);
        len = snprintf(buffer, sizeof(buffer),
                "%s%s, %s %d, %d   %d:%02d",
@@ -59,19 +60,21 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
        cairo_move_to(cr, 0, 0);
        pango_cairo_show_layout(cr, layout);
 
-       /*
-        * This is still problematic: a long dive location will clash
-        * with the depth/duration information. Need to mask that or
-        * create a box or something.
-        */
+       people = dive->buddy;
+       if (!people || !*people) {
+               people = dive->divemaster;
+               if (!people)
+                       people = "";
+       }
+
+       depth = get_depth_units(dive->maxdepth.mm, &decimals, &unit);
        snprintf(buffer, sizeof(buffer),
-               "Max depth: %d ft\n"
-               "Duration: %d:%02d\n"
+               "Max depth: %.*f %s\n"
+               "Duration: %d min\n"
                "%s",
-               to_feet(dive->maxdepth),
-               dive->duration.seconds / 60,
-               dive->duration.seconds % 60,
-               dive->buddy ? :"");
+               decimals, depth, unit,
+               (dive->duration.seconds+59) / 60,
+               people);
 
        set_font(layout, font, FONT_SMALL, PANGO_ALIGN_RIGHT);
        pango_layout_set_text(layout, buffer, -1);
@@ -104,8 +107,8 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
         * Show the dive notes
         */
        if (dive->notes) {
-               /* Move down by the size of the location (1.5) */
-               height = height * 3 / 2;
+               /* Move down by the size of the location (x2) */
+               height = height * 2;
                cairo_translate(cr, 0, height / (double) PANGO_SCALE);
                maxheight -= height;
 
@@ -124,12 +127,13 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
 
 static void show_dive_profile(struct dive *dive, cairo_t *cr, double w, double h)
 {
+       cairo_rectangle_int_t drawing_area = { w/20.0, h/20.0, w, h};
        struct graphics_context gc = {
                .printer = 1,
                .cr = cr
        };
        cairo_save(cr);
-       plot(&gc, w, h, dive);
+       plot(&gc, &drawing_area, dive);
        cairo_restore(cr);
 }