]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-jobs.c
Fix build with gtk+ >= 2.11.5 due to gtktooltips deprecation. Fixes bug
[evince.git] / shell / ev-jobs.c
index 9fb242a0c6cd5a35dd2559f7e48c366a3c7afc08..0f0a0daf18b1d2ddae82cb9314dcd45ffbea5bbf 100644 (file)
@@ -3,7 +3,9 @@
 #include "ev-document-thumbnails.h"
 #include "ev-document-links.h"
 #include "ev-document-images.h"
+#include "ev-document-forms.h"
 #include "ev-document-factory.h"
+#include "ev-document-misc.h"
 #include "ev-file-helpers.h"
 #include "ev-document-fonts.h"
 #include "ev-selection.h"
@@ -120,9 +122,9 @@ ev_job_render_dispose (GObject *object)
 
        job = EV_JOB_RENDER (object);
 
-       if (job->pixbuf) {
-               g_object_unref (job->pixbuf);
-               job->pixbuf = NULL;
+       if (job->surface) {
+               cairo_surface_destroy (job->surface);
+               job->surface = NULL;
        }
 
        if (job->rc) {
@@ -131,7 +133,7 @@ ev_job_render_dispose (GObject *object)
        }
 
        if (job->selection) {
-               g_object_unref (job->selection);
+               cairo_surface_destroy (job->selection);
                job->selection = NULL;
        }
 
@@ -167,6 +169,11 @@ ev_job_thumbnail_dispose (GObject *object)
                job->thumbnail = NULL;
        }
 
+       if (job->rc) {
+               g_object_unref (job->rc);
+               job->rc = NULL;
+       }
+
        (* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
 }
 
@@ -259,6 +266,7 @@ ev_job_render_new (EvDocument      *document,
                   EvRectangle     *selection_points,
                   GdkColor        *text,
                   GdkColor        *base,
+                  gboolean         include_forms,
                   gboolean         include_links,
                   gboolean         include_images,
                   gboolean         include_text,
@@ -278,6 +286,7 @@ ev_job_render_new (EvDocument      *document,
        job->target_height = height;
        job->text = *text;
        job->base = *base;
+       job->include_forms = include_forms;
        job->include_links = include_links;
        job->include_images = include_images;
        job->include_text = include_text;
@@ -294,13 +303,16 @@ ev_job_render_new (EvDocument      *document,
 }
 
 static void
-render_finished_cb (EvDocument *document, GdkPixbuf *pixbuf, EvJobRender *job)
+render_finished_cb (EvDocument      *document,
+                   GdkPixbuf       *pixbuf,
+                   EvJobRender     *job)
 {
        g_signal_handlers_disconnect_by_func (EV_JOB (job)->document,
                                              render_finished_cb, job);
 
+       /* FIXME: ps backend should be ported to cairo */
+       job->surface = ev_document_misc_surface_from_pixbuf (pixbuf);
        EV_JOB (job)->finished = TRUE;
-       job->pixbuf = g_object_ref (pixbuf);
        ev_job_finished (EV_JOB (job));
 }
 
@@ -320,7 +332,8 @@ ev_job_render_run (EvJobRender *job)
        } else {
                ev_document_fc_mutex_lock ();
                
-               job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document, job->rc);
+               job->surface = ev_document_render (EV_JOB (job)->document, job->rc);
+
                if (job->include_links && EV_IS_DOCUMENT_LINKS (EV_JOB (job)->document))
                        job->link_mapping =
                                ev_document_links_get_links (EV_DOCUMENT_LINKS (EV_JOB (job)->document),
@@ -329,6 +342,10 @@ ev_job_render_run (EvJobRender *job)
                        job->image_mapping =
                                ev_document_images_get_images (EV_DOCUMENT_IMAGES (EV_JOB (job)->document),
                                                               job->rc->page);
+               if (job->include_forms && EV_IS_DOCUMENT_FORMS (EV_JOB (job)->document))
+                       job->form_field_mapping =
+                               ev_document_forms_get_form_fields (EV_DOCUMENT_FORMS (EV_JOB(job)->document),
+                                                                  job->rc->page);
                if (job->include_text && EV_IS_SELECTION (EV_JOB (job)->document))
                        job->text_mapping =
                                ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document),
@@ -354,19 +371,15 @@ ev_job_render_run (EvJobRender *job)
 }
 
 EvJob *
-ev_job_thumbnail_new (EvDocument   *document,
-                     gint          page,
-                     int           rotation,
-                     gint          requested_width)
+ev_job_thumbnail_new (EvDocument      *document,
+                     EvRenderContext *rc)
 {
        EvJobThumbnail *job;
 
        job = g_object_new (EV_TYPE_JOB_THUMBNAIL, NULL);
 
        EV_JOB (job)->document = g_object_ref (document);
-       job->page = page;
-       job->rotation = rotation;
-       job->requested_width = requested_width;
+       job->rc = g_object_ref (rc);
 
        return EV_JOB (job);
 }
@@ -380,10 +393,7 @@ ev_job_thumbnail_run (EvJobThumbnail *job)
 
        job->thumbnail =
                ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB (job)->document),
-                                                     job->page,
-                                                     job->rotation,
-                                                     job->requested_width,
-                                                     TRUE);
+                                                     job->rc, TRUE);
        EV_JOB (job)->finished = TRUE;
 
        ev_document_doc_mutex_unlock ();