X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Fdjvu%2Fdjvu-document.c;h=aa0e595d78b3e1d9919798fde5186bf7e08d6427;hb=86e41a9d457049a4cc45efba0edcb15efbc6b045;hp=0c996683e89d427b9eb04f0d03d202d975c177fb;hpb=96ee76c82cc04f84631bc396ec9c7284a49ac727;p=evince.git diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c index 0c996683..aa0e595d 100644 --- a/backend/djvu/djvu-document.c +++ b/backend/djvu/djvu-document.c @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" @@ -46,17 +46,16 @@ enum { struct _DjvuDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; typedef struct _DjvuDocumentClass DjvuDocumentClass; -static void djvu_document_document_iface_init (EvDocumentIface *iface); -static void djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); -static void djvu_document_file_exporter_iface_init (EvFileExporterIface *iface); -static void djvu_document_find_iface_init (EvDocumentFindIface *iface); -static void djvu_document_document_links_iface_init (EvDocumentLinksIface *iface); -static void djvu_selection_iface_init (EvSelectionIface *iface); +static void djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface); +static void djvu_document_file_exporter_iface_init (EvFileExporterInterface *iface); +static void djvu_document_find_iface_init (EvDocumentFindInterface *iface); +static void djvu_document_document_links_iface_init (EvDocumentLinksInterface *iface); +static void djvu_selection_iface_init (EvSelectionInterface *iface); EV_BACKEND_REGISTER_WITH_CODE (DjvuDocument, djvu_document, { @@ -75,7 +74,7 @@ ev_djvu_error_quark (void) { static GQuark q = 0; if (q == 0) - q = g_quark_from_static_string ("ev-djvu-quark"); + q = g_quark_from_string ("ev-djvu-quark"); return q; } @@ -168,6 +167,10 @@ djvu_document_load (EvDocument *document, if (!doc) { g_free (filename); + g_set_error_literal (error, + EV_DOCUMENT_ERROR, + EV_DOCUMENT_ERROR_INVALID, + _("DjVu document has incorrect format")); return FALSE; } @@ -241,11 +244,11 @@ djvu_document_load (EvDocument *document, g_free (filename); if (missing_files) { - g_set_error (error, - G_FILE_ERROR, - G_FILE_ERROR_EXIST, - _("The document is composed by several files. " - "One or more of such files cannot be accessed.")); + g_set_error_literal (error, + G_FILE_ERROR, + G_FILE_ERROR_EXIST, + _("The document is composed of several files. " + "One or more of these files cannot be accessed.")); return FALSE; } @@ -320,7 +323,6 @@ djvu_document_render (EvDocument *document, ddjvu_page_t *d_page; ddjvu_page_rotation_t rotation; double page_width, page_height, tmp; - static const cairo_user_data_key_t key; d_page = ddjvu_page_create_by_pageno (djvu_document->d_document, rc->page->index); @@ -352,19 +354,12 @@ djvu_document_render (EvDocument *document, default: rotation = DDJVU_ROTATE_0; } -#ifdef HAVE_CAIRO_FORMAT_STRIDE_FOR_WIDTH - rowstride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, page_width); -#else - rowstride = page_width * 4; -#endif - pixels = (gchar *) g_malloc (page_height * rowstride); - surface = cairo_image_surface_create_for_data ((guchar *)pixels, - CAIRO_FORMAT_RGB24, - page_width, - page_height, - rowstride); - cairo_surface_set_user_data (surface, &key, - pixels, (cairo_destroy_func_t)g_free); + + surface = cairo_image_surface_create (CAIRO_FORMAT_RGB24, + page_width, page_height); + rowstride = cairo_image_surface_get_stride (surface); + pixels = (gchar *)cairo_image_surface_get_data (surface); + prect.x = 0; prect.y = 0; prect.w = page_width; @@ -380,6 +375,8 @@ djvu_document_render (EvDocument *document, rowstride, pixels); + cairo_surface_mark_dirty (surface); + return surface; } @@ -408,30 +405,16 @@ djvu_document_finalize (GObject *object) static void djvu_document_class_init (DjvuDocumentClass *klass) { - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); gobject_class->finalize = djvu_document_finalize; -} -static EvDocumentInfo * -djvu_document_get_info (EvDocument *document) -{ - EvDocumentInfo *info; - - info = g_new0 (EvDocumentInfo, 1); - - return info; -} - -static void -djvu_document_document_iface_init (EvDocumentIface *iface) -{ - iface->load = djvu_document_load; - iface->save = djvu_document_save; - iface->get_n_pages = djvu_document_get_n_pages; - iface->get_page_size = djvu_document_get_page_size; - iface->render = djvu_document_render; - iface->get_info = djvu_document_get_info; + ev_document_class->load = djvu_document_load; + ev_document_class->save = djvu_document_save; + ev_document_class->get_n_pages = djvu_document_get_n_pages; + ev_document_class->get_page_size = djvu_document_get_page_size; + ev_document_class->render = djvu_document_render; } static gchar * @@ -460,7 +443,7 @@ djvu_text_copy (DjvuDocument *djvu_document, static gchar * djvu_selection_get_selected_text (EvSelection *selection, - EvRenderContext *rc, + EvPage *page, EvSelectionStyle style, EvRectangle *points) { @@ -470,13 +453,13 @@ djvu_selection_get_selected_text (EvSelection *selection, gchar *text; djvu_document_get_page_size (EV_DOCUMENT (djvu_document), - rc->page, &width, &height); + page, &width, &height); rectangle.x1 = points->x1 / SCALE_FACTOR; rectangle.y1 = (height - points->y2) / SCALE_FACTOR; rectangle.x2 = points->x2 / SCALE_FACTOR; rectangle.y2 = (height - points->y1) / SCALE_FACTOR; - text = djvu_text_copy (djvu_document, rc->page->index, &rectangle); + text = djvu_text_copy (djvu_document, page->index, &rectangle); if (text == NULL) text = g_strdup (""); @@ -485,7 +468,7 @@ djvu_selection_get_selected_text (EvSelection *selection, } static void -djvu_selection_iface_init (EvSelectionIface *iface) +djvu_selection_iface_init (EvSelectionInterface *iface) { iface->get_selected_text = djvu_selection_get_selected_text; } @@ -558,7 +541,7 @@ djvu_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document, } static void -djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface) +djvu_document_document_thumbnails_iface_init (EvDocumentThumbnailsInterface *iface) { iface->get_thumbnail = djvu_document_thumbnails_get_thumbnail; iface->get_dimensions = djvu_document_thumbnails_get_dimensions; @@ -622,7 +605,7 @@ djvu_document_file_exporter_get_capabilities (EvFileExporter *exporter) } static void -djvu_document_file_exporter_iface_init (EvFileExporterIface *iface) +djvu_document_file_exporter_iface_init (EvFileExporterInterface *iface) { iface->begin = djvu_document_file_exporter_begin; iface->do_page = djvu_document_file_exporter_do_page; @@ -701,20 +684,20 @@ djvu_document_find_find_text (EvDocumentFind *document, } static void -djvu_document_find_iface_init (EvDocumentFindIface *iface) +djvu_document_find_iface_init (EvDocumentFindInterface *iface) { iface->find_text = djvu_document_find_find_text; } -static GList * +static EvMappingList * djvu_document_links_get_links (EvDocumentLinks *document_links, - gint page) + EvPage *page) { - return djvu_links_get_links (document_links, page, SCALE_FACTOR); + return djvu_links_get_links (document_links, page->index, SCALE_FACTOR); } static void -djvu_document_document_links_iface_init (EvDocumentLinksIface *iface) +djvu_document_document_links_iface_init (EvDocumentLinksInterface *iface) { iface->has_document_links = djvu_links_has_document_links; iface->get_links_model = djvu_links_get_links_model;