summaryrefslogtreecommitdiff
path: root/gtk+-mingw/share/gtk-3.0/demo/printing.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk+-mingw/share/gtk-3.0/demo/printing.c')
-rw-r--r--gtk+-mingw/share/gtk-3.0/demo/printing.c212
1 files changed, 0 insertions, 212 deletions
diff --git a/gtk+-mingw/share/gtk-3.0/demo/printing.c b/gtk+-mingw/share/gtk-3.0/demo/printing.c
deleted file mode 100644
index 59835ea..0000000
--- a/gtk+-mingw/share/gtk-3.0/demo/printing.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/* Printing
- *
- * GtkPrintOperation offers a simple API to support printing
- * in a cross-platform way.
- *
- */
-
-#include <math.h>
-#include <gtk/gtk.h>
-#include "demo-common.h"
-
-/* In points */
-#define HEADER_HEIGHT (10*72/25.4)
-#define HEADER_GAP (3*72/25.4)
-
-typedef struct
-{
- gchar *filename;
- gdouble font_size;
-
- gint lines_per_page;
- gchar **lines;
- gint num_lines;
- gint num_pages;
-} PrintData;
-
-static void
-begin_print (GtkPrintOperation *operation,
- GtkPrintContext *context,
- gpointer user_data)
-{
- PrintData *data = (PrintData *)user_data;
- char *contents;
- int i;
- double height;
-
- height = gtk_print_context_get_height (context) - HEADER_HEIGHT - HEADER_GAP;
-
- data->lines_per_page = floor (height / data->font_size);
-
- g_file_get_contents (data->filename, &contents, NULL, NULL);
-
- data->lines = g_strsplit (contents, "\n", 0);
- g_free (contents);
-
- i = 0;
- while (data->lines[i] != NULL)
- i++;
-
- data->num_lines = i;
- data->num_pages = (data->num_lines - 1) / data->lines_per_page + 1;
-
- gtk_print_operation_set_n_pages (operation, data->num_pages);
-}
-
-static void
-draw_page (GtkPrintOperation *operation,
- GtkPrintContext *context,
- gint page_nr,
- gpointer user_data)
-{
- PrintData *data = (PrintData *)user_data;
- cairo_t *cr;
- PangoLayout *layout;
- gint text_width, text_height;
- gdouble width;
- gint line, i;
- PangoFontDescription *desc;
- gchar *page_str;
-
- cr = gtk_print_context_get_cairo_context (context);
- width = gtk_print_context_get_width (context);
-
- cairo_rectangle (cr, 0, 0, width, HEADER_HEIGHT);
-
- cairo_set_source_rgb (cr, 0.8, 0.8, 0.8);
- cairo_fill_preserve (cr);
-
- cairo_set_source_rgb (cr, 0, 0, 0);
- cairo_set_line_width (cr, 1);
- cairo_stroke (cr);
-
- layout = gtk_print_context_create_pango_layout (context);
-
- desc = pango_font_description_from_string ("sans 14");
- pango_layout_set_font_description (layout, desc);
- pango_font_description_free (desc);
-
- pango_layout_set_text (layout, data->filename, -1);
- pango_layout_get_pixel_size (layout, &text_width, &text_height);
-
- if (text_width > width)
- {
- pango_layout_set_width (layout, width);
- pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_START);
- pango_layout_get_pixel_size (layout, &text_width, &text_height);
- }
-
- cairo_move_to (cr, (width - text_width) / 2, (HEADER_HEIGHT - text_height) / 2);
- pango_cairo_show_layout (cr, layout);
-
- page_str = g_strdup_printf ("%d/%d", page_nr + 1, data->num_pages);
- pango_layout_set_text (layout, page_str, -1);
- g_free (page_str);
-
- pango_layout_set_width (layout, -1);
- pango_layout_get_pixel_size (layout, &text_width, &text_height);
- cairo_move_to (cr, width - text_width - 4, (HEADER_HEIGHT - text_height) / 2);
- pango_cairo_show_layout (cr, layout);
-
- g_object_unref (layout);
-
- layout = gtk_print_context_create_pango_layout (context);
-
- desc = pango_font_description_from_string ("monospace");
- pango_font_description_set_size (desc, data->font_size * PANGO_SCALE);
- pango_layout_set_font_description (layout, desc);
- pango_font_description_free (desc);
-
- cairo_move_to (cr, 0, HEADER_HEIGHT + HEADER_GAP);
- line = page_nr * data->lines_per_page;
- for (i = 0; i < data->lines_per_page && line < data->num_lines; i++)
- {
- pango_layout_set_text (layout, data->lines[line], -1);
- pango_cairo_show_layout (cr, layout);
- cairo_rel_move_to (cr, 0, data->font_size);
- line++;
- }
-
- g_object_unref (layout);
-}
-
-static void
-end_print (GtkPrintOperation *operation,
- GtkPrintContext *context,
- gpointer user_data)
-{
- PrintData *data = (PrintData *)user_data;
-
- g_free (data->filename);
- g_strfreev (data->lines);
- g_free (data);
-}
-
-
-GtkWidget *
-do_printing (GtkWidget *do_widget)
-{
- GtkPrintOperation *operation;
- GtkPrintSettings *settings;
- PrintData *data;
- gchar *uri, *ext;
- const gchar *dir;
- GError *error = NULL;
-
- operation = gtk_print_operation_new ();
- data = g_new0 (PrintData, 1);
- data->filename = demo_find_file ("printing.c", NULL);
- data->font_size = 12.0;
-
- g_signal_connect (G_OBJECT (operation), "begin-print",
- G_CALLBACK (begin_print), data);
- g_signal_connect (G_OBJECT (operation), "draw-page",
- G_CALLBACK (draw_page), data);
- g_signal_connect (G_OBJECT (operation), "end-print",
- G_CALLBACK (end_print), data);
-
- gtk_print_operation_set_use_full_page (operation, FALSE);
- gtk_print_operation_set_unit (operation, GTK_UNIT_POINTS);
- gtk_print_operation_set_embed_page_setup (operation, TRUE);
-
- settings = gtk_print_settings_new ();
- dir = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
- if (dir == NULL)
- dir = g_get_home_dir ();
- if (g_strcmp0 (gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT), "ps") == 0)
- ext = ".ps";
- else if (g_strcmp0 (gtk_print_settings_get (settings, GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT), "svg") == 0)
- ext = ".svg";
- else
- ext = ".pdf";
-
- uri = g_strconcat ("file://", dir, "/", "gtk-demo", ext, NULL);
- gtk_print_settings_set (settings, GTK_PRINT_SETTINGS_OUTPUT_URI, uri);
- gtk_print_operation_set_print_settings (operation, settings);
-
- gtk_print_operation_run (operation, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW (do_widget), &error);
-
- g_object_unref (operation);
- g_object_unref (settings);
- g_free (uri);
-
- if (error)
- {
- GtkWidget *dialog;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (do_widget),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_CLOSE,
- "%s", error->message);
- g_error_free (error);
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
-
- gtk_widget_show (dialog);
- }
-
-
- return NULL;
-}