From fb1055dd92e9aa1173de92add6f4a6f5e4a62d2d Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Wed, 22 Dec 2004 10:53:40 +0000 Subject: Import ggv backend. Not hooked up yet. 2004-12-22 Marco Pesenti Gritti * Makefile.am: * configure.ac: * ps/Makefile.am: * ps/ggvutils.c: * ps/ggvutils.h: * ps/gsdefaults.c: * ps/gsdefaults.h: * ps/gsio.c: * ps/gsio.h: * ps/gtkgs.c: * ps/gtkgs.h: * ps/ps.c: * ps/ps.h: Import ggv backend. Not hooked up yet. --- (limited to 'ps/gsdefaults.c') diff --git a/ps/gsdefaults.c b/ps/gsdefaults.c new file mode 100644 index 0000000..d5d2fbb --- /dev/null +++ b/ps/gsdefaults.c @@ -0,0 +1,505 @@ +/* + * gsdefaults.c: default settings for the GtkGS widget + * + * Copyright 2002 - 2005 the Free Software Foundation + * + * Author: Jaka Mocnik + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include + +#include +#include + +#include "gtkgs.h" +#include "gsdefaults.h" +#include "ggvutils.h" + +#include + +/** + * defaults for GtkGS widgets + **/ + +static GConfClient *gconf_client; + +/* Default values to pass to gtk_gs_init */ +typedef struct _GtkGSDefaults { + gboolean antialiased; + gboolean override_size; + gint default_size; + gboolean override_orientation; + gboolean respect_eof; + gboolean show_scroll_rect; + gint fallback_orientation; + gfloat zoom_factor; + gfloat scroll_step; + gchar *interpreter_cmd; + gchar *alpha_params; + gchar *dsc_cmd; + gchar *convert_pdf_cmd; + gchar *ungzip_cmd; + gchar *unbzip2_cmd; + GtkGSZoomMode zoom_mode; +} GtkGSDefaults; + +static GtkGSDefaults gtk_gs_defaults = { + TRUE, FALSE, 8, FALSE, TRUE, TRUE, + 0, 1.0, 0.25, NULL, NULL, NULL, NULL, NULL, NULL, + GTK_GS_ZOOM_ABSOLUTE +}; + +void +gtk_gs_defaults_set_scroll_step(gfloat step) +{ + if(fabs(gtk_gs_defaults.scroll_step - step) > 0.001) { + gtk_gs_defaults.scroll_step = step; + gconf_client_set_float(gconf_client, + "/apps/ggv/gtkgs/scrollstep", + gtk_gs_defaults_get_scroll_step(), NULL); + } +} + +gfloat +gtk_gs_defaults_get_scroll_step() +{ + return gtk_gs_defaults.scroll_step; +} + +void +gtk_gs_defaults_set_size(gint iNewPageSize) +{ + if(gtk_gs_defaults.default_size != iNewPageSize) { + gtk_gs_defaults.default_size = iNewPageSize; + gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/size", + gtk_gs_defaults_get_size(), NULL); + } +} + +gint +gtk_gs_defaults_get_size() +{ + return gtk_gs_defaults.default_size; +} + +void +gtk_gs_defaults_set_override_size(gboolean bOverrSize) +{ + if(gtk_gs_defaults.override_size != bOverrSize) { + gtk_gs_defaults.override_size = bOverrSize; + gconf_client_set_bool(gconf_client, + "/apps/ggv/gtkgs/override_size", + gtk_gs_defaults_get_override_size(), NULL); + } +} + +gboolean +gtk_gs_defaults_get_override_size() +{ + return gtk_gs_defaults.override_size; +} + +void +gtk_gs_defaults_set_override_orientation(gboolean bOverOrien) +{ + if(gtk_gs_defaults.override_orientation != bOverOrien) { + gtk_gs_defaults.override_orientation = bOverOrien; + gconf_client_set_bool(gconf_client, + "/apps/ggv/gtkgs/override_orientation", + gtk_gs_defaults_get_override_orientation(), NULL); + } +} + +gboolean +gtk_gs_defaults_get_override_orientation() +{ + return gtk_gs_defaults.override_orientation; +} + +void +gtk_gs_defaults_set_antialiased(gint iNewAntialiased) +{ + if(gtk_gs_defaults.antialiased != iNewAntialiased) { + gtk_gs_defaults.antialiased = iNewAntialiased; + gconf_client_set_bool(gconf_client, + "/apps/ggv/gtkgs/antialiasing", + gtk_gs_defaults_get_antialiased(), NULL); + } +} + +gboolean +gtk_gs_defaults_get_antialiased() +{ + return gtk_gs_defaults.antialiased; +} + +void +gtk_gs_defaults_set_zoom_factor(gfloat fZoom) +{ + fZoom = MIN(fZoom, 30.0); + fZoom = MAX(0.05, fZoom); + if(fabs(gtk_gs_defaults.zoom_factor - fZoom) > 0.001) { + gtk_gs_defaults.zoom_factor = fZoom; + gconf_client_set_float(gconf_client, "/apps/ggv/gtkgs/zoom", + gtk_gs_defaults_get_zoom_factor(), NULL); + } +} + +gfloat +gtk_gs_defaults_get_zoom_factor() +{ + return gtk_gs_defaults.zoom_factor; +} + +void +gtk_gs_defaults_set_orientation(gint iNewOrientation) +{ + g_assert((iNewOrientation == GTK_GS_ORIENTATION_PORTRAIT) || + (iNewOrientation == GTK_GS_ORIENTATION_LANDSCAPE) || + (iNewOrientation == GTK_GS_ORIENTATION_UPSIDEDOWN) || + (iNewOrientation == GTK_GS_ORIENTATION_SEASCAPE)); + if(gtk_gs_defaults.fallback_orientation != iNewOrientation) { + gtk_gs_defaults.fallback_orientation = iNewOrientation; + gconf_client_set_int(gconf_client, + "/apps/ggv/gtkgs/orientation", + gtk_gs_defaults_get_orientation(), NULL); + } +} + +gint +gtk_gs_defaults_get_orientation() +{ + return gtk_gs_defaults.fallback_orientation; +} + +void +gtk_gs_defaults_set_respect_eof(gboolean resp) +{ + if(gtk_gs_defaults.respect_eof != resp) { + gtk_gs_defaults.respect_eof = resp; + gconf_client_set_bool(gconf_client, + "/apps/ggv/gtkgs/respect_eof", + gtk_gs_defaults_get_respect_eof(), NULL); + } +} + +gboolean +gtk_gs_defaults_get_respect_eof() +{ + return gtk_gs_defaults.respect_eof; +} + +GtkGSPaperSize * +gtk_gs_defaults_get_paper_sizes() +{ + return ggv_paper_sizes; +} + +gint +gtk_gs_defaults_get_paper_count() +{ + gint n = 0; + + while(ggv_paper_sizes[n].name != NULL) + n++; + + return n; +} + +gboolean +gtk_gs_defaults_get_show_scroll_rect() +{ + return gtk_gs_defaults.show_scroll_rect; +} + +void +gtk_gs_defaults_set_show_scroll_rect(gboolean f) +{ + if(gtk_gs_defaults.show_scroll_rect != f) { + gtk_gs_defaults.show_scroll_rect = f; + gconf_client_set_bool(gconf_client, + "/apps/ggv/gtkgs/show_scroll_rect", + gtk_gs_defaults_get_show_scroll_rect(), NULL); + } +} + +const gchar * +gtk_gs_defaults_get_interpreter_cmd() +{ + if(!gtk_gs_defaults.interpreter_cmd) + return GS_PATH; + return gtk_gs_defaults.interpreter_cmd; +} + +const gchar * +gtk_gs_defaults_get_alpha_parameters() +{ + if(!gtk_gs_defaults.alpha_params) + return ALPHA_PARAMS; + return gtk_gs_defaults.alpha_params; +} + +const gchar * +gtk_gs_defaults_get_convert_pdf_cmd() +{ + if(!gtk_gs_defaults.convert_pdf_cmd) + return GS_PATH + " -q -dNOPAUSE -dBATCH -dSAFER" + " -dQUIET -sDEVICE=pswrite" " -sOutputFile=%s -c save pop -f %s"; + return gtk_gs_defaults.convert_pdf_cmd; +} + +const gchar * +gtk_gs_defaults_get_dsc_cmd() +{ + if(!gtk_gs_defaults.dsc_cmd) + return GS_PATH + " -q -dNODISPLAY -dSAFER -dDELAYSAFER" + " -sDSCname=%s -sPDFname=%s pdf2dsc.ps" " -c quit"; + return gtk_gs_defaults.dsc_cmd; +} + +const gchar * +gtk_gs_defaults_get_ungzip_cmd() +{ + if(!gtk_gs_defaults.ungzip_cmd) + return "gzip -cd"; + return gtk_gs_defaults.ungzip_cmd; +} + +const gchar * +gtk_gs_defaults_get_unbzip2_cmd() +{ + if(!gtk_gs_defaults.unbzip2_cmd) + return "bzip2 -cd"; + return gtk_gs_defaults.unbzip2_cmd; +} + +void +gtk_gs_defaults_set_interpreter_cmd(gchar * cmd) +{ + if((NULL == gtk_gs_defaults.interpreter_cmd) || + strcmp(gtk_gs_defaults.interpreter_cmd, cmd)) { + if(gtk_gs_defaults.interpreter_cmd) + g_free(gtk_gs_defaults.interpreter_cmd); + gtk_gs_defaults.interpreter_cmd = cmd; + gconf_client_set_string(gconf_client, + "/apps/ggv/gtkgs/interpreter", + gtk_gs_defaults_get_interpreter_cmd(), NULL); + } +} + +void +gtk_gs_defaults_set_alpha_parameters(gchar * par) +{ + if((NULL == gtk_gs_defaults.alpha_params) || + strcmp(gtk_gs_defaults.alpha_params, par)) { + if(gtk_gs_defaults.alpha_params) + g_free(gtk_gs_defaults.alpha_params); + gtk_gs_defaults.alpha_params = par; + gconf_client_set_string(gconf_client, + "/apps/ggv/gtkgs/alphaparams", + gtk_gs_defaults_get_alpha_parameters(), NULL); + } +} + +void +gtk_gs_defaults_set_convert_pdf_cmd(gchar * cmd) +{ + if((NULL == gtk_gs_defaults.convert_pdf_cmd) || + strcmp(gtk_gs_defaults.convert_pdf_cmd, cmd)) { + if(gtk_gs_defaults.convert_pdf_cmd) + g_free(gtk_gs_defaults.convert_pdf_cmd); + gtk_gs_defaults.convert_pdf_cmd = cmd; + gconf_client_set_string(gconf_client, + "/apps/ggv/gtkgs/convertpdf", + gtk_gs_defaults_get_convert_pdf_cmd(), NULL); + } +} + +void +gtk_gs_defaults_set_dsc_cmd(gchar * cmd) +{ + if((NULL == gtk_gs_defaults.dsc_cmd) || strcmp(gtk_gs_defaults.dsc_cmd, cmd)) { + if(gtk_gs_defaults.dsc_cmd) + g_free(gtk_gs_defaults.dsc_cmd); + gtk_gs_defaults.dsc_cmd = cmd; + gconf_client_set_string(gconf_client, + "/apps/ggv/gtkgs/pdf2dsc", + gtk_gs_defaults_get_dsc_cmd(), NULL); + } +} + +void +gtk_gs_defaults_set_ungzip_cmd(gchar * cmd) +{ + if((NULL == gtk_gs_defaults.ungzip_cmd) || + strcmp(gtk_gs_defaults.ungzip_cmd, cmd)) { + if(gtk_gs_defaults.ungzip_cmd) + g_free(gtk_gs_defaults.ungzip_cmd); + gtk_gs_defaults.ungzip_cmd = cmd; + gconf_client_set_string(gconf_client, + "/apps/ggv/gtkgs/ungzip", + gtk_gs_defaults_get_ungzip_cmd(), NULL); + } +} + +void +gtk_gs_defaults_set_unbzip2_cmd(gchar * cmd) +{ + if((NULL == gtk_gs_defaults.unbzip2_cmd) || + strcmp(gtk_gs_defaults.unbzip2_cmd, cmd)) { + if(gtk_gs_defaults.unbzip2_cmd) + g_free(gtk_gs_defaults.unbzip2_cmd); + gtk_gs_defaults.unbzip2_cmd = cmd; + gconf_client_set_string(gconf_client, + "/apps/ggv/gtkgs/unbzip2", + gtk_gs_defaults_get_unbzip2_cmd(), NULL); + } +} + +GtkGSZoomMode +gtk_gs_defaults_get_zoom_mode() +{ + return gtk_gs_defaults.zoom_mode; +} + +void +gtk_gs_defaults_set_zoom_mode(GtkGSZoomMode zoom_mode) +{ + if(gtk_gs_defaults.zoom_mode != zoom_mode) { + gtk_gs_defaults.zoom_mode = zoom_mode; + gconf_client_set_int(gconf_client, "/apps/ggv/gtkgs/zoommode", + gtk_gs_defaults_get_zoom_mode(), NULL); + } +} + +void +gtk_gs_defaults_load() +{ + gtk_gs_defaults_gconf_client(); + + gtk_gs_defaults.respect_eof = + (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/respect_eof", NULL)); + gtk_gs_defaults.override_size = + (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/override_size", + NULL)); + gtk_gs_defaults.override_orientation = + (gconf_client_get_bool + (gconf_client, "/apps/ggv/gtkgs/override_orientation", NULL)); + gtk_gs_defaults.antialiased = + (gconf_client_get_bool(gconf_client, "/apps/ggv/gtkgs/antialiasing", NULL)); + gtk_gs_defaults.default_size = + (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/size", NULL)); + gtk_gs_defaults.zoom_factor = + (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/zoom", NULL)); + gtk_gs_defaults.fallback_orientation = + (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/orientation", NULL)); + gtk_gs_defaults.interpreter_cmd = + (gconf_client_get_string + (gconf_client, "/apps/ggv/gtkgs/interpreter", NULL)); + gtk_gs_defaults.alpha_params = + (gconf_client_get_string + (gconf_client, "/apps/ggv/gtkgs/alphaparams", NULL)); + gtk_gs_defaults.convert_pdf_cmd = + (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/convertpdf", NULL)); + gtk_gs_defaults.dsc_cmd = + (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/pdf2dsc", NULL)); + gtk_gs_defaults.ungzip_cmd = + (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/ungzip", NULL)); + gtk_gs_defaults.unbzip2_cmd = + (gconf_client_get_string(gconf_client, "/apps/ggv/gtkgs/unbzip2", NULL)); + gtk_gs_defaults.show_scroll_rect = + (gconf_client_get_bool + (gconf_client, "/apps/ggv/gtkgs/show_scroll_rect", NULL)); + gtk_gs_defaults.scroll_step = + (gconf_client_get_float(gconf_client, "/apps/ggv/gtkgs/scrollstep", NULL)); + gtk_gs_defaults.zoom_mode = + (gconf_client_get_int(gconf_client, "/apps/ggv/gtkgs/zoommode", NULL)); +} + +static void +gtk_gs_defaults_changed(GConfClient * client, guint cnxn_id, + GConfEntry * entry, gpointer user_data) +{ + if(!strcmp(entry->key, "/apps/ggv/gtkgs/respect_eof")) + gtk_gs_defaults_set_respect_eof + (gconf_client_get_bool(client, "/apps/ggv/gtkgs/respect_eof", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_orientation")) + gtk_gs_defaults_set_override_orientation + (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_orientation", + NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/orientation")) + gtk_gs_defaults_set_orientation + (gconf_client_get_int(client, "/apps/ggv/gtkgs/orientation", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoom")) + gtk_gs_defaults_set_zoom_factor + (gconf_client_get_float(client, "/apps/ggv/gtkgs/zoom", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/size")) + gtk_gs_defaults_set_size + (gconf_client_get_int(client, "/apps/ggv/gtkgs/size", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/antialiasing")) + gtk_gs_defaults_set_antialiased + (gconf_client_get_bool(client, "/apps/ggv/gtkgs/antialiasing", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/override_size")) + gtk_gs_defaults_set_override_size + (gconf_client_get_bool(client, "/apps/ggv/gtkgs/override_size", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/show_scroll_rect")) + gtk_gs_defaults_set_show_scroll_rect + (gconf_client_get_bool(client, "/apps/ggv/gtkgs/show_scroll_rect", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/interpreter")) + gtk_gs_defaults_set_interpreter_cmd + (gconf_client_get_string(client, "/apps/ggv/gtkgs/interpreter", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/alphaparams")) + gtk_gs_defaults_set_alpha_parameters + (gconf_client_get_string(client, "/apps/ggv/gtkgs/alphaparams", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/convertpdf")) + gtk_gs_defaults_set_convert_pdf_cmd + (gconf_client_get_string(client, "/apps/ggv/gtkgs/convertpdf", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/pdf2dsc")) + gtk_gs_defaults_set_dsc_cmd + (gconf_client_get_string(client, "/apps/ggv/gtkgs/pdf2dsc", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/ungzip")) + gtk_gs_defaults_set_ungzip_cmd + (gconf_client_get_string(client, "/apps/ggv/gtkgs/ungzip", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/unbzip2")) + gtk_gs_defaults_set_unbzip2_cmd + (gconf_client_get_string(client, "/apps/ggv/gtkgs/unbzip2", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/zoommode")) + gtk_gs_defaults_set_zoom_mode + (gconf_client_get_int(client, "/apps/ggv/gtkgs/zoommode", NULL)); + else if(!strcmp(entry->key, "/apps/ggv/gtkgs/scrollstep")) + gtk_gs_defaults_set_scroll_step + (gconf_client_get_float(client, "/apps/ggv/gtkgs/scrollstep", NULL)); +} + +GConfClient * +gtk_gs_defaults_gconf_client() +{ + if(!gconf_client) { + g_assert(gconf_is_initialized()); + gconf_client = gconf_client_get_default(); + g_assert(gconf_client != NULL); + gconf_client_add_dir(gconf_client, "/apps/ggv/gtkgs", + GCONF_CLIENT_PRELOAD_RECURSIVE, NULL); + gconf_client_notify_add(gconf_client, + "/apps/ggv/gtkgs", (GConfClientNotifyFunc) + gtk_gs_defaults_changed, NULL, NULL, NULL); + } + + return gconf_client; +} -- cgit v0.9.1