]> www.fi.muni.cz Git - evince.git/blob - backend/ev-document.c
Hungarian translation added by "Last-Translator: \n".
[evince.git] / backend / ev-document.c
1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */
2 /*
3  *  Copyright (C) 2004 Marco Pesenti Gritti
4  *
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18  *
19  */
20
21 #include "config.h"
22
23 #include "ev-document.h"
24
25 #include "ev-backend-marshalers.h"
26 #include "ev-job-queue.h"
27
28 static void ev_document_class_init (gpointer g_class);
29
30
31 GMutex *ev_doc_mutex = NULL;
32
33 #define LOG(x) 
34 GType
35 ev_document_get_type (void)
36 {
37         static GType type = 0;
38
39         if (G_UNLIKELY (type == 0))
40         {
41                 static const GTypeInfo our_info =
42                 {
43                         sizeof (EvDocumentIface),
44                         NULL,
45                         NULL,
46                         (GClassInitFunc)ev_document_class_init
47                 };
48
49                 type = g_type_register_static (G_TYPE_INTERFACE,
50                                                "EvDocument",
51                                                &our_info, (GTypeFlags)0);
52         }
53
54         return type;
55 }
56
57 GQuark
58 ev_document_error_quark (void)
59 {
60   static GQuark q = 0;
61   if (q == 0)
62     q = g_quark_from_static_string ("ev-document-error-quark");
63
64   return q;
65 }
66
67 static void
68 ev_document_class_init (gpointer g_class)
69 {
70 }
71
72 #define PAGE_CACHE_STRING "ev-page-cache"
73
74 EvPageCache *
75 ev_document_get_page_cache (EvDocument *document)
76 {
77         EvPageCache *page_cache;
78
79         g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
80
81         page_cache = g_object_get_data (G_OBJECT (document), PAGE_CACHE_STRING);
82         if (page_cache == NULL) {
83                 page_cache = _ev_page_cache_new (document);
84                 g_object_set_data_full (G_OBJECT (document), PAGE_CACHE_STRING, page_cache, g_object_unref);
85         }
86
87         return page_cache;
88 }
89
90 GMutex *
91 ev_document_get_doc_mutex (void)
92 {
93         if (ev_doc_mutex == NULL) {
94                 ev_doc_mutex = g_mutex_new ();
95         }
96         return ev_doc_mutex;
97 }
98
99 void
100 ev_document_doc_mutex_lock (void)
101 {
102         g_mutex_lock (ev_document_get_doc_mutex ());
103 }
104
105 void
106 ev_document_doc_mutex_unlock (void)
107 {
108         g_mutex_unlock (ev_document_get_doc_mutex ());
109 }
110
111
112
113 gboolean
114 ev_document_load (EvDocument  *document,
115                   const char  *uri,
116                   GError     **error)
117 {
118         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
119         gboolean retval;
120         LOG ("ev_document_load");
121         retval = iface->load (document, uri, error);
122
123         /* Call this to make the initial cached copy */
124         if (retval)
125                 ev_document_get_page_cache (document);
126
127         return retval;
128 }
129
130 gboolean
131 ev_document_save (EvDocument  *document,
132                   const char  *uri,
133                   GError     **error)
134 {
135         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
136         gboolean retval;
137
138         LOG ("ev_document_save");
139         retval = iface->save (document, uri, error);
140
141         return retval;
142 }
143
144 int
145 ev_document_get_n_pages (EvDocument  *document)
146 {
147         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
148         gint retval;
149
150         LOG ("ev_document_get_n_pages");
151         retval = iface->get_n_pages (document);
152
153         return retval;
154 }
155
156 void
157 ev_document_get_page_size   (EvDocument   *document,
158                              int           page,
159                              double       *width,
160                              double       *height)
161 {
162         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
163
164         LOG ("ev_document_get_page_size");
165         iface->get_page_size (document, page, width, height);
166 }
167
168 char *
169 ev_document_get_page_label(EvDocument    *document,
170                            int             page)
171 {
172         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
173
174         LOG ("ev_document_get_page_label");
175         if (iface->get_page_label == NULL)
176                 return NULL;
177
178         return iface->get_page_label (document, page);
179 }
180
181 gboolean
182 ev_document_can_get_text (EvDocument  *document)
183 {
184         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
185
186         return iface->can_get_text (document);
187 }
188
189 EvDocumentInfo *
190 ev_document_get_info (EvDocument *document)
191 {
192         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
193
194         return iface->get_info (document);
195 }
196
197 char *
198 ev_document_get_text (EvDocument  *document,
199                       int          page,
200                       EvRectangle *rect)
201 {
202         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
203         char *retval;
204
205         LOG ("ev_document_get_text");
206         retval = iface->get_text (document, page, rect);
207
208         return retval;
209 }
210
211 GList *
212 ev_document_get_links (EvDocument *document,
213                        int         page)
214 {
215         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
216         GList *retval;
217
218         LOG ("ev_document_get_link");
219         if (iface->get_links == NULL)
220                 return NULL;
221         retval = iface->get_links (document, page);
222
223         return retval;
224 }
225
226
227
228 GdkPixbuf *
229 ev_document_render_pixbuf (EvDocument *document,
230                            int         page,
231                            double      scale)
232 {
233         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
234         GdkPixbuf *retval;
235
236         LOG ("ev_document_render_pixbuf");
237         g_assert (iface->render_pixbuf);
238
239         retval = iface->render_pixbuf (document, page, scale);
240
241         return retval;
242 }
243
244 void
245 ev_document_info_free (EvDocumentInfo *info)
246 {
247         if (info == NULL)
248                 return;
249
250         g_free (info->title);
251         g_free (info->format);
252         g_free (info->author);
253         g_free (info->subject);
254         g_free (info->keywords);
255
256         g_free (info);
257 }