]> www.fi.muni.cz Git - evince.git/commitdiff
Add support for ps, eps and compressed documents thumbnails. Do not ignore
authorCarlos Garcia Campos <carlosgc@gnome.org>
Sun, 8 Apr 2007 15:34:43 +0000 (15:34 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Sun, 8 Apr 2007 15:34:43 +0000 (15:34 +0000)
2007-03-08  Carlos Garcia Campos  <carlosgc@gnome.org>
* configure.ac:
* thumbnailer/Makefile.am:
* thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get):
* thumbnailer/evince-thumbnailer.schemas.in:
* thumbnailer/evince-thumbnailer-ps.schemas.in:
Add support for ps, eps and compressed documents thumbnails. Do not
ignore size parameter.

svn path=/trunk/; revision=2398

ChangeLog
configure.ac
thumbnailer/Makefile.am
thumbnailer/evince-thumbnailer-ps.schemas.in [new file with mode: 0644]
thumbnailer/evince-thumbnailer.c
thumbnailer/evince-thumbnailer.schemas.in

index 2c3e3f13c0fb28a78be4c199f7696de744bdd7ce..65fa1779625b804bed033dec36f902ae63c3685f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2007-03-08  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * configure.ac:
+       * thumbnailer/Makefile.am:
+       * thumbnailer/evince-thumbnailer.c: (evince_thumbnail_pngenc_get):
+       * thumbnailer/evince-thumbnailer.schemas.in:
+       * thumbnailer/evince-thumbnailer-ps.schemas.in:
+
+       Add support for ps, eps and compressed documents thumbnails. Do not
+       ignore size parameter. 
+
 2007-04-07  Ricardo Markiewicz  <rmarkie@fi.uba.ar>
 
        * backend/dvi/dvi-document.c: (dvi_document_class_init), (hsb2rgb),
index 8f77b735da22d985eb8e9ca6d31c0f3079e67332..54571cf3f85f1fc30fa512ca10f67aa62c040a0f 100644 (file)
@@ -56,8 +56,8 @@ GTK_PRINT_REQUIRED=2.10.0
 
 PKG_CHECK_MODULES(LIB, gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libxml-2.0 >= $LIBXML_REQUIRED)
 PKG_CHECK_MODULES(BACKEND, gtk+-2.0 >= $GTK_REQUIRED gnome-vfs-2.0 libgnome-2.0 >= $LIBGNOME_REQUIRED)
-PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-icon-theme >= $GNOME_ICON_THEME_REQUIRED libglade-2.0)
-PKG_CHECK_MODULES(SHELL_CORE, gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-vfs-2.0 libglade-2.0 gconf-2.0 gnome-keyring-1 >= $KEYRING_REQUIRED)
+PKG_CHECK_MODULES(FRONTEND_CORE, gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED libglade-2.0 gnome-vfs-2.0)
+PKG_CHECK_MODULES(SHELL_CORE, gtk+-2.0 >= $GTK_REQUIRED libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED gnome-icon-theme >= $GNOME_ICON_THEME_REQUIRED gnome-vfs-2.0 libglade-2.0 gconf-2.0 gnome-keyring-1 >= $KEYRING_REQUIRED)
 
 BACKEND_CFLAGS="$BACKEND_CFLAGS -DGDK_MULTIHEAD_SAFE -DGTK_MULTIHEAD_SAFE"
 AC_SUBST(BACKEND_CFLAGS)
index dc039112988285090109b60b8429aeb232ba77dc..25868e9c230dafd4c432a9b3960bae1841fc8223 100644 (file)
@@ -35,9 +35,18 @@ schema_files = \
        evince-thumbnailer-dvi.schemas.in  \
        evince-thumbnailer-djvu.schemas.in \
        evince-thumbnailer-comics.schemas.in \
+       evince-thumbnailer-ps.schemas.in \
        evince-thumbnailer.schemas.in
 
-schema_DATA = evince-thumbnailer.schemas
+schema_DATA = 
+
+if ENABLE_PDF
+schema_DATA += evince-thumbnailer.schemas
+endif
+
+if ENABLE_PS
+schema_DATA += evince-thumbnailer-ps.schemas
+endif
 
 if ENABLE_DJVU
 schema_DATA += evince-thumbnailer-djvu.schemas
