]> www.fi.muni.cz Git - evince.git/commitdiff
[xps] Add support for printing XPS Documents
authorCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 5 Sep 2010 16:35:16 +0000 (18:35 +0200)
committerCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 5 Sep 2010 16:35:16 +0000 (18:35 +0200)
backend/xps/xps-document.c

index 544742e08969886b2e179daae8c5b4c82f122341..4e290b0faea3f7658d15d7173977d2ec3c516f8d 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "xps-document.h"
 #include "ev-document-links.h"
+#include "ev-document-print.h"
 #include "ev-document-misc.h"
 
 struct _XPSDocument {
@@ -39,11 +40,14 @@ struct _XPSDocumentClass {
 };
 
 static void xps_document_document_links_iface_init (EvDocumentLinksInterface *iface);
+static void xps_document_document_print_iface_init (EvDocumentPrintInterface *iface);
 
 EV_BACKEND_REGISTER_WITH_CODE (XPSDocument, xps_document,
               {
                       EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_LINKS,
                                                       xps_document_document_links_iface_init);
+                      EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_PRINT,
+                                                      xps_document_document_print_iface_init);
               })
 
 /* XPSDocument */
@@ -478,3 +482,25 @@ xps_document_document_links_iface_init (EvDocumentLinksInterface *iface)
        iface->find_link_dest = xps_document_links_find_link_dest;
        iface->find_link_page = xps_document_links_find_link_page;
 }
+
+/* EvDocumentPrint */
+static void
+xps_document_print_print_page (EvDocumentPrint *document,
+                              EvPage          *page,
+                              cairo_t         *cr)
+{
+       GError *error = NULL;
+
+       gxps_page_render (GXPS_PAGE (page->backend_page), cr, &error);
+       if (error) {
+               g_warning ("Error rendering page %d for printing: %s\n",
+                          page->index, error->message);
+               g_error_free (error);
+       }
+}
+
+static void
+xps_document_document_print_iface_init (EvDocumentPrintInterface *iface)
+{
+       iface->print_page = xps_document_print_print_page;
+}