X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Fdvi%2Fdvi-document.c;h=d1411a8e6cc21f95dbdd5ab28e329a4ed19d378b;hb=88f8f66524a6f62263ca721e7289c3218e450f2c;hp=1d6ca082b54b57ce520516dcc5f3ea730c01ae36;hpb=96ee76c82cc04f84631bc396ec9c7284a49ac727;p=evince.git diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c index 1d6ca082..d1411a8e 100644 --- a/backend/dvi/dvi-document.c +++ b/backend/dvi/dvi-document.c @@ -20,6 +20,7 @@ #include "config.h" #include "dvi-document.h" +#include "texmfcnf.h" #include "ev-document-thumbnails.h" #include "ev-document-misc.h" #include "ev-file-exporter.h" @@ -32,6 +33,13 @@ #include #include +#ifdef G_OS_WIN32 +# define WIFEXITED(x) ((x) != 3) +# define WEXITSTATUS(x) (x) +#else +# include +#endif +#include GMutex *dvi_context_mutex = NULL; @@ -42,12 +50,12 @@ enum { struct _DviDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; struct _DviDocument { - GObject parent_instance; + EvDocument parent_instance; DviContext *context; DviPageSpec *spec; @@ -66,7 +74,6 @@ struct _DviDocument typedef struct _DviDocumentClass DviDocumentClass; -static void dvi_document_document_iface_init (EvDocumentIface *iface); static void dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static void dvi_document_file_exporter_iface_init (EvFileExporterIface *iface); static void dvi_document_do_color_special (DviContext *dvi, @@ -88,14 +95,8 @@ dvi_document_load (EvDocument *document, DviDocument *dvi_document = DVI_DOCUMENT(document); filename = g_filename_from_uri (uri, NULL, error); - - if (!filename) { - g_set_error (error, - EV_DOCUMENT_ERROR, - EV_DOCUMENT_ERROR_INVALID, - _("File not available")); + if (!filename) return FALSE; - } g_mutex_lock (dvi_context_mutex); if (dvi_document->context) @@ -106,10 +107,10 @@ dvi_document_load (EvDocument *document, g_free (filename); if (!dvi_document->context) { - g_set_error (error, - EV_DOCUMENT_ERROR, - EV_DOCUMENT_ERROR_INVALID, - _("DVI document has incorrect format")); + g_set_error_literal (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("DVI document has incorrect format")); return FALSE; } @@ -234,40 +235,29 @@ dvi_document_finalize (GObject *object) G_OBJECT_CLASS (dvi_document_parent_class)->finalize (object); } - static void dvi_document_class_init (DviDocumentClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + gchar *texmfcnf; gobject_class->finalize = dvi_document_finalize; - mdvi_init_kpathsea ("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI); + texmfcnf = get_texmfcnf(); + mdvi_init_kpathsea ("evince", MDVI_MFMODE, MDVI_FALLBACK_FONT, MDVI_DPI, texmfcnf); + g_free(texmfcnf); + mdvi_register_special ("Color", "color", NULL, dvi_document_do_color_special, 1); mdvi_register_fonts (); dvi_context_mutex = g_mutex_new (); -} - -static EvDocumentInfo * -dvi_document_get_info (EvDocument *document) -{ - EvDocumentInfo *info; - - info = g_new0 (EvDocumentInfo, 1); - - return info; -} -static void -dvi_document_document_iface_init (EvDocumentIface *iface) -{ - iface->load = dvi_document_load; - iface->save = dvi_document_save; - iface->get_n_pages = dvi_document_get_n_pages; - iface->get_page_size = dvi_document_get_page_size; - iface->render = dvi_document_render; - iface->get_info = dvi_document_get_info; + ev_document_class->load = dvi_document_load; + ev_document_class->save = dvi_document_save; + ev_document_class->get_n_pages = dvi_document_get_n_pages; + ev_document_class->get_page_size = dvi_document_get_page_size; + ev_document_class->render = dvi_document_render; } static void @@ -404,8 +394,8 @@ dvi_document_file_exporter_end (EvFileExporter *exporter) if (success == FALSE) { g_warning ("Error: %s", err->message); - } else if (exit_stat != 0) { - g_warning ("Error: dvipdfm exited with non-zero status."); + } else if (!WIFEXITED(exit_stat) || WEXITSTATUS(exit_stat) != EXIT_SUCCESS){ + g_warning ("Error: dvipdfm does not end normally or exit with a failure status."); } if (err) @@ -434,7 +424,7 @@ dvi_document_file_exporter_iface_init (EvFileExporterIface *iface) #define RGB2ULONG(r,g,b) ((0xFF<<24)|(r<<16)|(g<<8)|(b)) static gboolean -hsb2rgb (float h, float s, float v, char *red, char *green, char *blue) +hsb2rgb (float h, float s, float v, guchar *red, guchar *green, guchar *blue) { float i, f, p, q, t, r, g, b; @@ -478,9 +468,9 @@ hsb2rgb (float h, float s, float v, char *red, char *green, char *blue) b = q; } - (*red) = (char)floor(r * 255); - (*green) = (char)floor(g * 255); - (*blue) = (char)floor(b * 255); + *red = (guchar)floor(r * 255.0); + *green = (guchar)floor(g * 255.0); + *blue = (guchar)floor(b * 255.0); return TRUE; }