summaryrefslogtreecommitdiff
path: root/Build/source/libs/poppler/poppler-0.12.4/test/gtk-cairo-test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/poppler/poppler-0.12.4/test/gtk-cairo-test.cc')
-rw-r--r--Build/source/libs/poppler/poppler-0.12.4/test/gtk-cairo-test.cc190
1 files changed, 190 insertions, 0 deletions
diff --git a/Build/source/libs/poppler/poppler-0.12.4/test/gtk-cairo-test.cc b/Build/source/libs/poppler/poppler-0.12.4/test/gtk-cairo-test.cc
new file mode 100644
index 00000000000..8c405685027
--- /dev/null
+++ b/Build/source/libs/poppler/poppler-0.12.4/test/gtk-cairo-test.cc
@@ -0,0 +1,190 @@
+//========================================================================
+//
+// GDKSplashOutputDev.cc
+//
+// Copyright 2003 Glyph & Cog, LLC
+// Copyright 2004 Red Hat, Inc. (GDK port)
+//
+//========================================================================
+
+#include <config.h>
+
+#ifdef USE_GCC_PRAGMAS
+#pragma implementation
+#endif
+
+#include <math.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <poppler.h>
+
+typedef struct
+{
+ GtkWidget *window;
+ GtkWidget *sw;
+ GtkWidget *drawing_area;
+ GtkWidget *spin_button;
+ PopplerPage *page;
+ PopplerDocument *document;
+ cairo_surface_t *surface;
+ int *window_count;
+} View;
+
+static void
+drawing_area_expose (GtkWidget *drawing_area,
+ GdkEventExpose *event,
+ void *data)
+{
+ View *v = (View*) data;
+ cairo_t *cr;
+
+ gdk_window_clear (drawing_area->window);
+ cr = gdk_cairo_create (drawing_area->window);
+
+ cairo_set_source_surface (cr, v->surface, 0, 0);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+}
+
+static void
+view_set_page (View *v, int page)
+{
+ int w, h;
+ double width, height;
+ cairo_t *cr;
+
+ v->page = poppler_document_get_page (v->document, page);
+ poppler_page_get_size (v->page, &width, &height);
+ w = (int) ceil(width);
+ h = (int) ceil(height);
+ cairo_surface_destroy (v->surface);
+ v->surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h);
+ cr = cairo_create (v->surface);
+ poppler_page_render (v->page, cr);
+ cairo_destroy (cr);
+ gtk_widget_set_size_request (v->drawing_area, w, h);
+ gtk_widget_queue_draw (v->drawing_area);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (v->spin_button), page);
+}
+
+static void
+page_changed_callback (GtkSpinButton *button, View *v)
+{
+ int page;
+
+ page = gtk_spin_button_get_value_as_int (button);
+ view_set_page (v, page);
+}
+
+static void
+destroy_window_callback (GtkWindow *window, View *v)
+{
+ if (--(*v->window_count) == 0)
+ gtk_main_quit();
+}
+
+static View*
+view_new (const char *filename, int *window_count)
+{
+ View *v;
+ GtkWidget *window;
+ GtkWidget *drawing_area;
+ GtkWidget *sw;
+ GtkWidget *vbox, *hbox;
+ GtkWidget *spin_button;
+ int n_pages;
+
+ v = g_new0 (View, 1);
+
+ v->document = poppler_document_new_from_file (filename, NULL, NULL);
+ if (v->document == NULL)
+ return NULL;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ vbox = gtk_vbox_new(FALSE, 5);
+
+ gtk_container_add (GTK_CONTAINER (window), vbox);
+ drawing_area = gtk_drawing_area_new ();
+
+ sw = gtk_scrolled_window_new (NULL, NULL);
+
+ gtk_box_pack_end (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
+ gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
+ drawing_area);
+
+ n_pages = poppler_document_get_n_pages (v->document);
+ spin_button = gtk_spin_button_new_with_range (0, n_pages - 1, 1);
+ g_signal_connect (G_OBJECT (spin_button), "value-changed",
+ G_CALLBACK (page_changed_callback), v);
+ hbox = gtk_hbox_new (FALSE, 5);
+ gtk_box_pack_end (GTK_BOX (hbox), spin_button, FALSE, TRUE, 0);
+
+ gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+
+ gtk_widget_show_all (window);
+ gtk_widget_realize (window);
+
+ v->window = window;
+ v->drawing_area = drawing_area;
+ v->sw = sw;
+ v->window_count = window_count;
+ v->spin_button = spin_button;
+
+ g_signal_connect (drawing_area,
+ "expose_event",
+ G_CALLBACK (drawing_area_expose),
+ (void*) v);
+
+ g_signal_connect (window,
+ "destroy",
+ G_CALLBACK (destroy_window_callback),
+ (void*) v);
+
+ return v;
+}
+
+static int option_page = 0;
+static GOptionEntry demo_options[] = {
+ { "page", 0, 0, G_OPTION_ARG_INT, &option_page, "Page number", "PAGE" },
+ { NULL }
+};
+
+int
+main (int argc, char *argv [])
+{
+ View *v;
+ int i, window_count;
+ GOptionContext *ctx;
+
+ ctx = g_option_context_new("FILENAME ...");
+ g_option_context_add_main_entries(ctx, demo_options, "main");
+ g_option_context_parse(ctx, &argc, &argv, NULL);
+ g_option_context_free(ctx);
+
+ gtk_init (&argc, &argv);
+
+ if (argc == 1)
+ {
+ char *basename = g_path_get_basename (argv[0]);
+ fprintf (stderr, "usage: %s PDF-FILES...\n", basename);
+ g_free (basename);
+ return -1;
+ }
+
+ window_count = 0;
+ for (i = 1; i < argc; i++) {
+ v = view_new (argv[i], &window_count);
+ if (v == NULL) {
+ g_printerr ("Error loading %s\n", argv[i]);
+ continue;
+ }
+
+ view_set_page (v, option_page);
+ window_count++;
+ }
+
+ if (window_count > 0)
+ gtk_main ();
+
+ return 0;
+}