]> www.fi.muni.cz Git - evince.git/commitdiff
add GnomePrintJob to EvPrintJob constructor arguments.
authorMartin Kretzschmar <martink@src.gnome.org>
Thu, 23 Dec 2004 01:08:19 +0000 (01:08 +0000)
committerMartin Kretzschmar <martink@src.gnome.org>
Thu, 23 Dec 2004 01:08:19 +0000 (01:08 +0000)
* shell/ev-window.c (ev_window_print): add GnomePrintJob to
EvPrintJob constructor arguments.

* backend/ev-ps-exporter.c, backend/ev-ps-exporter.h: interface
for documents that can export PostScript (page by page).

* backend/Makefile.am (libevbackend_la_SOURCES): add them.

* pdf/xpdf/pdf-document.cc (pdf_document_ps_export_begin)
(pdf_document_ps_export_do_page, pdf_document_ps_export_end)
(pdf_document_ps_exporter_iface_init:
Implement EvPSExporter.

* pdf/xpdf/Makefile.am (libxpdf_la_SOURCES): build PSOutputDev.

ChangeLog
backend/Makefile.am
backend/ev-ps-exporter.c [new file with mode: 0644]
backend/ev-ps-exporter.h [new file with mode: 0644]
pdf/xpdf/Makefile.am
pdf/xpdf/pdf-document.cc
shell/ev-window.c

index 49ac93b68337aff93b4f9b562166c1d07978fdeb..c92c80fd8ec83c34a7dfd12be39187bf3a7e7772 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2004-12-23  Martin Kretzschmar  <martink@gnome.org>
+
+       * shell/ev-window.c (ev_window_print): add GnomePrintJob to
+       EvPrintJob constructor arguments.
+
+       * backend/ev-ps-exporter.c, backend/ev-ps-exporter.h: interface
+       for documents that can export PostScript (page by page).
+
+       * backend/Makefile.am (libevbackend_la_SOURCES): add them.
+       
+       * pdf/xpdf/pdf-document.cc (pdf_document_ps_export_begin)
+       (pdf_document_ps_export_do_page, pdf_document_ps_export_end)
+       (pdf_document_ps_exporter_iface_init:
+       Implement EvPSExporter.
+
+       * pdf/xpdf/Makefile.am (libxpdf_la_SOURCES): build PSOutputDev.
+
 2004-12-22  Anders Carlsson  <andersca@gnome.org>
 
        * backend/Makefile.am:
index 2f54157cef0eb330d5282ac7da1828fb45b28727..5ccd5a100450514f24d69dbe1634b37fbe5df15a 100644 (file)
@@ -17,6 +17,8 @@ libevbackend_la_SOURCES=                      \
        ev-document-thumbnails.h                \
        ev-document-bookmarks.c                 \
        ev-document-bookmarks.h                 \
+       ev-ps-exporter.c                        \
+       ev-ps-exporter.h                        \
        $(NULL)
 
 ev-backend-marshalers.h: ev-backend-marshalers.list
diff --git a/backend/ev-ps-exporter.c b/backend/ev-ps-exporter.c
new file mode 100644 (file)
index 0000000..f5b5568
--- /dev/null
@@ -0,0 +1,71 @@
+/* this file is part of evince, a gnome document viewer
+ *
+ *  Copyright (C) 2004 Martin Kretzschmar
+ *
+ *  Author:
+ *    Martin Kretzschmar <martink@gnome.org>
+ *
+ * Evince 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.
+ *
+ * Evince 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include "ev-ps-exporter.h"
+
+GType
+ev_ps_exporter_get_type (void)
+{
+       static GType type = 0;
+
+       if (G_UNLIKELY (type == 0))
+       {
+               static const GTypeInfo our_info =
+               {
+                       sizeof (EvPSExporterIface),
+                       NULL,
+                       NULL,
+               };
+
+               type = g_type_register_static (G_TYPE_INTERFACE,
+                                              "EvPSExporter",
+                                              &our_info, (GTypeFlags)0);
+       }
+
+       return type;
+}
+
+void
+ev_ps_exporter_begin (EvPSExporter *exporter, const char *filename)
+{
+       EvPSExporterIface *iface = EV_PS_EXPORTER_GET_IFACE (exporter);
+
+       iface->begin (exporter, filename);
+}
+
+void
+ev_ps_exporter_do_page (EvPSExporter *exporter, int page)
+{
+       EvPSExporterIface *iface = EV_PS_EXPORTER_GET_IFACE (exporter);
+
+       iface->do_page (exporter, page);
+}
+
+void
+ev_ps_exporter_end     (EvPSExporter *exporter)
+{
+       EvPSExporterIface *iface = EV_PS_EXPORTER_GET_IFACE (exporter);
+
+       iface->end (exporter);
+}
diff --git a/backend/ev-ps-exporter.h b/backend/ev-ps-exporter.h
new file mode 100644 (file)
index 0000000..58917e8
--- /dev/null
@@ -0,0 +1,58 @@
+/* this file is part of evince, a gnome document viewer
+ *
+ *  Copyright (C) 2004 Martin Kretzschmar
+ *
+ *  Author:
+ *    Martin Kretzschmar <martink@gnome.org>
+ *
+ * Evince 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.
+ *
+ * Evince 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef EV_PS_EXPORTER_H
+#define EV_PS_EXPORTER_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EV_TYPE_PS_EXPORTER           (ev_ps_exporter_get_type ())
+#define EV_PS_EXPORTER(o)             (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_PS_EXPORTER, EvPSExporter))
+#define EV_PS_EXPORTER_IFACE(k)               (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_PS_EXPORTER, EvPSExporterIface))
+#define EV_IS_PS_EXPORTER(o)          (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_PS_EXPORTER))
+#define EV_IS_PS_EXPORTER_IFACE(k)     (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_PS_EXPORTER))
+#define EV_PS_EXPORTER_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_PS_EXPORTER, EvPSExporterIface))
+
+typedef struct _EvPSExporter EvPSExporter;
+typedef struct _EvPSExporterIface EvPSExporterIface;
+
+struct _EvPSExporterIface {
+       GTypeInterface base_iface;
+
+       /* Methods  */
+       void            (* begin)       (EvPSExporter *exporter,
+                                        const char   *filename);
+       void            (* do_page)     (EvPSExporter *exporter,
+                                        int           page);
+       void            (* end)         (EvPSExporter *exporter);
+};
+
+GType  ev_ps_exporter_get_type (void);
+void   ev_ps_exporter_begin    (EvPSExporter *exporter, const char *filename);
+void   ev_ps_exporter_do_page  (EvPSExporter *exporter, int page);
+void   ev_ps_exporter_end      (EvPSExporter *exporter);
+
+G_END_DECLS
+
+#endif
index 7c1b64374ead412dba5d0108394facc699e8cac3..9676c009c4d83733c1431c456caeca8c0c34454b 100644 (file)
@@ -93,6 +93,8 @@ libxpdf_la_SOURCES =          \
        NameToUnicodeTable.h    \
        GDKSplashOutputDev.cc   \
        GDKSplashOutputDev.h    \
+       PSOutputDev.cc          \
+       PSOutputDev.h           \
        TextOutputDev.cc        \
        TextOutputDev.h         \
        UTF8.h
index 9deda49e32e32ce5fa25ccf7e7b63354a9f824a8..8323ebe380677bfc646cf4f6abe92d2b8cce787f 100644 (file)
 
 #include "gpdf-g-switch.h"
 #include "pdf-document.h"
+#include "ev-ps-exporter.h"
 #include "gpdf-g-switch.h"
 
 #include "GlobalParams.h"
 #include "GDKSplashOutputDev.h"
 #include "PDFDoc.h"
+#include "PSOutputDev.h"
 
 typedef struct _PdfDocumentClass PdfDocumentClass;
 
@@ -47,16 +49,22 @@ struct _PdfDocument
        GdkDrawable *target;
 
        GDKSplashOutputDev *out;
+       PSOutputDev *ps_out;
        PDFDoc *doc;
 
        gboolean page_valid;
 };
 
 static void pdf_document_document_iface_init (EvDocumentIface *iface);
