]> www.fi.muni.cz Git - evince.git/blob - pdf/test-gdk-output-dev.cc
Hungarian translation updated.
[evince.git] / pdf / test-gdk-output-dev.cc
1 /**
2  * render a PDF to GDKSplashOutputDev
3  *
4  * Copyright 2004 Red Hat, Inc.
5  */
6
7 #include <stdio.h>
8 #include <stdlib.h>
9
10 #include <gtk/gtk.h>
11
12 #include <GlobalParams.h>
13 #include <PDFDoc.h>
14 #include <ErrorCodes.h>
15 #include "GDKSplashOutputDev.h"
16
17 typedef struct
18 {
19   GtkWidget *window;
20   GtkWidget *sw;
21   GtkWidget *drawing_area;
22   GDKSplashOutputDev *out;
23   PDFDoc *doc;
24 } View;
25
26 static void
27 drawing_area_expose (GtkWidget      *drawing_area,
28                      GdkEventExpose *event,
29                      void           *data)
30 {
31   View *v = (View*) data;
32   int x, y, w, h;
33   GdkRectangle document;
34   GdkRectangle draw;
35
36   gdk_window_clear (drawing_area->window);
37   
38   document.x = 0;
39   document.y = 0;
40   document.width = v->out->getBitmapWidth();
41   document.height = v->out->getBitmapHeight();
42
43   if (gdk_rectangle_intersect (&document, &event->area, &draw))
44     {
45       v->out->redraw (draw.x, draw.y,
46                       drawing_area->window,
47                       draw.x, draw.y,
48                       draw.width, draw.height);
49     }
50 }
51
52 static int
53 view_load (View       *v,
54            const char *filename)
55 {
56   PDFDoc *newDoc;
57   int err;
58   GooString *filename_g;
59   GtkAdjustment *hadj;
60   GtkAdjustment *vadj;
61   int w, h;
62
63   filename_g = new GooString (filename);
64
65   // open the PDF file
66   newDoc = new PDFDoc(filename_g, 0, 0);
67
68   delete filename_g;
69   
70   if (!newDoc->isOk())
71     {
72       err = newDoc->getErrorCode();
73       delete newDoc;
74       return err;
75     }
76
77   if (v->doc)
78     delete v->doc;
79   v->doc = newDoc;
80   
81   v->out->startDoc(v->doc->getXRef());
82
83   v->doc->displayPage (v->out, 1, 72, 72, 0, gTrue, gTrue);
84   
85   w = v->out->getBitmapWidth();
86   h = v->out->getBitmapHeight();
87   
88   gtk_widget_set_size_request (v->drawing_area, w, h);
89 }
90
91 static void
92 view_show (View *v)
93 {
94   gtk_widget_show (v->window);
95 }
96
97 static void
98 redraw_callback (void *data)
99 {
100   View *v = (View*) data;
101
102   gtk_widget_queue_draw (v->drawing_area);
103 }
104
105 static View*
106 view_new (void)
107 {
108   View *v;
109   GtkWidget *window;
110   GtkWidget *drawing_area;
111   GtkWidget *sw;
112
113   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
114
115   drawing_area = gtk_drawing_area_new ();
116
117   sw = gtk_scrolled_window_new (NULL, NULL);
118
119   gtk_container_add (GTK_CONTAINER (window), sw);
120   gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), drawing_area);
121
122   gtk_widget_show_all (sw);
123
124   v = g_new0 (View, 1);
125
126   v->window = window;
127   v->drawing_area = drawing_area;
128   v->sw = sw;
129   v->out = new GDKSplashOutputDev (gtk_widget_get_screen (window),
130                                    redraw_callback, (void*) v);
131   v->doc = 0;
132
133   g_signal_connect (drawing_area,
134                     "expose_event",
135                     G_CALLBACK (drawing_area_expose),
136                     (void*) v);
137   
138   return v;
139 }
140
141 int
142 main (int argc, char *argv [])
143 {
144   View *v;
145   int i;
146   
147   gtk_init (&argc, &argv);
148   
149   globalParams = new GlobalParams("/etc/xpdfrc");
150   globalParams->setupBaseFonts(NULL);
151   
152   i = 1;
153   while (i < argc)
154     {
155       int err;
156       
157       v = view_new ();
158
159       err = view_load (v, argv[i]);
160
161       if (err != errNone)
162         g_printerr ("Error loading document!\n");
163       
164       view_show (v);
165
166       ++i;
167     }
168   
169   gtk_main ();
170   
171   delete globalParams;
172   
173   return 0;
174 }