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 | |
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')
-rw-r--r-- | thumbnailer/Makefile.am | 47 | ||||
-rw-r--r-- | thumbnailer/evince-thumbnailer.c | 99 | ||||
-rw-r--r-- | thumbnailer/evince-thumbnailer.schemas | 30 | ||||
-rw-r--r-- | thumbnailer/pdf-icon.png | bin | 0 -> 1082 bytes |
4 files changed, 176 insertions, 0 deletions
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 <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; + } +} 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 @@ +<gconfschemafile> + <schemalist> + + <schema> + <key>/schemas/desktop/gnome/thumbnailers/application@pdf/enable</key> + <applyto>/desktop/gnome/thumbnailers/application@pdf/enable</applyto> + <owner>evince</owner> + <type>bool</type> + <default>true</default> + <locale name="C"> + <short></short> + <long></long> + </locale> + </schema> + + + <schema> + <key>/schemas/desktop/gnome/thumbnailers/application@pdf/command</key> + <applyto>/desktop/gnome/thumbnailers/application@pdf/command</applyto> + <owner>evince</owner> + <type>string</type> + <default>evince-thumbnailer %u %o</default> + <locale name="C"> + <short></short> + <long></long> + </locale> + </schema> + + </schemalist> +</gconfschemafile> diff --git a/thumbnailer/pdf-icon.png b/thumbnailer/pdf-icon.png Binary files differnew file mode 100644 index 0000000..0768913 --- /dev/null +++ b/thumbnailer/pdf-icon.png |