]> www.fi.muni.cz Git - evince.git/blobdiff - backend/ps/ev-spectre.c
Do not crash when thumbnail failed to render in PS backend. Fixes bug
[evince.git] / backend / ps / ev-spectre.c
index 82e3ca61ba6969d7b9d4e3da39f9f8f8b86b121d..6fe58692e1630f03d9e7047aca10c11fe6588c9b 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <config.h>
 
+#include <config.h>
 #include <glib/gi18n.h>
 #include <stdlib.h>
 #include <libspectre/spectre.h>
@@ -46,10 +47,10 @@ static void ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsIfac
 
 EV_BACKEND_REGISTER_WITH_CODE (PSDocument, ps_document,
                          {
-                                G_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
-                                                       ps_document_document_thumbnails_iface_init);
-                                G_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
-                                                       ps_document_file_exporter_iface_init);
+                                EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT_THUMBNAILS,
+                                                                ps_document_document_thumbnails_iface_init);
+                                EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_FILE_EXPORTER,
+                                                                ps_document_file_exporter_iface_init);
                         });
 
 /* PSDocument */
@@ -288,7 +289,9 @@ ps_document_render (EvDocument      *document,
        rotation = (rc->rotation + get_page_rotation (ps_page)) % 360;
 
        src = spectre_render_context_new ();
-       spectre_render_context_set_page_size (src, width, height);
+       spectre_render_context_set_scale (src,
+                                         (gdouble)width / width_points,
+                                         (gdouble)height / height_points);
        spectre_render_context_set_rotation (src, rotation);
        spectre_page_render (ps_page, src, &data, &stride);
        spectre_render_context_free (src);
@@ -348,6 +351,11 @@ ps_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
        GdkPixbuf       *pixbuf = NULL;
 
        surface = ps_document_render (EV_DOCUMENT (ps), rc);
+       if (!surface) {
+               g_warning ("Error rendering thumbnail");
+               return NULL;
+       }
+               
        pixbuf = ev_document_misc_pixbuf_from_surface (surface);
        cairo_surface_destroy (surface);