summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-21 11:54:18 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-21 11:54:18 -0700
commit184eecf7c0dbcbdecba097411828afaac30773aa (patch)
tree83c70b10351dc4debc52ee993cf6a73b53abde6c
parentb4c4a29a11ff82dacfe3a145fe4eedaae2341151 (diff)
downloadsubsurface-184eecf7c0dbcbdecba097411828afaac30773aa.tar.gz
Fix dive location width problem
For really long dive locations, we now limit the width to the same size as the date and time, and force it to a single line - with an ellipsis if it ends up being too big. Also, since we no longer use any markup anywhere, we migth as well show the dive buddy information too, as we don't need no stinking quoting. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--print.c83
1 files changed, 58 insertions, 25 deletions
diff --git a/print.c b/print.c
index 16ac4d2bf..8d3bc6150 100644
--- a/print.c
+++ b/print.c
@@ -7,6 +7,19 @@
#include "display.h"
#include "display-gtk.h"
+#define FONT_NORMAL (12)
+#define FONT_SMALL (FONT_NORMAL / 1.2)
+#define FONT_LARGE (FONT_NORMAL * 1.2)
+
+static void set_font(PangoLayout *layout, PangoFontDescription *font, double size, int align)
+{
+ pango_font_description_set_size(font, size * PANGO_SCALE);
+ pango_layout_set_font_description(layout, font);
+ pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
+ pango_layout_set_alignment(layout, align);
+
+}
+
/*
* You know what? Maybe somebody can do a real Pango layout thing.
* This is hacky.
@@ -22,10 +35,8 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
maxheight = h * PANGO_SCALE * 0.9;
layout = pango_cairo_create_layout(cr);
- pango_layout_set_font_description(layout, font);
pango_layout_set_width(layout, maxwidth);
pango_layout_set_height(layout, maxheight);
- pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
*divenr = 0;
if (dive->number)
@@ -34,20 +45,15 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
tm = gmtime(&dive->when);
len = snprintf(buffer, sizeof(buffer),
- "<span size=\"large\">"
- "%s%s, %s %d, %d %d:%02d"
- "</span>",
+ "%s%s, %s %d, %d %d:%02d",
divenr,
weekday(tm->tm_wday),
monthname(tm->tm_mon),
tm->tm_mday, tm->tm_year + 1900,
tm->tm_hour, tm->tm_min);
- pango_layout_set_justify(layout, 1);
- pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
- pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
-
- pango_layout_set_markup(layout, buffer, len);
+ set_font(layout, font, FONT_LARGE, PANGO_ALIGN_LEFT);
+ pango_layout_set_text(layout, buffer, len);
pango_layout_get_size(layout, &width, &height);
cairo_move_to(cr, 0, 0);
@@ -59,33 +65,60 @@ static void show_dive_text(struct dive *dive, cairo_t *cr, double w, double h, P
* create a box or something.
*/
snprintf(buffer, sizeof(buffer),
- "<span size=\"small\">"
"Max depth: %d ft\n"
- "Duration: %d:%02d"
- "</span>",
+ "Duration: %d:%02d\n"
+ "%s",
to_feet(dive->maxdepth),
dive->duration.seconds / 60,
- dive->duration.seconds % 60);
+ dive->duration.seconds % 60,
+ dive->buddy ? :"");
- pango_layout_set_alignment(layout, PANGO_ALIGN_RIGHT);
- pango_layout_set_markup(layout, buffer, -1);
+ set_font(layout, font, FONT_SMALL, PANGO_ALIGN_RIGHT);
+ pango_layout_set_text(layout, buffer, -1);
cairo_move_to(cr, 0, 0);
pango_cairo_show_layout(cr, layout);
- len = snprintf(buffer, sizeof(buffer), "%s\n\n%s",
- dive->location ? : "",
- dive->notes ? : "");
-
+ /*
+ * Show the dive location
+ *
+ * .. or at least a space to get the size.
+ *
+ * Move down by the size of the date, and limit the
+ * width to the same width as the date string.
+ */
+ cairo_translate(cr, 0, height / (double) PANGO_SCALE);
maxheight -= height;
- pango_layout_set_height(layout, maxheight);
- pango_layout_set_attributes(layout, NULL);
- pango_layout_set_alignment(layout, PANGO_ALIGN_LEFT);
- pango_layout_set_text(layout, buffer, len);
+ pango_layout_set_height(layout, 1);
+ pango_layout_set_width(layout, width);
+
+ set_font(layout, font, FONT_NORMAL, PANGO_ALIGN_LEFT);
+ pango_layout_set_text(layout, dive->location ? : " ", -1);
- cairo_move_to(cr, 0, height / (double) PANGO_SCALE);
+ cairo_move_to(cr, 0, 0);
pango_cairo_show_layout(cr, layout);
+ pango_layout_get_size(layout, &width, &height);
+
+ /*
+ * Show the dive notes
+ */
+ if (dive->notes) {
+ /* Move down by the size of the location (1.5) */
+ height = height * 3 / 2;
+ cairo_translate(cr, 0, height / (double) PANGO_SCALE);
+ maxheight -= height;
+
+ /* Use the full width and remaining height for notes */
+ pango_layout_set_height(layout, maxheight);
+ pango_layout_set_width(layout, maxwidth);
+ pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
+ pango_layout_set_justify(layout, 1);
+ pango_layout_set_text(layout, dive->notes, -1);
+
+ cairo_move_to(cr, 0, 0);
+ pango_cairo_show_layout(cr, layout);
+ }
g_object_unref(layout);
}