diff options
author | Marco Pesenti Gritti <marco@gnome.org> | 2005-03-03 10:06:43 (GMT) |
---|---|---|
committer | Marco Pesenti Gritti <marco@src.gnome.org> | 2005-03-03 10:06:43 (GMT) |
commit | d60348a1b1b0f5b9967dd4677118a94d1031171a (patch) | |
tree | b7cdb663be62d8edf70a2abda89b21af4cada3d4 /thumbnailer/evince-thumbnailer.c | |
parent | d166e5afd2bee4a12d943ca585a5acde1ea1eca4 (diff) |
Add a nautilus thumbnailer. Based on patch by Fernando Herrera
2005-03-03 Marco Pesenti Gritti <marco@gnome.org>
* Makefile.am:
* configure.ac:
* pdf/.cvsignore:
* pdf/pdf-document.cc:
* thumbnailer/Makefile.am:
* thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get),
(main):
* thumbnailer/evince-thumbnailer.schemas:
* thumbnailer/pdf-icon.png:
Add a nautilus thumbnailer.
Based on patch by Fernando Herrera <fherrera@onirica.com>.
Diffstat (limited to 'thumbnailer/evince-thumbnailer.c')
-rw-r--r-- | thumbnailer/evince-thumbnailer.c | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/thumbnailer/evince-thumbnailer.c b/thumbnailer/evince-thumbnailer.c new file mode 100644 index 0000000..505f5f3 --- /dev/null +++ b/thumbnailer/evince-thumbnailer.c @@ -0,0 +1,99 @@ +#include <pdf-document.h> + +#include <libgnomevfs/gnome-vfs-mime-utils.h> +#include <libgnomevfs/gnome-vfs-uri.h> +#include <libgnomevfs/gnome-vfs-utils.h> +#include <libgnomevfs/gnome-vfs-init.h> + +#include <ev-document.h> +#include <ev-document-thumbnails.h> + +#include <string.h> + +static gboolean +evince_thumbnail_pngenc_get (const char *uri, const char *thumbnail) +{ + EvDocument *document = NULL; + char *mime_type; + GError *error; + GdkPixbuf *pixbuf; + + mime_type = gnome_vfs_get_mime_type (uri); + if (mime_type == NULL) + return FALSE; + + if (!strcmp (mime_type, "application/pdf")) + document = g_object_new (PDF_TYPE_DOCUMENT, NULL); + else + return FALSE; + + if (!ev_document_load (document, uri, &error)) { + if (error->domain == EV_DOCUMENT_ERROR && + error->code == EV_DOCUMENT_ERROR_ENCRYPTED) { + /* FIXME: Create a thumb for cryp docs */ + } + g_error_free (error); + return FALSE; + } + + pixbuf = ev_document_thumbnails_get_thumbnail + (EV_DOCUMENT_THUMBNAILS (document), 1, 100); + + if (pixbuf != NULL) { + GdkPixbuf *pdflogo; + + pdflogo = gdk_pixbuf_new_from_file (DATADIR"/pdf-icon.png", NULL); + if (pdflogo != NULL) { + int delta_height, delta_width; + + delta_width = gdk_pixbuf_get_width (pixbuf) - + gdk_pixbuf_get_width (pdflogo); + delta_height = gdk_pixbuf_get_height (pixbuf) - + gdk_pixbuf_get_height (pdflogo); + + gdk_pixbuf_composite (pdflogo, pixbuf, + delta_width, delta_height, + gdk_pixbuf_get_width (pdflogo), + gdk_pixbuf_get_height (pdflogo), + delta_width, delta_height, + 1, 1, + GDK_INTERP_NEAREST, 100); + + gdk_pixbuf_unref (pdflogo); + } + if (gdk_pixbuf_save (pixbuf, thumbnail, "png", NULL, NULL)) { + gdk_pixbuf_unref (pixbuf); + g_object_unref (document); + return TRUE; + } else { + gdk_pixbuf_unref (pixbuf); + g_object_unref (document); + } + } + return FALSE; +} + +int +main (int argc, char *argv[]) +{ + int res; + char *uri; + + if (argc != 3) { + g_print ("%s: thumbnailer for Nautilus\n", argv[0]); + g_print ("usage: %s <input-filename> <output-filename>\n", argv[0]); + return -1; + } + + res = gnome_vfs_init (); + + uri = gnome_vfs_make_uri_from_shell_arg (argv[1]); + + if (evince_thumbnail_pngenc_get (uri, argv[2])) { + g_free (uri); + return 0; + } else { + g_free (uri); + return -2; + } +} |