diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-21 11:54:18 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-21 11:54:18 -0700 |
commit | 184eecf7c0dbcbdecba097411828afaac30773aa (patch) | |
tree | 83c70b10351dc4debc52ee993cf6a73b53abde6c /print.c | |
parent | b4c4a29a11ff82dacfe3a145fe4eedaae2341151 (diff) | |
download | subsurface-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>
Diffstat (limited to 'print.c')
-rw-r--r-- | print.c | 83 |
1 files changed, 58 insertions, 25 deletions
@@ -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); } |