]> www.fi.muni.cz Git - evince.git/blob - backend/ev-jobs.c
Added hu to ALL_LINGUAS.
[evince.git] / backend / ev-jobs.c
1 #include "ev-jobs.h"
2 #include "ev-job-queue.h"
3 #include "ev-document-thumbnails.h"
4 #include "ev-document-links.h"
5
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);
14
15 enum
16 {
17         FINISHED,
18         LAST_SIGNAL
19 };
20
21 static guint job_signals[LAST_SIGNAL] = { 0 };
22
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)
27
28
29 static void ev_job_init (EvJob *job) { /* Do Nothing */ }
30
31 static void
32 ev_job_dispose (GObject *object)
33 {
34         EvJob *job;
35
36         job = EV_JOB (object);
37
38         if (job->document) {
39                 g_object_unref (job->document);
40                 job->document = NULL;
41         }
42
43         (* G_OBJECT_CLASS (ev_job_parent_class)->dispose) (object);
44 }
45
46 static void
47 ev_job_class_init (EvJobClass *class)
48 {
49         GObjectClass *oclass;
50
51         oclass = G_OBJECT_CLASS (class);
52
53         oclass->dispose = ev_job_dispose;
54
55         job_signals [FINISHED] =
56                 g_signal_new ("finished",
57                               EV_TYPE_JOB,
58                               G_SIGNAL_RUN_LAST,
59                               G_STRUCT_OFFSET (EvJobClass, finished),
60                               NULL, NULL,
61                               g_cclosure_marshal_VOID__VOID,
62                               G_TYPE_NONE, 0);
63 }
64
65
66 static void ev_job_links_init (EvJobLinks *job) { /* Do Nothing */ }
67
68 static void
69 ev_job_links_dispose (GObject *object)
70 {
71         EvJobLinks *job;
72
73         job = EV_JOB_LINKS (object);
74
75         if (job->model) {
76                 g_object_unref (job->model);
77                 job->model = NULL;
78         }
79
80         (* G_OBJECT_CLASS (ev_job_links_parent_class)->dispose) (object);
81 }
82
83 static void
84 ev_job_links_class_init (EvJobLinksClass *class)
85 {
86         GObjectClass *oclass;
87
88         oclass = G_OBJECT_CLASS (class);
89
90         oclass->dispose = ev_job_links_dispose;
91 }
92
93
94 static void ev_job_render_init (EvJobRender *job) { /* Do Nothing */ }
95
96 static void
97 ev_job_render_dispose (GObject *object)
98 {
99         EvJobRender *job;
100
101         job = EV_JOB_RENDER (object);
102
103         if (job->pixbuf) {
104                 g_object_unref (job->pixbuf);
105                 job->pixbuf = NULL;
106         }
107
108         (* G_OBJECT_CLASS (ev_job_render_parent_class)->dispose) (object);
109 }
110
111 static void
112 ev_job_render_class_init (EvJobRenderClass *class)
113 {
114         GObjectClass *oclass;
115
116         oclass = G_OBJECT_CLASS (class);
117
118         oclass->dispose = ev_job_render_dispose;
119 }
120
121 static void ev_job_thumbnail_init (EvJobThumbnail *job) { /* Do Nothing */ }
122
123 static void
124 ev_job_thumbnail_dispose (GObject *object)
125 {
126         EvJobThumbnail *job;
127
128         job = EV_JOB_THUMBNAIL (object);
129
130         if (job->thumbnail) {
131                 g_object_unref (job->thumbnail);
132                 job->thumbnail = NULL;
133         }
134
135         (* G_OBJECT_CLASS (ev_job_thumbnail_parent_class)->dispose) (object);
136 }
137
138 static void
139 ev_job_thumbnail_class_init (EvJobThumbnailClass *class)
140 {
141         GObjectClass *oclass;
142
143         oclass = G_OBJECT_CLASS (class);
144
145         oclass->dispose = ev_job_thumbnail_dispose;
146 }
147
148 /* Public functions */
149 void
150 ev_job_finished (EvJob *job)
151 {
152         g_return_if_fail (EV_IS_JOB (job));
153
154         g_signal_emit (job, job_signals[FINISHED], 0);
155 }
156
157 EvJob *
158 ev_job_links_new (EvDocument *document)
159 {
160         EvJob *job;
161
162         job = g_object_new (EV_TYPE_JOB_LINKS, NULL);
163         job->document = g_object_ref (document);
164
165         return job;
166 }
167
168 void
169 ev_job_links_run (EvJobLinks *job)
170 {
171         g_return_if_fail (EV_IS_JOB_LINKS (job));
172
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 ();
177 }
178
179
180 EvJob *
181 ev_job_render_new (EvDocument *document,
182                    gint        page,
183                    double      scale,
184                    gint        width,
185                    gint        height,
186                    gboolean    include_links)
187 {
188         EvJobRender *job;
189
190         job = g_object_new (EV_TYPE_JOB_RENDER, NULL);
191
192         EV_JOB (job)->document = g_object_ref (document);
193         job->page = page;
194         job->scale = scale;
195         job->target_width = width;
196         job->target_height = height;
197         job->include_links = include_links;
198
199         return EV_JOB (job);
200 }
201
202 void
203 ev_job_render_run (EvJobRender *job)
204 {
205         g_return_if_fail (EV_IS_JOB_RENDER (job));
206
207         ev_document_doc_mutex_lock ();
208
209         job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document,
210                                                  job->page,
211                                                  job->scale);
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 ();
216 }
217
218 EvJob *
219 ev_job_thumbnail_new (EvDocument *document,
220                       gint        page,
221                       gint        requested_width)
222 {
223         EvJobThumbnail *job;
224
225         job = g_object_new (EV_TYPE_JOB_THUMBNAIL, NULL);
226
227         EV_JOB (job)->document = g_object_ref (document);
228         job->page = page;
229         job->requested_width = requested_width;
230
231         return EV_JOB (job);
232 }
233
234 void
235 ev_job_thumbnail_run (EvJobThumbnail *job)
236 {
237         g_return_if_fail (EV_IS_JOB_THUMBNAIL (job));
238
239         ev_document_doc_mutex_lock ();
240
241         job->thumbnail =
242                 ev_document_thumbnails_get_thumbnail (EV_DOCUMENT_THUMBNAILS (EV_JOB (job)->document),
243                                                       job->page,
244                                                       job->requested_width,
245                                                       TRUE);
246         EV_JOB (job)->finished = TRUE;
247
248         ev_document_doc_mutex_unlock ();
249 }