2 #include "ev-job-queue.h"
3 #include "ev-document-thumbnails.h"
4 #include "ev-document-links.h"
6 static void ev_job_init (EvJob *job);
7 static void ev_job_class_init (EvJobClass *class);
8 static void ev_job_links_init (EvJobLinks *job);
9 static void ev_job_links_class_init (EvJobLinksClass *class);
10 static void ev_job_render_init (EvJobRender *job);
11 static void ev_job_render_class_init (EvJobRenderClass *class);
12 static void ev_job_thumbnail_init (EvJobThumbnail *job);
13 static void ev_job_thumbnail_class_init (EvJobThumbnailClass *class);
21 static guint job_signals[LAST_SIGNAL] = { 0 };
23 G_DEFINE_TYPE (EvJob, ev_job, G_TYPE_OBJECT)
24 G_DEFINE_TYPE (EvJobLinks, ev_job_links, EV_TYPE_JOB)
25 G_DEFINE_TYPE (EvJobRender, ev_job_render, EV_TYPE_JOB)
26 G_DEFINE_TYPE (EvJobThumbnail, ev_job_thumbnail, EV_TYPE_JOB)
29 static void ev_job_init (EvJob *job) { /* Do Nothing */ }
32 ev_job_dispose (GObject *object)
36 job = EV_JOB (object);
39 g_object_unref (job->document);
43 (* G_OBJECT_CLASS (ev_job_parent_class)->dispose) (object);
47 ev_job_class_init (EvJobClass *class)
51 oclass = G_OBJECT_CLASS (class);
53 oclass->dispose = ev_job_dispose;
55 job_signals [FINISHED] =
56 g_signal_new ("finished",
59 G_STRUCT_OFFSET (EvJobClass, finished),
61 g_cclosure_marshal_VOID__VOID,
66 static void ev_job_links_init (EvJobLinks *job) { /* Do Nothing */ }
69 ev_job_links_dispose (GObject *object)
73 job = EV_JOB_LINKS (object);
76 g_object_unref (job->model);
80 (* G_OBJECT_CLASS (ev_job_links_parent_class)->dispose) (object);
84 ev_job_links_class_init (EvJobLinksClass *class)
88 oclass = G_OBJECT_CLASS (class);
90 oclass->dispose = ev_job_links_dispose;
94 static void ev_job_render_init (EvJobRender *job) { /* Do Nothing */ }
97 ev_job_render_dispose (GObject *object)
101 job = EV_JOB_RENDER (object);
104 g_object_unref (job->pixbuf);
108 (* G_OBJECT_CLASS (ev_job_render_parent_class)->dispose) (object);
112 ev_job_render_class_init (EvJobRenderClass *class)
114 GObjectClass *oclass;
116 oclass = G_OBJECT_CLASS (class);
118 oclass->dispose = ev_job_render_dispose;
121 static void ev_job_thumbnail_init (EvJobThumbnail *job) { /* Do Nothing */ }
124 ev_job_thumbnail_dispose (GObject *object)
128 job = EV_JOB_THUMBNAIL (object);
130 if (job->thumbnail) {
131 g_object_unref (job->thumbnail);
132 job->thumbnail = NULL;
135 (* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
139 ev_job_thumbnail_class_init (EvJobThumbnailClass *class)
141 GObjectClass *oclass;
143 oclass = G_OBJECT_CLASS (class);
145 oclass->dispose = ev_job_thumbnail_dispose;
148 /* Public functions */
150 ev_job_finished (EvJob *job)
152 g_return_if_fail (EV_IS_JOB (job));
154 g_signal_emit (job, job_signals[FINISHED], 0);
158 ev_job_links_new (EvDocument *document)
162 job = g_object_new (EV_TYPE_JOB_LINKS, NULL);
163 job->document = g_object_ref (document);
169 ev_job_links_run (EvJobLinks *job)
171 g_return_if_fail (EV_IS_JOB_LINKS (job));
173 ev_document_doc_mutex_lock ();
174 job->model = ev_document_links_get_links_model (EV_DOCUMENT_LINKS (EV_JOB (job)->document));
175 EV_JOB (job)->finished = TRUE;
176 ev_document_doc_mutex_unlock ();
181 ev_job_render_new (EvDocument *document,
186 gboolean include_links)
190 job = g_object_new (EV_TYPE_JOB_RENDER, NULL);
192 EV_JOB (job)->document = g_object_ref (document);
195 job->target_width = width;
196 job->target_height = height;
197 job->include_links = include_links;
203 ev_job_render_run (EvJobRender *job)
205 g_return_if_fail (EV_IS_JOB_RENDER (job));
207 ev_document_doc_mutex_lock ();
209 job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document,
212 if (job->include_links)
213 job->link_mapping = ev_document_get_links (EV_JOB (job)->document, job->page);
214 EV_JOB (job)->finished = TRUE;
215 ev_document_doc_mutex_unlock ();
219 ev_job_thumbnail_new (EvDocument *document,
221 gint requested_width)
225 job = g_object_new (EV_TYPE_JOB_THUMBNAIL, NULL);
227 EV_JOB (job)->document = g_object_ref (document);
229 job->requested_width = requested_width;
235 ev_job_thumbnail_run (EvJobThumbnail *job)
237 g_return_if_fail (EV_IS_JOB_THUMBNAIL (job));
239 ev_document_doc_mutex_lock ();
242 ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB (job)->document),
244 job->requested_width,
246 EV_JOB (job)->finished = TRUE;
248 ev_document_doc_mutex_unlock ();