From d60348a1b1b0f5b9967dd4677118a94d1031171a Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 03 Mar 2005 10:06:43 +0000 Subject: Add a nautilus thumbnailer. Based on patch by Fernando Herrera 2005-03-03 Marco Pesenti Gritti * 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 . --- (limited to 'thumbnailer') diff --git a/thumbnailer/Makefile.am b/thumbnailer/Makefile.am new file mode 100644 index 0000000..5013867 --- /dev/null +++ b/thumbnailer/Makefile.am @@ -0,0 +1,47 @@ +@INTLTOOL_SCHEMAS_RULE@ + +NULL= + +INCLUDES= \ + -DDATADIR=\"$(pkgdatadir)\" \ + -I$(top_srcdir)/lib \ + -I$(top_srcdir)/pdf \ + -I$(top_srcdir)/backend \ + -DGNOMELOCALEDIR=\"$(datadir)/locale\" \ + -DGNOMEICONDIR=\""$(datadir)/pixmaps"\" \ + $(THUMBNAILER_CFLAGS) \ + $(EVINCE_DISABLE_DEPRECATED) \ + $(NULL) + +bin_PROGRAMS=evince-thumbnailer + +evince_thumbnailer_SOURCES= \ + evince-thumbnailer.c + $(NULL) + +evince_thumbnailer_LDADD= \ + $(THUMBNAILER_LIBS) \ + $(top_builddir)/lib/libev.la \ + $(top_builddir)/pdf/libpdfdocument.la \ + $(top_builddir)/backend/libevbackend.la \ + $(NULL) + +pixmapdir = $(pkgdatadir) +pixmap_DATA = pdf-icon.png + +schema_DATA = evince-thumbnailer.schemas +schemadir = $(GCONF_SCHEMA_FILE_DIR) + +install-data-local: +if GCONF_SCHEMAS_INSTALL + if test -z "$(DESTDIR)" ; then \ + for p in $(schema_DATA) ; do \ + GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(top_builddir)/thumbnailer/$$p >&1 > /dev/null; \ + done \ + fi +endif + +EXTRA_DIST = \ + $(pixmap_DATA) \ + $(schema_DATA) + 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 + +#include +#include +#include +#include + +#include +#include + +#include + +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 \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; + } +} diff --git a/thumbnailer/evince-thumbnailer.schemas b/thumbnailer/evince-thumbnailer.schemas new file mode 100644 index 0000000..2cc5f28 --- /dev/null +++ b/thumbnailer/evince-thumbnailer.schemas @@ -0,0 +1,30 @@ + + + + + /schemas/desktop/gnome/thumbnailers/application@pdf/enable + /desktop/gnome/thumbnailers/application@pdf/enable + evince + bool + true + + + + + + + + + /schemas/desktop/gnome/thumbnailers/application@pdf/command + /desktop/gnome/thumbnailers/application@pdf/command + evince + string + evince-thumbnailer %u %o + + + + + + + + diff --git a/thumbnailer/pdf-icon.png b/thumbnailer/pdf-icon.png new file mode 100644 index 0000000..0768913 --- /dev/null +++ b/thumbnailer/pdf-icon.png Binary files differ -- cgit v0.9.1