]> www.fi.muni.cz Git - evince.git/blobdiff - tiff/tiff-document.c
Make frontends depend on just libev. Rework and group CFLAGS/LIBS
[evince.git] / tiff / tiff-document.c
index 3324e7d1d664ccb325067806c92f94da7baf3689..36847aa45f3173cdd2fd79bf6cafdf016654336a 100644 (file)
@@ -1,4 +1,3 @@
-
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
 /*
  * Copyright (C) 2005, Jonathan Blandford <jrb@gnome.org>
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-/* FIXME: Shoudl probably buffer calls to libtiff with TIFFSetWarningHandler
+/* FIXME: Should probably buffer calls to libtiff with TIFFSetWarningHandler
  */
+
+#include <stdio.h>
+#include <glib.h>
+
 #include "tiffio.h"
+#include "tiff2ps.h"
 #include "tiff-document.h"
-#include "ev-document-thumbnails.h"
 #include "ev-document-misc.h"
+#include "ev-document-thumbnails.h"
+#include "ev-ps-exporter.h"
 
 struct _TiffDocumentClass
 {
@@ -37,18 +42,22 @@ struct _TiffDocument
   TIFF *tiff;
   gint n_pages;
   EvOrientation orientation;
+  TIFF2PSContext *ps_export_ctx;
 };
 
 typedef struct _TiffDocumentClass TiffDocumentClass;
 
 static void tiff_document_document_iface_init (EvDocumentIface *iface);
 static void tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface);
+static void tiff_document_document_ps_exporter_iface_init (EvPSExporterIface *iface);
 
 G_DEFINE_TYPE_WITH_CODE (TiffDocument, tiff_document, G_TYPE_OBJECT,
                          { G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT,
                                                  tiff_document_document_iface_init);
                           G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
                                                  tiff_document_document_thumbnails_iface_init);
+                          G_IMPLEMENT_INTERFACE (EV_TYPE_PS_EXPORTER,
+                                                 tiff_document_document_ps_exporter_iface_init);
                         });
 
 static TIFFErrorHandler orig_error_handler = NULL;
@@ -398,6 +407,47 @@ tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface)
   iface->get_dimensions = tiff_document_thumbnails_get_dimensions;
 }
 
+/* postscript exporter implementation */
+
+static void
+tiff_document_ps_export_begin (EvPSExporter *exporter, const char *filename,
+                              int first_page, int last_page)
+{
+       TiffDocument *document = TIFF_DOCUMENT (exporter);
+
+       document->ps_export_ctx = tiff2ps_context_new(filename);
+}
+
+static void
+tiff_document_ps_export_do_page (EvPSExporter *exporter, int page)
+{
+       TiffDocument *document = TIFF_DOCUMENT (exporter);
+
+       if (document->ps_export_ctx == NULL)
+               return;
+       if (TIFFSetDirectory (document->tiff, page) != 1)
+               return;
+       tiff2ps_process_page (document->ps_export_ctx, document->tiff,
+                             0, 0, 0, 0, 0);
+}
+
+static void
+tiff_document_ps_export_end (EvPSExporter *exporter)
+{
+       TiffDocument *document = TIFF_DOCUMENT (exporter);
+
+       if (document->ps_export_ctx == NULL)
+               return;
+       tiff2ps_context_finalize(document->ps_export_ctx);
+}
+
+static void
+tiff_document_document_ps_exporter_iface_init (EvPSExporterIface *iface)
+{
+       iface->begin = tiff_document_ps_export_begin;
+       iface->do_page = tiff_document_ps_export_do_page;
+       iface->end = tiff_document_ps_export_end;
+}
 
 static void
 tiff_document_init (TiffDocument *tiff_document)