]> www.fi.muni.cz Git - evince.git/blob - backend/ev-document.c
Remove pixbuf backend for now
[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         g_object_interface_install_property (g_class,
71                                 g_param_spec_string ("title",
72                                                      "Document Title",
73                                                      "The title of the document",
74                                                      NULL,
75                                                      G_PARAM_READABLE));
76 }
77
78 #define PAGE_CACHE_STRING "ev-page-cache"
79
80 EvPageCache *
81 ev_document_get_page_cache (EvDocument *document)
82 {
83         EvPageCache *page_cache;
84
85         g_return_val_if_fail (EV_IS_DOCUMENT (document), NULL);
86
87         page_cache = g_object_get_data (G_OBJECT (document), PAGE_CACHE_STRING);
88         if (page_cache == NULL) {
89                 page_cache = _ev_page_cache_new (document);
90                 g_object_set_data_full (G_OBJECT (document), PAGE_CACHE_STRING, page_cache, g_object_unref);
91         }
92
93         return page_cache;
94 }
95
96 GMutex *
97 ev_document_get_doc_mutex (void)
98 {
99         if (ev_doc_mutex == NULL) {
100                 ev_doc_mutex = g_mutex_new ();
101         }
102         return ev_doc_mutex;
103 }
104
105
106 gboolean
107 ev_document_load (EvDocument  *document,
108                   const char  *uri,
109                   GError     **error)
110 {
111         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
112         gboolean retval;
113         LOG ("ev_document_load");
114         retval = iface->load (document, uri, error);
115
116         /* Call this to make the initial cached copy */
117         if (retval)
118                 ev_document_get_page_cache (document);
119
120         return retval;
121 }
122
123 gboolean
124 ev_document_save (EvDocument  *document,
125                   const char  *uri,
126                   GError     **error)
127 {
128         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
129         gboolean retval;
130
131         LOG ("ev_document_save");
132         retval = iface->save (document, uri, error);
133
134         return retval;
135 }
136
137 char *
138 ev_document_get_title (EvDocument  *document)
139 {
140         char *title;
141
142         LOG ("ev_document_get_title");
143         g_object_get (document, "title", &title, NULL);
144
145         return title;
146 }
147
148 int
149 ev_document_get_n_pages (EvDocument  *document)
150 {
151         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
152         gint retval;
153
154         LOG ("ev_document_get_n_pages");
155         retval = iface->get_n_pages (document);
156
157         return retval;
158 }
159
160 void
161 ev_document_set_page (EvDocument  *document,
162                       int          page)
163 {
164         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
165
166         LOG ("ev_document_set_page");
167         iface->set_page (document, page);
168 }
169
170 int
171 ev_document_get_page (EvDocument *document)
172 {
173         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
174         int retval;
175
176         LOG ("ev_document_get_page");
177         retval = iface->get_page (document);
178
179         return retval;
180 }
181
182 void
183 ev_document_set_scale (EvDocument   *document,
184                        double        scale)
185 {
186         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
187
188         LOG ("ev_document_set_scale");
189         iface->set_scale (document, scale);
190 }
191
192 void
193 ev_document_get_page_size   (EvDocument   *document,
194                              int           page,
195                              int          *width,
196                              int          *height)
197 {
198         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
199
200         LOG ("ev_document_get_page_size");
201         iface->get_page_size (document, page, width, height);
202 }
203
204 char *
205 ev_document_get_text (EvDocument   *document,
206                       GdkRectangle *rect)
207 {
208         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
209         char *retval;
210
211         LOG ("ev_document_get_text");
212         retval = iface->get_text (document, rect);
213
214         return retval;
215 }
216
217 EvLink *
218 ev_document_get_link (EvDocument   *document,
219                       int           x,
220                       int           y)
221 {
222         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
223         EvLink *retval;
224
225         LOG ("ev_document_get_link");
226         if (iface->get_link == NULL)
227                 return NULL;
228         retval = iface->get_link (document, x, y);
229
230         return retval;
231 }
232
233 GList *
234 ev_document_get_links (EvDocument *document)
235 {
236         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
237         GList *retval;
238
239         LOG ("ev_document_get_link");
240         if (iface->get_links == NULL)
241                 return NULL;
242         retval = iface->get_links (document);
243
244         return retval;
245 }
246
247
248
249 GdkPixbuf *
250 ev_document_render_pixbuf (EvDocument *document)
251 {
252         EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
253         GdkPixbuf *retval;
254
255         LOG ("ev_document_render_pixbuf");
256         g_assert (iface->render_pixbuf);
257
258         retval = iface->render_pixbuf (document);
259
260         return retval;
261 }
262