+static void pdf_document_ps_exporter_iface_init (EvPSExporterIface *iface);
 
 G_DEFINE_TYPE_WITH_CODE (PdfDocument, pdf_document, G_TYPE_OBJECT,
-                         { G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT,
-                                                 pdf_document_document_iface_init) });
+                         {
+                                G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT,
+                                                       pdf_document_document_iface_init);
+                                G_IMPLEMENT_INTERFACE (EV_TYPE_PS_EXPORTER,
+                                                       pdf_document_ps_exporter_iface_init);
+                        });
 
 static gboolean
 document_validate_page (PdfDocument *pdf_document)
@@ -354,6 +362,38 @@ pdf_document_end_find (EvDocument   *document)
         ev_document_found (document, NULL, 0, 1.0);
 }
 
+static void
+pdf_document_ps_export_begin (EvPSExporter *exporter, const char *filename)
+{
+       PdfDocument *document = PDF_DOCUMENT (exporter);
+
+       if (document->ps_out)
+               delete document->ps_out;
+
+       document->ps_out = new PSOutputDev ((char *)filename, document->doc->getXRef(),
+                                           document->doc->getCatalog(), 1,
+                                           ev_document_get_n_pages (EV_DOCUMENT (document)),
+                                           psModePS);  
+}
+
+static void
+pdf_document_ps_export_do_page (EvPSExporter *exporter, int page)
+{
+       PdfDocument *document = PDF_DOCUMENT (exporter);
+
+       document->doc->displayPage (document->ps_out, page,
+                                   72.0, 72.0, 0, gTrue, gFalse);
+}
+
+static void
+pdf_document_ps_export_end (EvPSExporter *exporter)
+{
+       PdfDocument *document = PDF_DOCUMENT (exporter);
+
+       delete document->ps_out;
+       document->ps_out = NULL;
+}
+
 static void
 pdf_document_finalize (GObject *object)
 {
@@ -364,6 +404,8 @@ pdf_document_finalize (GObject *object)
 
        if (pdf_document->out)
                delete pdf_document->out;
+       if (pdf_document->ps_out)
+               delete pdf_document->ps_out;
        if (pdf_document->doc)
                delete pdf_document->doc;
 
@@ -393,6 +435,14 @@ pdf_document_document_iface_init (EvDocumentIface *iface)
         iface->end_find = pdf_document_end_find;
 }
 
+static void
+pdf_document_ps_exporter_iface_init (EvPSExporterIface *iface)
+{
+       iface->begin = pdf_document_ps_export_begin;
+       iface->do_page = pdf_document_ps_export_do_page;
+       iface->end = pdf_document_ps_export_end;
+}
+
 static void
 pdf_document_init (PdfDocument *pdf_document)
 {
index 0ca5df0b7473168dbf362a488bac40377aaf9dd0..e0445c67fe1ed0a06736de06d1597a7a2d8ebd26 100644 (file)
@@ -377,8 +377,9 @@ ev_window_print (EvWindow *ev_window)
                }
 
                print_job = g_object_new (EV_TYPE_PRINT_JOB,
+                                         "gnome_print_job", job,
                                          "document", ev_window->priv->document,
-                                         "print-dialog", print_dialog,
+                                         "print_dialog", print_dialog,
                                          NULL);
                break;
        }