1
//========================================================================
3
// GDKSplashOutputDev.cc
5
// Copyright 2003 Glyph & Cog, LLC
6
// Copyright 2004 Red Hat, Inc. (GDK port)
8
//========================================================================
12
#ifdef USE_GCC_PRAGMAS
13
#pragma implementation
25
GtkWidget *drawing_area;
26
GtkWidget *spin_button;
28
PopplerDocument *document;
29
cairo_surface_t *surface;
34
drawing_area_expose (GtkWidget *drawing_area,
35
GdkEventExpose *event,
38
View *v = (View*) data;
41
gdk_window_clear (drawing_area->window);
42
cr = gdk_cairo_create (drawing_area->window);
44
cairo_set_source_surface (cr, v->surface, 0, 0);
50
view_set_page (View *v, int page)
56
v->page = poppler_document_get_page (v->document, page);
57
poppler_page_get_size (v->page, &width, &height);
58
w = (int) ceil(width);
59
h = (int) ceil(height);
60
cairo_surface_destroy (v->surface);
61
v->surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h);
62
cr = cairo_create (v->surface);
63
poppler_page_render (v->page, cr);
65
gtk_widget_set_size_request (v->drawing_area, w, h);
66
gtk_widget_queue_draw (v->drawing_area);
67
gtk_spin_button_set_value (GTK_SPIN_BUTTON (v->spin_button), page);
71
page_changed_callback (GtkSpinButton *button, View *v)
75
page = gtk_spin_button_get_value_as_int (button);
76
view_set_page (v, page);
80
destroy_window_callback (GtkWindow *window, View *v)
82
if (--(*v->window_count) == 0)
87
view_new (const char *filename, int *window_count)
91
GtkWidget *drawing_area;
93
GtkWidget *vbox, *hbox;
94
GtkWidget *spin_button;
99
v->document = poppler_document_new_from_file (filename, NULL, NULL);
100
if (v->document == NULL)
103
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
104
vbox = gtk_vbox_new(FALSE, 5);
106
gtk_container_add (GTK_CONTAINER (window), vbox);
107
drawing_area = gtk_drawing_area_new ();
109
sw = gtk_scrolled_window_new (NULL, NULL);
111
gtk_box_pack_end (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
112
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw),
115
n_pages = poppler_document_get_n_pages (v->document);
116
spin_button = gtk_spin_button_new_with_range (0, n_pages - 1, 1);
117
g_signal_connect (G_OBJECT (spin_button), "value-changed",
118
G_CALLBACK (page_changed_callback), v);
119
hbox = gtk_hbox_new (FALSE, 5);
120
gtk_box_pack_end (GTK_BOX (hbox), spin_button, FALSE, TRUE, 0);
122
gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
124
gtk_widget_show_all (window);
125
gtk_widget_realize (window);
128
v->drawing_area = drawing_area;
130
v->window_count = window_count;
131
v->spin_button = spin_button;
133
g_signal_connect (drawing_area,
135
G_CALLBACK (drawing_area_expose),
138
g_signal_connect (window,
140
G_CALLBACK (destroy_window_callback),
146
static int option_page = 0;
147
static GOptionEntry demo_options[] = {
148
{ "page", 0, 0, G_OPTION_ARG_INT, &option_page, "Page number", "PAGE" },
153
main (int argc, char *argv [])
159
ctx = g_option_context_new("FILENAME ...");
160
g_option_context_add_main_entries(ctx, demo_options, "main");
161
g_option_context_parse(ctx, &argc, &argv, NULL);
162
g_option_context_free(ctx);
164
gtk_init (&argc, &argv);
168
char *basename = g_path_get_basename (argv[0]);
169
fprintf (stderr, "usage: %s PDF-FILES...\n", basename);
175
for (i = 1; i < argc; i++) {
176
v = view_new (argv[i], &window_count);
178
g_printerr ("Error loading %s\n", argv[i]);
182
view_set_page (v, option_page);
186
if (window_count > 0)