Bug fix: --cache-maintenance and default theme color
[geeqie.git] / src / image_load_pdf.c
index ae00a9d..bdee61f 100644 (file)
@@ -36,6 +36,8 @@ struct _ImageLoaderPDF {
        guint requested_width;
        guint requested_height;
        gboolean abort;
+       gint page_num;
+       gint page_total;
 };
 
 static gboolean image_loader_pdf_load(gpointer loader, const guchar *buf, gsize count, GError **error)
@@ -44,13 +46,12 @@ static gboolean image_loader_pdf_load(gpointer loader, const guchar *buf, gsize
        GError *poppler_error = NULL;
        PopplerPage *page;
        PopplerDocument *document;
-       gint page_num;
        gdouble width, height;
        cairo_surface_t *surface;
        cairo_t *cr;
        gboolean ret = FALSE;
+       gint page_total;
 
-       page_num = 0;
        document = poppler_document_new_from_data((gchar *)buf, count, NULL, &poppler_error);
 
        if (poppler_error)
@@ -60,13 +61,23 @@ static gboolean image_loader_pdf_load(gpointer loader, const guchar *buf, gsize
                }
        else
                {
-               page = poppler_document_get_page(document, page_num);
+               page_total = poppler_document_get_n_pages(document);
+               if (page_total > 0)
+                       {
+                       ld->page_total = page_total;
+                       }
+
+               page = poppler_document_get_page(document, ld->page_num);
                poppler_page_get_size(page, &width, &height);
 
                surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
                cr = cairo_create(surface);
                poppler_page_render(page, cr);
 
+               cairo_set_operator(cr, CAIRO_OPERATOR_DEST_OVER);
+               cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+               cairo_paint(cr);
+
                ld->pixbuf = gdk_pixbuf_get_from_surface(surface, 0, 0, width, height);
                ld->area_updated_cb(loader, 0, 0, width, height, ld->data);
 
@@ -88,6 +99,7 @@ static gpointer image_loader_pdf_new(ImageLoaderBackendCbAreaUpdated area_update
        loader->size_cb = size_cb;
        loader->area_prepared_cb = area_prepared_cb;
        loader->data = data;
+       loader->page_num = 0;
        return (gpointer) loader;
 }
 
@@ -115,6 +127,20 @@ static gchar** image_loader_pdf_get_format_mime_types(gpointer loader)
        return g_strdupv(mime);
 }
 
+static void image_loader_pdf_set_page_num(gpointer loader, gint page_num)
+{
+       ImageLoaderPDF *ld = (ImageLoaderPDF *) loader;
+
+       ld->page_num = page_num;
+}
+
+static gint image_loader_pdf_get_page_total(gpointer loader)
+{
+       ImageLoaderPDF *ld = (ImageLoaderPDF *) loader;
+
+       return ld->page_total;
+}
+
 static gboolean image_loader_pdf_close(gpointer loader, GError **error)
 {
        return TRUE;
@@ -145,6 +171,8 @@ void image_loader_backend_set_pdf(ImageLoaderBackend *funcs)
        funcs->free = image_loader_pdf_free;
        funcs->get_format_name = image_loader_pdf_get_format_name;
        funcs->get_format_mime_types = image_loader_pdf_get_format_mime_types;
+       funcs->set_page_num = image_loader_pdf_set_page_num;
+       funcs->get_page_total = image_loader_pdf_get_page_total;
 }
 
 #endif