diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-20 16:46:28 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-09-20 16:46:28 -0700 |
commit | 76a732fe747125e96c913fe71daa2ef260e9d0ad (patch) | |
tree | 3e092dd1abd57c479ded955553be099c190756e0 /print.c | |
parent | e276b0602bf9b5953f237e67663ee0d3d8d1163b (diff) | |
download | subsurface-76a732fe747125e96c913fe71daa2ef260e9d0ad.tar.gz |
Start fleshing out the dive printing a bit more
Four dives per page sounds good. Maybe even six? But dangit, the
default font choice for cairo printing sucks. And I need to learn about
pango for actually printing the dive info.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org
Diffstat (limited to 'print.c')
-rw-r--r-- | print.c | 47 |
1 files changed, 38 insertions, 9 deletions
@@ -4,27 +4,54 @@ #include "display.h" #include "display-gtk.h" +static void show_one_dive(struct dive *dive, cairo_t *cr, double w, double h) +{ + struct graphics_context gc = { + .printer = 1, + .cr = cr + }; + plot(&gc, w, h, dive); +} + +static void print(int divenr, cairo_t *cr, double x, double y, double w, double h) +{ + struct dive *dive; + + dive = get_dive(divenr); + if (!dive) + return; + cairo_save(cr); + cairo_translate(cr, x, y); + + /* Dive plot in the upper half */ + show_one_dive(dive, cr, w, h/2); + + /* Dive information in the lower half */ + + cairo_restore(cr); +} + static void draw_page(GtkPrintOperation *operation, GtkPrintContext *context, gint page_nr, gpointer user_data) { + int nr; cairo_t *cr; PangoLayout *layout; double w, h; - struct graphics_context gc = { .printer = 1 }; cr = gtk_print_context_get_cairo_context(context); - gc.cr = cr; - layout=gtk_print_context_create_pango_layout(context); - w = gtk_print_context_get_width(context); - h = gtk_print_context_get_height(context); + w = gtk_print_context_get_width(context) / 2; + h = gtk_print_context_get_height(context) / 2; - /* Do the profile on the top half of the page.. */ - if (current_dive) - plot(&gc, w, h/2, current_dive); + nr = page_nr*4; + print(nr+0, cr, 0, 0, w, h); + print(nr+1, cr, w, 0, w, h); + print(nr+2, cr, 0, h, w, h); + print(nr+3, cr, w, h, w, h); pango_cairo_show_layout(cr,layout); g_object_unref(layout); @@ -38,13 +65,15 @@ static GtkPrintSettings *settings = NULL; void do_print(void) { + int pages; GtkPrintOperation *print; GtkPrintOperationResult res; print = gtk_print_operation_new(); if (settings != NULL) gtk_print_operation_set_print_settings(print, settings); - gtk_print_operation_set_n_pages(print, 1); + pages = (dive_table.nr + 3) / 4; + gtk_print_operation_set_n_pages(print, pages); g_signal_connect(print, "begin_print", G_CALLBACK(begin_print), NULL); g_signal_connect(print, "draw_page", G_CALLBACK(draw_page), NULL); res = gtk_print_operation_run(print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, |