diff --git a/thumbnailer/evince-thumbnailer-ps.schemas.in b/thumbnailer/evince-thumbnailer-ps.schemas.in
new file mode 100644 (file)
index 0000000..1c6fe06
--- /dev/null
@@ -0,0 +1,154 @@
+<gconfschemafile>
+    <schemalist>
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@postscript/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/application@postscript/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@postscript/command</key>
+            <applyto>/desktop/gnome/thumbnailers/application@postscript/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short></short>
+                <long></long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@x-bzpostscript/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-bzpostscript/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@x-bzpostscript/command</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-bzpostscript/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short></short>
+                <long></long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@x-gzpostscript/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-gzpostscript/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@x-gzpostscript/command</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-gzpostscript/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short></short>
+                <long></long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/image@x-eps/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/image@x-eps/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/image@x-eps/command</key>
+            <applyto>/desktop/gnome/thumbnailers/image@x-eps/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short></short>
+                <long></long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/image@x-bzeps/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/image@x-bzeps/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/image@x-bzeps/command</key>
+            <applyto>/desktop/gnome/thumbnailers/image@x-bzeps/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short></short>
+                <long></long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/image@x-gzeps/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/image@x-gzeps/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/image@x-gzeps/command</key>
+            <applyto>/desktop/gnome/thumbnailers/image@x-gzeps/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short></short>
+                <long></long>
+            </locale>
+        </schema>
+
+    </schemalist>
+</gconfschemafile>
index f8368b5126c0f083cbba3fbe88982556680e75f8..f76b9c45aad1d2f9efaaa03ce6753fa9c7b47278 100644 (file)
 
 #include <ev-document.h>
 #include <ev-document-thumbnails.h>
+#include <ev-async-renderer.h>
 #include <ev-document-factory.h>
 
+#include <stdlib.h>
 #include <string.h>
 
 #define THUMBNAIL_SIZE 128
 
-static gboolean
-evince_thumbnail_pngenc_get (const char *uri, const char *thumbnail, int size)
+struct AsyncData {
+       EvDocument  *document;
+       const gchar *output;
+       gint         size;
+       gboolean     success;
+};
+
+static EvDocument *
+evince_thumbnailer_get_document (const gchar *uri)
 {
        EvDocument *document = NULL;
-       EvRenderContext *rc;
-       double width, height;
-       GError *error = NULL;
-       GdkPixbuf *pixbuf;
+       GError     *error = NULL;
 
        document = ev_document_factory_get_document  (uri, &error);
-
        if (error) {
                if (error->domain == EV_DOCUMENT_ERROR &&
-                   error->code == EV_DOCUMENT_ERROR_ENCRYPTED) {
+                   error->code == EV_DOCUMENT_ERROR_ENCRYPTED) {
                        /* FIXME: Create a thumb for cryp docs */
                        g_error_free (error);
-                       return FALSE;
+                       return NULL;
                }
                g_error_free (error);
-               return FALSE;
+               return NULL;
        }
        
-       if (document == NULL) {
-               return FALSE;
-       }
+       return document;
+}
 
-       if (!EV_IS_DOCUMENT_THUMBNAILS (document)) {
-               return FALSE;
-       }
+static gboolean
+evince_thumbnail_pngenc_get (EvDocument *document, const char *thumbnail, int size)
+{
+       EvRenderContext *rc;
+       double width, height;
+       GdkPixbuf *pixbuf;
 
        ev_document_get_page_size (document, 0, &width, &height);
-       rc = ev_render_context_new (0, 0, THUMBNAIL_SIZE / width);
 
-       pixbuf = ev_document_thumbnails_get_thumbnail
-                       (EV_DOCUMENT_THUMBNAILS (document), rc, FALSE);
-       
+       rc = ev_render_context_new (0, 0, size / width);
+       pixbuf = ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (document),
+                                                      rc, FALSE);
        g_object_unref (rc);
        
        if (pixbuf != NULL) {
@@ -96,25 +102,40 @@ evince_thumbnail_pngenc_get (const char *uri, const char *thumbnail, int size)
                                g_object_unref  (overlaid_pixbuf);
                        }
                }
+               
                if (gdk_pixbuf_save (pixbuf, thumbnail, "png", NULL, NULL)) {
                        g_object_unref  (pixbuf);
-                       g_object_unref (document);
                        return TRUE;
-               } else {
-                       g_object_unref  (pixbuf);
-                       g_object_unref (document);
                }
