]> www.fi.muni.cz Git - evince.git/blob - ps/gsdefaults.c
Fix compilation on non-gcc platforms
[evince.git] / ps / gsdefaults.c
1 /*
2  * gsdefaults.c: default settings for the GtkGS widget
3  *
4  * Copyright 2002 - 2005 the Free Software Foundation
5  *
6  * Author: Jaka Mocnik  <jaka@gnu.org>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21  */
22
23 #include <config.h>
24
25 #include <gnome.h>
26 #include <math.h>
27
28 #include "gsdefaults.h"
29
30 #include <gconf/gconf-client.h>
31
32 static void gtk_gs_defaults_changed (GConfClient * client, guint cnxn_id,
33                                      GConfEntry * entry, gpointer user_data);
34
35 /**
36  * defaults for GtkGS widgets
37  **/
38
39 static GConfClient *gconf_client;
40
41 /* Default values to pass to gtk_gs_init */
42 typedef struct _GtkGSDefaults {
43   gboolean antialiased;
44   gboolean override_size;
45   gint default_size;
46   gboolean override_orientation;
47   gboolean respect_eof;
48   gboolean show_scroll_rect;
49   gint fallback_orientation;
50   gfloat zoom_factor;
51   gfloat scroll_step;
52   gchar *interpreter_cmd;
53   gchar *alpha_params;
54   gchar *dsc_cmd;
55   gchar *convert_pdf_cmd;
56   gchar *ungzip_cmd;
57   gchar *unbzip2_cmd;
58   GtkGSZoomMode zoom_mode;
59 } GtkGSDefaults;
60
61 static GtkGSDefaults gtk_gs_defaults = {
62   TRUE, FALSE, 8, FALSE, TRUE, TRUE,
63   0, 1.0, 0.25, NULL, NULL, NULL, NULL, NULL, NULL,
64   GTK_GS_ZOOM_ABSOLUTE
65 };
66
67 GtkGSPaperSize gtk_gs_paper_sizes[] = {
68   {N_("BBox"), 0, 0},
69   {N_("Letter"), 612, 792,},
70   {N_("Tabloid"), 792, 1224,},
71   {N_("Ledger"), 1224, 792,},
72   {N_("Legal"), 612, 1008,},
73   {N_("Statement"), 396, 612,},
74   {N_("Executive"), 540, 720,},
75   {N_("A0"), 2380, 3368,},
76   {N_("A1"), 1684, 2380,},
77   {N_("A2"), 1190, 1684,},
78   {N_("A3"), 842, 1190,},
79   {N_("A4"), 595, 842,},
80   {N_("A5"), 420, 595,},
81   {N_("B4"), 729, 1032,},
82   {N_("B5"), 516, 729,},
83   {N_("Folio"), 612, 936,},
84   {N_("Quarto"), 610, 780,},
85   {N_("10x14"), 720, 1008,},
86   {NULL, 0, 0}
87 };
88
89 void
90 gtk_gs_defaults_set_scroll_step(gfloat step)
91 {
92   if(fabs(gtk_gs_defaults.scroll_step - step) > 0.001) {
93     gtk_gs_defaults.scroll_step = step;
94     gconf_client_set_float(gconf_client,
95                            "/apps/ggv/gtkgs/scrollstep",
96                            gtk_gs_defaults_get_scroll_step(), NULL);
97   }
98 }
99
100 gfloat
101 gtk_gs_defaults_get_scroll_step()
102 {
103   return gtk_gs_defaults.scroll_step;
104 }
105
106 void
107 gtk_gs_defaults_set_size(gint iNewPageSize)
108 {
109   if(gtk_gs_defaults.default_size != iNewPageSize) {
110     gtk_gs_defaults.default_size = iNewPageSize;
111     gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/size",
112                          gtk_gs_defaults_get_size(), NULL);
113   }
114 }
115
116 gint
117 gtk_gs_defaults_get_size()
118 {
119   return gtk_gs_defaults.default_size;
120 }
121
122 void
123 gtk_gs_defaults_set_override_size(gboolean bOverrSize)
124 {
125   if(gtk_gs_defaults.override_size != bOverrSize) {
126     gtk_gs_defaults.override_size = bOverrSize;
127     gconf_client_set_bool(gconf_client,
128                           "/apps/ggv/gtkgs/override_size",
129                           gtk_gs_defaults_get_override_size(), NULL);
130   }
131 }
132
133 gboolean
134 gtk_gs_defaults_get_override_size()
135 {
136   return gtk_gs_defaults.override_size;
137 }
138
139 void
140 gtk_gs_defaults_set_override_orientation(gboolean bOverOrien)
141 {
142   if(gtk_gs_defaults.override_orientation != bOverOrien) {
143     gtk_gs_defaults.override_orientation = bOverOrien;
144     gconf_client_set_bool(gconf_client,
145                           "/apps/ggv/gtkgs/override_orientation",
146                           gtk_gs_defaults_get_override_orientation(), NULL);
147   }
148 }
149
150 gboolean
151 gtk_gs_defaults_get_override_orientation()
152 {
153   return gtk_gs_defaults.override_orientation;
154 }
155
156 void
157 gtk_gs_defaults_set_antialiased(gint iNewAntialiased)
158 {
159   if(gtk_gs_defaults.antialiased != iNewAntialiased) {
160     gtk_gs_defaults.antialiased = iNewAntialiased;
161     gconf_client_set_bool(gconf_client,
162                           "/apps/ggv/gtkgs/antialiasing",
163                           gtk_gs_defaults_get_antialiased(), NULL);
164   }
165 }
166
167 gboolean
168 gtk_gs_defaults_get_antialiased()
169 {
170   return gtk_gs_defaults.antialiased;
171 }
172
173 void
174 gtk_gs_defaults_set_zoom_factor(gfloat fZoom)
175 {
176   fZoom = MIN(fZoom, 30.0);
177   fZoom = MAX(0.05, fZoom);
178   if(fabs(gtk_gs_defaults.zoom_factor - fZoom) > 0.001) {
179     gtk_gs_defaults.zoom_factor = fZoom;
180     gconf_client_set_float(gconf_client, "/apps/ggv/gtkgs/zoom",
181                            gtk_gs_defaults_get_zoom_factor(), NULL);
182   }
183 }
184
185 gfloat
186 gtk_gs_defaults_get_zoom_factor()
187 {
188   return gtk_gs_defaults.zoom_factor;
189 }
190
191 void
192 gtk_gs_defaults_set_orientation(gint iNewOrientation)
193 {
194   g_assert((iNewOrientation == GTK_GS_ORIENTATION_PORTRAIT) ||
195            (iNewOrientation == GTK_GS_ORIENTATION_LANDSCAPE) ||
196            (iNewOrientation == GTK_GS_ORIENTATION_UPSIDEDOWN) ||
197            (iNewOrientation == GTK_GS_ORIENTATION_SEASCAPE));
198   if(gtk_gs_defaults.fallback_orientation != iNewOrientation) {
199     gtk_gs_defaults.fallback_orientation = iNewOrientation;
200     gconf_client_set_int(gconf_client,
201                          "/apps/ggv/gtkgs/orientation",
202                          gtk_gs_defaults_get_orientation(), NULL);
203   }
204 }
205
206 gint
207 gtk_gs_defaults_get_orientation()
208 {
209   return gtk_gs_defaults.fallback_orientation;
210 }
211
212 void
213 gtk_gs_defaults_set_respect_eof(gboolean resp)
214 {
215   if(gtk_gs_defaults.respect_eof != resp) {
216     gtk_gs_defaults.respect_eof = resp;
217     gconf_client_set_bool(gconf_client,
218                           "/apps/ggv/gtkgs/respect_eof",
219                           gtk_gs_defaults_get_respect_eof(), NULL);
220   }
221 }
222
223 gboolean
224 gtk_gs_defaults_get_respect_eof()
225 {
226   return gtk_gs_defaults.respect_eof;
227 }
228
229 GtkGSPaperSize *
230 gtk_gs_defaults_get_paper_sizes()
231 {
232   return gtk_gs_paper_sizes;
233 }
234
235 gboolean
236 gtk_gs_defaults_get_show_scroll_rect()
237 {
238   return gtk_gs_defaults.show_scroll_rect;
239 }
240
241 void
242 gtk_gs_defaults_set_show_scroll_rect(gboolean f)
243 {
244   if(gtk_gs_defaults.show_scroll_rect != f) {
245     gtk_gs_defaults.show_scroll_rect = f;
246     gconf_client_set_bool(gconf_client,
247                           "/apps/ggv/gtkgs/show_scroll_rect",
248                           gtk_gs_defaults_get_show_scroll_rect(), NULL);
249   }
250 }
251
252 const gchar *
253 gtk_gs_defaults_get_interpreter_cmd()
254 {
255   if(!gtk_gs_defaults.interpreter_cmd)
256     return GS_PATH;
257   return gtk_gs_defaults.interpreter_cmd;
258 }
259
260 const gchar *
261 gtk_gs_defaults_get_alpha_parameters()
262 {
263   if(!gtk_gs_defaults.alpha_params)
264     return ALPHA_PARAMS;
265   return gtk_gs_defaults.alpha_params;
266 }
267
268 const gchar *
269 gtk_gs_defaults_get_convert_pdf_cmd()
270 {
271   if(!gtk_gs_defaults.convert_pdf_cmd)
272     return GS_PATH
273       " -q -dNOPAUSE -dBATCH -dSAFER"
274       " -dQUIET -sDEVICE=pswrite" " -sOutputFile=%s -c save pop -f %s";
275   return gtk_gs_defaults.convert_pdf_cmd;
276 }
277
278 const gchar *
279 gtk_gs_defaults_get_dsc_cmd()
280 {
281   if(!gtk_gs_defaults.dsc_cmd)
282     return GS_PATH
283       " -q -dNODISPLAY -dSAFER -dDELAYSAFER"
284       " -sDSCname=%s -sPDFname=%s pdf2dsc.ps" " -c quit";
285   return gtk_gs_defaults.dsc_cmd;
286 }
287
288 const gchar *
289 gtk_gs_defaults_get_ungzip_cmd()
290 {
291   if(!gtk_gs_defaults.ungzip_cmd)
292     return "gzip -cd";
293   return gtk_gs_defaults.ungzip_cmd;
294 }
295
296 const gchar *
297 gtk_gs_defaults_get_unbzip2_cmd()
298 {
299   if(!gtk_gs_defaults.unbzip2_cmd)
300     return "bzip2 -cd";
301   return gtk_gs_defaults.unbzip2_cmd;
302 }
303
304 void
305 gtk_gs_defaults_set_interpreter_cmd(gchar * cmd)
306 {
307   if((NULL == gtk_gs_defaults.interpreter_cmd) ||
308      strcmp(gtk_gs_defaults.interpreter_cmd, cmd)) {
309     if(gtk_gs_defaults.interpreter_cmd)
310       g_free(gtk_gs_defaults.interpreter_cmd);
311     gtk_gs_defaults.interpreter_cmd = cmd;
312     gconf_client_set_string(gconf_client,
313                             "/apps/ggv/gtkgs/interpreter",
314                             gtk_gs_defaults_get_interpreter_cmd(), NULL);
315   }
316 }
317
318 void
319 gtk_gs_defaults_set_alpha_parameters(gchar * par)
320 {
321   if((NULL == gtk_gs_defaults.alpha_params) ||
322      strcmp(gtk_gs_defaults.alpha_params, par)) {
323     if(gtk_gs_defaults.alpha_params)
324       g_free(gtk_gs_defaults.alpha_params);
325     gtk_gs_defaults.alpha_params = par;
326     gconf_client_set_string(gconf_client,
327                             "/apps/ggv/gtkgs/alphaparams",
328                             gtk_gs_defaults_get_alpha_parameters(), NULL);
329   }
330 }
331
332 void
333 gtk_gs_defaults_set_convert_pdf_cmd(gchar * cmd)
334 {
335   if((NULL == gtk_gs_defaults.convert_pdf_cmd) ||
336      strcmp(gtk_gs_defaults.convert_pdf_cmd, cmd)) {
337     if(gtk_gs_defaults.convert_pdf_cmd)
338       g_free(gtk_gs_defaults.convert_pdf_cmd);
339     gtk_gs_defaults.convert_pdf_cmd = cmd;
340     gconf_client_set_string(gconf_client,
341                             "/apps/ggv/gtkgs/convertpdf",
342                             gtk_gs_defaults_get_convert_pdf_cmd(), NULL);
343   }
344 }
345
346 void
347 gtk_gs_defaults_set_dsc_cmd(gchar * cmd)
348 {
349   if((NULL == gtk_gs_defaults.dsc_cmd) || strcmp(gtk_gs_defaults.dsc_cmd, cmd)) {
350     if(gtk_gs_defaults.dsc_cmd)
351       g_free(gtk_gs_defaults.dsc_cmd);
352     gtk_gs_defaults.dsc_cmd = cmd;
353     gconf_client_set_string(gconf_client,
354                             "/apps/ggv/gtkgs/pdf2dsc",
355                             gtk_gs_defaults_get_dsc_cmd(), NULL);
356   }
357 }
358
359 void
360 gtk_gs_defaults_set_ungzip_cmd(gchar * cmd)
361 {
362   if((NULL == gtk_gs_defaults.ungzip_cmd) ||
363      strcmp(gtk_gs_defaults.ungzip_cmd, cmd)) {
364     if(gtk_gs_defaults.ungzip_cmd)
365       g_free(gtk_gs_defaults.ungzip_cmd);
366     gtk_gs_defaults.ungzip_cmd = cmd;
367     gconf_client_set_string(gconf_client,
368                             "/apps/ggv/gtkgs/ungzip",
369                             gtk_gs_defaults_get_ungzip_cmd(), NULL);
370   }
371 }
372
373 void
374 gtk_gs_defaults_set_unbzip2_cmd(gchar * cmd)
375 {
376   if((NULL == gtk_gs_defaults.unbzip2_cmd) ||
377      strcmp(gtk_gs_defaults.unbzip2_cmd, cmd)) {
378     if(gtk_gs_defaults.unbzip2_cmd)
379       g_free(gtk_gs_defaults.unbzip2_cmd);
380     gtk_gs_defaults.unbzip2_cmd = cmd;
381     gconf_client_set_string(gconf_client,
382                             "/apps/ggv/gtkgs/unbzip2",
383                             gtk_gs_defaults_get_unbzip2_cmd(), NULL);
384   }
385 }
386
387 GtkGSZoomMode
388 gtk_gs_defaults_get_zoom_mode()
389 {
390   return gtk_gs_defaults.zoom_mode;
391 }
392
393 void
394 gtk_gs_defaults_set_zoom_mode(GtkGSZoomMode zoom_mode)
395 {
396   if(gtk_gs_defaults.zoom_mode != zoom_mode) {
397     gtk_gs_defaults.zoom_mode = zoom_mode;
398     gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/zoommode",
399                          gtk_gs_defaults_get_zoom_mode(), NULL);
400   }
401 }
402
403 static GConfClient *
404 gtk_gs_defaults_gconf_client()
405 {
406   if(!gconf_client) {
407     g_assert(gconf_is_initialized());
408     gconf_client = gconf_client_get_default();
409     g_assert(gconf_client != NULL);
410     gconf_client_add_dir(gconf_client, "/apps/ggv/gtkgs",
411                          GCONF_CLIENT_PRELOAD_RECURSIVE, NULL);
412     gconf_client_notify_add(gconf_client,
413                             "/apps/ggv/gtkgs", (GConfClientNotifyFunc)
414                             gtk_gs_defaults_changed, NULL, NULL, NULL);
415   }
416
417   return gconf_client;
418 }
419
420 void
421 gtk_gs_defaults_load()
422 {
423   gtk_gs_defaults_gconf_client();
424
425   gtk_gs_defaults.respect_eof =
426     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/respect_eof", NULL));
427   gtk_gs_defaults.override_size =
428     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/override_size",
429                            NULL));
430   gtk_gs_defaults.override_orientation =
431     (gconf_client_get_bool
432      (gconf_client, "/apps/ggv/gtkgs/override_orientation", NULL));
433   gtk_gs_defaults.antialiased =
434     (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/antialiasing", NULL));
435   gtk_gs_defaults.default_size =
436     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/size", NULL));
437   gtk_gs_defaults.zoom_factor =
438     (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/zoom", NULL));
439   gtk_gs_defaults.fallback_orientation =
440     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/orientation", NULL));
441   gtk_gs_defaults.interpreter_cmd =
442     (gconf_client_get_string
443      (gconf_client, "/apps/ggv/gtkgs/interpreter", NULL));
444   gtk_gs_defaults.alpha_params =
445     (gconf_client_get_string
446      (gconf_client, "/apps/ggv/gtkgs/alphaparams", NULL));
447   gtk_gs_defaults.convert_pdf_cmd =
448     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/convertpdf", NULL));
449   gtk_gs_defaults.dsc_cmd =
450     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
451   gtk_gs_defaults.ungzip_cmd =
452     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/ungzip", NULL));
453   gtk_gs_defaults.unbzip2_cmd =
454     (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/unbzip2", NULL));
455   gtk_gs_defaults.show_scroll_rect =
456     (gconf_client_get_bool
457      (gconf_client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
458   gtk_gs_defaults.scroll_step =
459     (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/scrollstep", NULL));
460   gtk_gs_defaults.zoom_mode =
461     (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/zoommode", NULL));
462 }
463
464 static void
465 gtk_gs_defaults_changed(GConfClient * client, guint cnxn_id,
466                         GConfEntry * entry, gpointer user_data)
467 {
468   if(!strcmp(entry->key, "/apps/ggv/gtkgs/respect_eof"))
469     gtk_gs_defaults_set_respect_eof
470       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/respect_eof", NULL));
471   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_orientation"))
472     gtk_gs_defaults_set_override_orientation
473       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_orientation",
474                              NULL));
475   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/orientation"))
476     gtk_gs_defaults_set_orientation
477       (gconf_client_get_int(client, "/apps/ggv/gtkgs/orientation", NULL));
478   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoom"))
479     gtk_gs_defaults_set_zoom_factor
480       (gconf_client_get_float(client, "/apps/ggv/gtkgs/zoom", NULL));
481   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/size"))
482     gtk_gs_defaults_set_size
483       (gconf_client_get_int(client, "/apps/ggv/gtkgs/size", NULL));
484   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/antialiasing"))
485     gtk_gs_defaults_set_antialiased
486       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/antialiasing", NULL));
487   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_size"))
488     gtk_gs_defaults_set_override_size
489       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_size", NULL));
490   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/show_scroll_rect"))
491     gtk_gs_defaults_set_show_scroll_rect
492       (gconf_client_get_bool(client, "/apps/ggv/gtkgs/show_scroll_rect", NULL));
493   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/interpreter"))
494     gtk_gs_defaults_set_interpreter_cmd
495       (gconf_client_get_string(client, "/apps/ggv/gtkgs/interpreter", NULL));
496   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/alphaparams"))
497     gtk_gs_defaults_set_alpha_parameters
498       (gconf_client_get_string(client, "/apps/ggv/gtkgs/alphaparams", NULL));
499   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/convertpdf"))
500     gtk_gs_defaults_set_convert_pdf_cmd
501       (gconf_client_get_string(client, "/apps/ggv/gtkgs/convertpdf", NULL));
502   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/pdf2dsc"))
503     gtk_gs_defaults_set_dsc_cmd
504       (gconf_client_get_string(client, "/apps/ggv/gtkgs/pdf2dsc", NULL));
505   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/ungzip"))
506     gtk_gs_defaults_set_ungzip_cmd
507       (gconf_client_get_string(client, "/apps/ggv/gtkgs/ungzip", NULL));
508   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/unbzip2"))
509     gtk_gs_defaults_set_unbzip2_cmd
510       (gconf_client_get_string(client, "/apps/ggv/gtkgs/unbzip2", NULL));
511   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoommode"))
512     gtk_gs_defaults_set_zoom_mode
513       (gconf_client_get_int(client, "/apps/ggv/gtkgs/zoommode", NULL));
514   else if(!strcmp(entry->key, "/apps/ggv/gtkgs/scrollstep"))
515     gtk_gs_defaults_set_scroll_step
516       (gconf_client_get_float(client, "/apps/ggv/gtkgs/scrollstep", NULL));
517 }