X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=print.c;h=a16ddb76b373727f6196e9dd9d46bc7a31908a6f;hb=9cfe9aa8cde394aef61be4d50de73562a5ac1c6f;hp=af7fc4cd6c232368ebe6adcaa111a626b17f88cd;hpb=682135838ff313594c7f67fabd9be8f88a33883b;p=ext%2Fsubsurface.git diff --git a/print.c b/print.c index af7fc4c..a16ddb7 100644 --- a/print.c +++ b/print.c @@ -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,