diff options
Diffstat (limited to 'print.c')
-rw-r--r-- | print.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/print.c b/print.c new file mode 100644 index 000000000..c2114d56c --- /dev/null +++ b/print.c @@ -0,0 +1,59 @@ +#include <gtk/gtk.h> + +#include "dive.h" +#include "display.h" + +static void draw_page(GtkPrintOperation *operation, + GtkPrintContext *context, + gint page_nr, + gpointer user_data) +{ + cairo_t *cr; + PangoLayout *layout; + double w, h; + struct graphics_context gc = { 0 }; + + 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); + + /* Do the profile on the top third of the page.. */ + cairo_set_source_rgb(cr, 0, 0, 0); + cairo_rectangle(cr, 0, 0, w, h/3); + cairo_fill(cr); + plot(&gc, w, h/3, current_dive); + + pango_cairo_show_layout(cr,layout); + g_object_unref(layout); +} + +static void begin_print(GtkPrintOperation *operation, gpointer user_data) +{ +} + +static GtkPrintSettings *settings = NULL; + +void do_print(void) +{ + 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); + 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, + GTK_WINDOW(main_window), NULL); + if (res == GTK_PRINT_OPERATION_RESULT_APPLY) { + if (settings != NULL) + g_object_unref(settings); + settings = g_object_ref(gtk_print_operation_get_print_settings(print)); + } + g_object_unref(print); +} |