+
+               g_object_unref  (pixbuf);
        }
+       
        return FALSE;
 }
 
+static gpointer
+evince_thumbnail_pngenc_get_async (struct AsyncData *data)
+{
+       ev_document_doc_mutex_lock ();
+       data->success = evince_thumbnail_pngenc_get (data->document,
+                                                    data->output,
+                                                    data->size);
+       ev_document_doc_mutex_unlock ();
+       
+       g_idle_add ((GSourceFunc)gtk_main_quit, NULL);
+       
+       return NULL;
+}
+
 int
 main (int argc, char *argv[])
 {
-       int res;
-       char *input, *output;
-       int size;
-       char *uri;
+       EvDocument *document;
+       const char *input;
+       const char *output;
+       int         size;
+       char       *uri;
 
        if (argc <= 2 || argc > 5 || strcmp (argv[1], "-h") == 0 ||
            strcmp (argv[1], "--help") == 0) {
@@ -122,12 +143,10 @@ main (int argc, char *argv[])
                return -1;
        }
 
-       res = gnome_vfs_init ();
-
        if (!strcmp (argv[1], "-s")) {
                input = argv[3];
                output = argv[4];
-               size = g_strtod (argv[2], NULL);
+               size = atoi (argv[2]);
        } else {
                input = argv[1];
                output = argv[2];
@@ -139,13 +158,48 @@ main (int argc, char *argv[])
                return -1;
        }
 
+       if (!g_thread_supported ())
+               g_thread_init (NULL);
+       
+       gnome_vfs_init ();
+
        uri = gnome_vfs_make_uri_from_shell_arg (input);
+       document = evince_thumbnailer_get_document (uri);
+       g_free (uri);
 
-       if (evince_thumbnail_pngenc_get (uri, output, size)) {
-               g_free (uri);
-               return 0;
-       } else {
-               g_free (uri);
+       if (!document)
+               return -2;
+
+       if (!EV_IS_DOCUMENT_THUMBNAILS (document)) {
+               g_object_unref (document);
+               return FALSE;
+       }
+
+       if (EV_IS_ASYNC_RENDERER (document)) {
+               struct AsyncData data;
+
+               gtk_init (&argc, &argv);
+               
+               data.document = document;
+               data.output = output;
+               data.size = size;
+
+               g_thread_create ((GThreadFunc) evince_thumbnail_pngenc_get_async,
+                                &data, FALSE, NULL);
+               
+               gtk_main ();
+
+               g_object_unref (document);
+
+               return data.success ? 0 : -2;
+       }
+
+       if (!evince_thumbnail_pngenc_get (document, output, size)) {
+               g_object_unref (document);
                return -2;
        }
+
+       g_object_unref (document);
+
+       return 0;
 }
index 07cc61d926102c5e7821eeab2ffc80b863d3b79e..5644067065f410bc7145b876d598758b3edb4635 100644 (file)
             </locale>
         </schema>
 
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@x-bzpdf/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-bzpdf/enable</applyto>
+            <owner>evince</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Enable thumbnailing of PDF Documents</short>
+                <long>Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails</long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@x-bzpdf/command</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-bzpdf/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short>Thumbnail command for PDF Documents</short>
+                <long>Valid command plus arguments for the PDF Document thumbnailer.  See nautilus thumbnailer documentation for more information.</long>
+            </locale>
+        </schema>
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@x-gzpdf/enable</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-gzpdf/enable</applyto>
+            <owner>evince</owner>
+            <type>bool</type>
+            <default>true</default>
+            <locale name="C">
+                <short>Enable thumbnailing of PDF Documents</short>
+                <long>Boolean options available, true enables thumbnailing and false disables the creation of new thumbnails</long>
+            </locale>
+        </schema>
+
+
+        <schema>
+            <key>/schemas/desktop/gnome/thumbnailers/application@x-gzpdf/command</key>
+            <applyto>/desktop/gnome/thumbnailers/application@x-gzpdf/command</applyto>
+            <owner>evince</owner>
+            <type>string</type>
+            <default>evince-thumbnailer -s %s %u %o</default>
+            <locale name="C">
+                <short>Thumbnail command for PDF Documents</short>
+                <long>Valid command plus arguments for the PDF Document thumbnailer.  See nautilus thumbnailer documentation for more information.</long>
+            </locale>
+        </schema>
+
     </schemalist>
 </gconfschemafile>