]> www.fi.muni.cz Git - evince.git/commitdiff
Add a nautilus thumbnailer. Based on patch by Fernando Herrera
authorMarco Pesenti Gritti <marco@gnome.org>
Thu, 3 Mar 2005 10:06:43 +0000 (10:06 +0000)
committerMarco Pesenti Gritti <marco@src.gnome.org>
Thu, 3 Mar 2005 10:06:43 +0000 (10:06 +0000)
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>.

ChangeLog
Makefile.am
configure.ac
pdf/.cvsignore
pdf/pdf-document.cc
thumbnailer/Makefile.am [new file with mode: 0644]
thumbnailer/evince-thumbnailer.c [new file with mode: 0644]
thumbnailer/evince-thumbnailer.schemas [new file with mode: 0644]
thumbnailer/pdf-icon.png [new file with mode: 0644]

index 97e27c06d17486cc6b75795c165ed844e5c503e6..61e8cc253785102922d79c0c4396c6729357e570 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+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>.
+
 2005-03-02  Marco Pesenti Gritti  <marco@gnome.org>
 
        * NEWS:
index 5abdb3d03a845f22cfe573be4fe673e5a38cf363..41d8abdd64736a95e0cd29b8fdd1ff474cb2defe 100644 (file)
@@ -1,4 +1,4 @@
-SUBDIRS = lib cut-n-paste data backend po pdf ps pixbuf shell
+SUBDIRS = lib cut-n-paste data backend po pdf ps pixbuf shell thumbnailer
 
 intltool_extra = intltool-extract.in intltool-merge.in intltool-update.in
 
index f0d330ada8275050bbd4906390dd19c6ac76a68f..27e757e2069b1bcc8d04b51b78c229ec3624ab56 100644 (file)
@@ -34,6 +34,7 @@ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [Gettext package.])
 PKG_CHECK_MODULES(LIBEVPRIVATE, gtk+-2.0 >= 2.4.0)
 PKG_CHECK_MODULES(RECENT_FILES, gtk+-2.0 >= 2.4.0 libgnomeui-2.0 >= 2.4.0)
 PKG_CHECK_MODULES(SHELL, gtk+-2.0 >= 2.6.0 libgnomeui-2.0 gnome-vfs-2.0 libgnomeprint-2.2 libgnomeprintui-2.2 libglade-2.0 gconf-2.0 poppler >= 0.1.1)
+PKG_CHECK_MODULES(THUMBNAILER, gtk+-2.0 >= 2.6.0 gnome-vfs-2.0 poppler >= 0.1.1)
 PKG_CHECK_MODULES(DVI, gtk+-2.0 >= 2.6.0)
 PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.6.0)
 PKG_CHECK_MODULES(PS, gtk+-2.0 >= 2.6.0 gnome-vfs-2.0 libgnomeui-2.0)
@@ -166,4 +167,5 @@ ps/Makefile
 po/Makefile.in
 backend/Makefile
 shell/Makefile
+thumbnailer/Makefile
 ])
index 282522db0342d8750454b3dc162493b5fc709cc8..96ef165a1688816aac846c9219a46b7b3f09b597 100644 (file)
@@ -1,2 +1,3 @@
+test-gdk-output-dev
 Makefile
 Makefile.in
index a749d3683b61dfd94be9f3f5627fb07332cec618..57eafd134d9ae615ead19a144ab318b252f1c52c 100644 (file)
@@ -140,7 +140,7 @@ document_display_page (PdfDocument *pdf_document)
                pdf_document->doc->displayPage (pdf_document->out, pdf_document->page,
                                                72 * pdf_document->scale,
                                                72 * pdf_document->scale,
-                                               0, gTrue, gTrue);
+                                               90, gTrue, gTrue);
 
                document_init_links (pdf_document);
 
diff --git a/thumbnailer/Makefile.am b/thumbnailer/Makefile.am
new file mode 100644 (file)
index 0000000..5013867
--- /dev/null
@@ -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 (file)
index 0000000..505f5f3
--- /dev/null
@@ -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 (file)
index 0000000..2cc5f28
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..0768913
Binary files /dev/null and b/thumbnailer/pdf-icon.png differ