+/* Thumbnails */
+static GdkPixbuf *
+pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails,
+ gint page,
+ gint width)
+{
+ PdfDocument *pdf_document = PDF_DOCUMENT (document_thumbnails);
+ GdkPixbuf *thumbnail;
+ Page *the_page;
+ Object the_thumb;
+ Thumb *thumb = NULL;
+ gboolean have_ethumbs = FALSE;
+
+ /* getPage seems to want page + 1 for some reason; */
+ the_page = pdf_document->doc->getCatalog ()->getPage (page + 1);
+ the_page->getThumb(&the_thumb);
+
+ if (!(the_thumb.isNull () || the_thumb.isNone())) {
+ /* Build the thumbnail object */
+ thumb = new Thumb(pdf_document->doc->getXRef (),
+ &the_thumb);
+
+ have_ethumbs = thumb->ok();
+ }
+
+ if (have_ethumbs) {
+ guchar *data;
+ GdkPixbuf *tmp_pixbuf;
+
+ data = thumb->getPixbufData();
+ /* FISME: scale the image if it's not an appropriate size */
+ tmp_pixbuf = gdk_pixbuf_new_from_data (data,
+ GDK_COLORSPACE_RGB,
+ FALSE,
+ 8,
+ thumb->getWidth (),
+ thumb->getHeight (),
+ thumb->getWidth () * 3,
+ NULL, NULL);
+
+ thumbnail = tmp_pixbuf;
+ } else {
+ gdouble page_ratio;
+ gint dest_height;
+
+ page_ratio = the_page->getHeight () / the_page->getWidth ();
+ dest_height = (gint) (width * page_ratio);
+
+ thumbnail = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, dest_height);
+ gdk_pixbuf_fill (thumbnail, 0xffffffff);
+ /* FIXME: Actually get the image... */
+ }
+
+ return thumbnail;
+}
+static void
+pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface)
+{
+ iface->get_thumbnail = pdf_document_thumbnails_get_thumbnail;
+}
+