From 75481a7c4d3b557da326c058d7b2d12958f8f018 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Tue, 18 Aug 2009 10:08:37 +0000 Subject: Convert EvDocument interface into an abstract class --- diff --git a/backend/comics/comics-document.c b/backend/comics/comics-document.c index 0c3d37f..3cd6db6 100644 --- a/backend/comics/comics-document.c +++ b/backend/comics/comics-document.c @@ -36,10 +36,10 @@ struct _ComicsDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; - -typedef enum + +typedef enum { RARLABS, GNAUNRAR, @@ -49,7 +49,8 @@ typedef enum struct _ComicsDocument { - GObject parent_instance; + EvDocument parent_instance; + gchar *archive, *dir; GSList *page_names; gint n_pages; @@ -80,7 +81,6 @@ struct { typedef struct _ComicsDocumentClass ComicsDocumentClass; -static void comics_document_document_iface_init (EvDocumentIface *iface); static void comics_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static GSList* get_supported_image_extensions (void); @@ -721,13 +721,6 @@ comics_document_finalize (GObject *object) G_OBJECT_CLASS (comics_document_parent_class)->finalize (object); } -static void -comics_document_class_init (ComicsDocumentClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - gobject_class->finalize = comics_document_finalize; -} - static EvDocumentInfo * comics_document_get_info (EvDocument *document) { @@ -737,14 +730,19 @@ comics_document_get_info (EvDocument *document) } static void -comics_document_document_iface_init (EvDocumentIface *iface) +comics_document_class_init (ComicsDocumentClass *klass) { - iface->load = comics_document_load; - iface->save = comics_document_save; - iface->get_n_pages = comics_document_get_n_pages; - iface->get_page_size = comics_document_get_page_size; - iface->render = comics_document_render; - iface->get_info = comics_document_get_info; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + gobject_class->finalize = comics_document_finalize; + + ev_document_class->load = comics_document_load; + ev_document_class->save = comics_document_save; + ev_document_class->get_n_pages = comics_document_get_n_pages; + ev_document_class->get_page_size = comics_document_get_page_size; + ev_document_class->render = comics_document_render; + ev_document_class->get_info = comics_document_get_info; } static void diff --git a/backend/djvu/djvu-document-private.h b/backend/djvu/djvu-document-private.h index a110e15..d1d7ec7 100644 --- a/backend/djvu/djvu-document-private.h +++ b/backend/djvu/djvu-document-private.h @@ -26,7 +26,7 @@ #include struct _DjvuDocument { - GObject parent_instance; + EvDocument parent_instance; ddjvu_context_t *d_context; ddjvu_document_t *d_document; diff --git a/backend/djvu/djvu-document.c b/backend/djvu/djvu-document.c index daf09a5..2bc1f7e 100644 --- a/backend/djvu/djvu-document.c +++ b/backend/djvu/djvu-document.c @@ -46,12 +46,11 @@ 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); @@ -387,6 +386,16 @@ djvu_document_render (EvDocument *document, return surface; } +static EvDocumentInfo * +djvu_document_get_info (EvDocument *document) +{ + EvDocumentInfo *info; + + info = g_new0 (EvDocumentInfo, 1); + + return info; +} + static void djvu_document_finalize (GObject *object) { @@ -412,30 +421,17 @@ 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; + ev_document_class->get_info = djvu_document_get_info; } static gchar * diff --git a/backend/dvi/dvi-document.c b/backend/dvi/dvi-document.c index a1097c9..7551f80 100644 --- a/backend/dvi/dvi-document.c +++ b/backend/dvi/dvi-document.c @@ -44,12 +44,12 @@ enum { struct _DviDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; struct _DviDocument { - GObject parent_instance; + EvDocument parent_instance; DviContext *context; DviPageSpec *spec; @@ -68,7 +68,6 @@ struct _DviDocument typedef struct _DviDocumentClass DviDocumentClass; -static void dvi_document_document_iface_init (EvDocumentIface *iface); static void dvi_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static void dvi_document_file_exporter_iface_init (EvFileExporterIface *iface); static void dvi_document_do_color_special (DviContext *dvi, @@ -230,11 +229,21 @@ dvi_document_finalize (GObject *object) G_OBJECT_CLASS (dvi_document_parent_class)->finalize (object); } +static EvDocumentInfo * +dvi_document_get_info (EvDocument *document) +{ + EvDocumentInfo *info; + + info = g_new0 (EvDocumentInfo, 1); + + return info; +} static void dvi_document_class_init (DviDocumentClass *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 = dvi_document_finalize; @@ -243,27 +252,13 @@ dvi_document_class_init (DviDocumentClass *klass) mdvi_register_fonts (); dvi_context_mutex = g_mutex_new (); -} - -static EvDocumentInfo * -dvi_document_get_info (EvDocument *document) -{ - EvDocumentInfo *info; - - info = g_new0 (EvDocumentInfo, 1); - return info; -} - -static void -dvi_document_document_iface_init (EvDocumentIface *iface) -{ - iface->load = dvi_document_load; - iface->save = dvi_document_save; - iface->get_n_pages = dvi_document_get_n_pages; - iface->get_page_size = dvi_document_get_page_size; - iface->render = dvi_document_render; - iface->get_info = dvi_document_get_info; + ev_document_class->load = dvi_document_load; + ev_document_class->save = dvi_document_save; + ev_document_class->get_n_pages = dvi_document_get_n_pages; + ev_document_class->get_page_size = dvi_document_get_page_size; + ev_document_class->render = dvi_document_render; + ev_document_class->get_info = dvi_document_get_info; } static void diff --git a/backend/impress/impress-document.c b/backend/impress/impress-document.c index 72eb8c1..0d58aaf 100644 --- a/backend/impress/impress-document.c +++ b/backend/impress/impress-document.c @@ -33,12 +33,12 @@ struct _ImpressDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; struct _ImpressDocument { - GObject parent_instance; + EvDocument parent_instance; ImpDoc *imp; ImpRenderCtx *ctx; @@ -59,7 +59,6 @@ struct _ImpressDocument typedef struct _ImpressDocumentClass ImpressDocumentClass; -static void impress_document_document_iface_init (EvDocumentIface *iface); static void impress_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); EV_BACKEND_REGISTER_WITH_CODE (ImpressDocument, impress_document, @@ -425,6 +424,17 @@ impress_document_render (EvDocument *document, return scaled_surface; } +static EvDocumentInfo * +impress_document_get_info (EvDocument *document) +{ + EvDocumentInfo *info; + + info = g_new0 (EvDocumentInfo, 1); + info->fields_mask = 0; + + return info; +} + static void impress_document_finalize (GObject *object) { @@ -454,31 +464,17 @@ impress_document_finalize (GObject *object) static void impress_document_class_init (ImpressDocumentClass *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 = impress_document_finalize; -} -static EvDocumentInfo * -impress_document_get_info (EvDocument *document) -{ - EvDocumentInfo *info; - - info = g_new0 (EvDocumentInfo, 1); - info->fields_mask = 0; - - return info; -} - -static void -impress_document_document_iface_init (EvDocumentIface *iface) -{ - iface->load = impress_document_load; - iface->save = impress_document_save; - iface->get_n_pages = impress_document_get_n_pages; - iface->get_page_size = impress_document_get_page_size; - iface->render = impress_document_render; - iface->get_info = impress_document_get_info; + ev_document_class->load = impress_document_load; + ev_document_class->save = impress_document_save; + ev_document_class->get_n_pages = impress_document_get_n_pages; + ev_document_class->get_page_size = impress_document_get_page_size; + ev_document_class->render = impress_document_render; + ev_document_class->get_info = impress_document_get_info; } static GdkPixbuf * diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 0333d71..84314ce 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -92,12 +92,12 @@ typedef struct { struct _PdfDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; struct _PdfDocument { - GObject parent_instance; + EvDocument parent_instance; PopplerDocument *document; gchar *password; @@ -113,7 +113,6 @@ struct _PdfDocument GList *layers; }; -static void pdf_document_document_iface_init (EvDocumentIface *iface); static void pdf_document_security_iface_init (EvDocumentSecurityIface *iface); static void pdf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static void pdf_document_document_links_iface_init (EvDocumentLinksIface *iface); @@ -234,14 +233,6 @@ pdf_document_dispose (GObject *object) } static void -pdf_document_class_init (PdfDocumentClass *klass) -{ - GObjectClass *g_object_class = G_OBJECT_CLASS (klass); - - g_object_class->dispose = pdf_document_dispose; -} - -static void pdf_document_init (PdfDocument *pdf_document) { pdf_document->password = NULL; @@ -448,28 +439,6 @@ pdf_document_render (EvDocument *document, width, height, rc); } -/* EvDocumentSecurity */ - -static gboolean -pdf_document_has_document_security (EvDocumentSecurity *document_security) -{ - /* FIXME: do we really need to have this? */ - return FALSE; -} - -static void -pdf_document_set_password (EvDocumentSecurity *document_security, - const char *password) -{ - PdfDocument *document = PDF_DOCUMENT (document_security); - - if (document->password) - g_free (document->password); - - document->password = g_strdup (password); -} - - /* reference: http://www.pdfa.org/lib/exe/fetch.php?id=pdfa%3Aen%3Atechdoc&cache=cache&media=pdfa:techdoc:tn0001_pdfa-1_and_namespaces_2008-03-18.pdf */ static char * @@ -721,17 +690,42 @@ pdf_document_get_info (EvDocument *document) } static void -pdf_document_document_iface_init (EvDocumentIface *iface) -{ - iface->save = pdf_document_save; - iface->load = pdf_document_load; - iface->get_n_pages = pdf_document_get_n_pages; - iface->get_page = pdf_document_get_page; - iface->get_page_size = pdf_document_get_page_size; - iface->get_page_label = pdf_document_get_page_label; - iface->render = pdf_document_render; - iface->get_info = pdf_document_get_info; -}; +pdf_document_class_init (PdfDocumentClass *klass) +{ + GObjectClass *g_object_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + g_object_class->dispose = pdf_document_dispose; + + ev_document_class->save = pdf_document_save; + ev_document_class->load = pdf_document_load; + ev_document_class->get_n_pages = pdf_document_get_n_pages; + ev_document_class->get_page = pdf_document_get_page; + ev_document_class->get_page_size = pdf_document_get_page_size; + ev_document_class->get_page_label = pdf_document_get_page_label; + ev_document_class->render = pdf_document_render; + ev_document_class->get_info = pdf_document_get_info; +} + +/* EvDocumentSecurity */ +static gboolean +pdf_document_has_document_security (EvDocumentSecurity *document_security) +{ + /* FIXME: do we really need to have this? */ + return FALSE; +} + +static void +pdf_document_set_password (EvDocumentSecurity *document_security, + const char *password) +{ + PdfDocument *document = PDF_DOCUMENT (document_security); + + if (document->password) + g_free (document->password); + + document->password = g_strdup (password); +} static void pdf_document_security_iface_init (EvDocumentSecurityIface *iface) diff --git a/backend/pixbuf/pixbuf-document.c b/backend/pixbuf/pixbuf-document.c index d509b4d..df3af03 100644 --- a/backend/pixbuf/pixbuf-document.c +++ b/backend/pixbuf/pixbuf-document.c @@ -27,12 +27,12 @@ struct _PixbufDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; struct _PixbufDocument { - GObject parent_instance; + EvDocument parent_instance; GdkPixbuf *pixbuf; @@ -41,7 +41,6 @@ struct _PixbufDocument typedef struct _PixbufDocumentClass PixbufDocumentClass; -static void pixbuf_document_document_iface_init (EvDocumentIface *iface); static void pixbuf_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); EV_BACKEND_REGISTER_WITH_CODE (PixbufDocument, pixbuf_document, @@ -139,14 +138,6 @@ pixbuf_document_finalize (GObject *object) G_OBJECT_CLASS (pixbuf_document_parent_class)->finalize (object); } -static void -pixbuf_document_class_init (PixbufDocumentClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = pixbuf_document_finalize; -} - static EvDocumentInfo * pixbuf_document_get_info (EvDocument *document) { @@ -159,14 +150,19 @@ pixbuf_document_get_info (EvDocument *document) } static void -pixbuf_document_document_iface_init (EvDocumentIface *iface) +pixbuf_document_class_init (PixbufDocumentClass *klass) { - iface->load = pixbuf_document_load; - iface->save = pixbuf_document_save; - iface->get_n_pages = pixbuf_document_get_n_pages; - iface->get_page_size = pixbuf_document_get_page_size; - iface->render = pixbuf_document_render; - iface->get_info = pixbuf_document_get_info; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + gobject_class->finalize = pixbuf_document_finalize; + + ev_document_class->load = pixbuf_document_load; + ev_document_class->save = pixbuf_document_save; + ev_document_class->get_n_pages = pixbuf_document_get_n_pages; + ev_document_class->get_page_size = pixbuf_document_get_page_size; + ev_document_class->render = pixbuf_document_render; + ev_document_class->get_info = pixbuf_document_get_info; } static GdkPixbuf * diff --git a/backend/ps/ev-spectre.c b/backend/ps/ev-spectre.c index 1342c3e..8ee1732 100644 --- a/backend/ps/ev-spectre.c +++ b/backend/ps/ev-spectre.c @@ -31,17 +31,16 @@ #include "ev-document-misc.h" struct _PSDocument { - GObject object; + EvDocument object; SpectreDocument *doc; SpectreExporter *exporter; }; struct _PSDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; -static void ps_document_document_iface_init (EvDocumentIface *iface); static void ps_document_file_exporter_iface_init (EvFileExporterIface *iface); static void ps_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); @@ -77,16 +76,6 @@ ps_document_dispose (GObject *object) G_OBJECT_CLASS (ps_document_parent_class)->dispose (object); } -static void -ps_document_class_init (PSDocumentClass *klass) -{ - GObjectClass *object_class; - - object_class = G_OBJECT_CLASS (klass); - - object_class->dispose = ps_document_dispose; -} - /* EvDocumentIface */ static gboolean ps_document_load (EvDocument *document, @@ -331,16 +320,21 @@ ps_document_render (EvDocument *document, } static void -ps_document_document_iface_init (EvDocumentIface *iface) +ps_document_class_init (PSDocumentClass *klass) { - iface->load = ps_document_load; - iface->save = ps_document_save; - iface->get_n_pages = ps_document_get_n_pages; - iface->get_page = ps_document_get_page; - iface->get_page_size = ps_document_get_page_size; - iface->get_page_label = ps_document_get_page_label; - iface->get_info = ps_document_get_info; - iface->render = ps_document_render; + GObjectClass *object_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + object_class->dispose = ps_document_dispose; + + ev_document_class->load = ps_document_load; + ev_document_class->save = ps_document_save; + ev_document_class->get_n_pages = ps_document_get_n_pages; + ev_document_class->get_page = ps_document_get_page; + ev_document_class->get_page_size = ps_document_get_page_size; + ev_document_class->get_page_label = ps_document_get_page_label; + ev_document_class->get_info = ps_document_get_info; + ev_document_class->render = ps_document_render; } /* EvDocumentThumbnailsIface */ diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c index 7f10c9a..d122ba7 100644 --- a/backend/tiff/tiff-document.c +++ b/backend/tiff/tiff-document.c @@ -37,12 +37,12 @@ struct _TiffDocumentClass { - GObjectClass parent_class; + EvDocumentClass parent_class; }; struct _TiffDocument { - GObject parent_instance; + EvDocument parent_instance; TIFF *tiff; gint n_pages; @@ -53,7 +53,6 @@ struct _TiffDocument typedef struct _TiffDocumentClass TiffDocumentClass; -static void tiff_document_document_iface_init (EvDocumentIface *iface); static void tiff_document_document_thumbnails_iface_init (EvDocumentThumbnailsIface *iface); static void tiff_document_document_file_exporter_iface_init (EvFileExporterIface *iface); @@ -384,39 +383,18 @@ tiff_document_render_pixbuf (EvDocument *document, return rotated_pixbuf; } -static void -tiff_document_finalize (GObject *object) -{ - TiffDocument *tiff_document = TIFF_DOCUMENT (object); - - if (tiff_document->tiff) - TIFFClose (tiff_document->tiff); - if (tiff_document->uri) - g_free (tiff_document->uri); - - G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object); -} - -static void -tiff_document_class_init (TiffDocumentClass *klass) -{ - GObjectClass *gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = tiff_document_finalize; -} - static gchar * tiff_document_get_page_label (EvDocument *document, EvPage *page) { TiffDocument *tiff_document = TIFF_DOCUMENT (document); static gchar *label; - + if (TIFFGetField (tiff_document->tiff, TIFFTAG_PAGENAME, &label) && g_utf8_validate (label, -1, NULL)) { return g_strdup (label); } - + return NULL; } @@ -432,15 +410,33 @@ tiff_document_get_info (EvDocument *document) } static void -tiff_document_document_iface_init (EvDocumentIface *iface) +tiff_document_finalize (GObject *object) +{ + TiffDocument *tiff_document = TIFF_DOCUMENT (object); + + if (tiff_document->tiff) + TIFFClose (tiff_document->tiff); + if (tiff_document->uri) + g_free (tiff_document->uri); + + G_OBJECT_CLASS (tiff_document_parent_class)->finalize (object); +} + +static void +tiff_document_class_init (TiffDocumentClass *klass) { - iface->load = tiff_document_load; - iface->save = tiff_document_save; - iface->get_n_pages = tiff_document_get_n_pages; - iface->get_page_size = tiff_document_get_page_size; - iface->render = tiff_document_render; - iface->get_page_label = tiff_document_get_page_label; - iface->get_info = tiff_document_get_info; + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + EvDocumentClass *ev_document_class = EV_DOCUMENT_CLASS (klass); + + gobject_class->finalize = tiff_document_finalize; + + ev_document_class->load = tiff_document_load; + ev_document_class->save = tiff_document_save; + ev_document_class->get_n_pages = tiff_document_get_n_pages; + ev_document_class->get_page_size = tiff_document_get_page_size; + ev_document_class->render = tiff_document_render; + ev_document_class->get_page_label = tiff_document_get_page_label; + ev_document_class->get_info = tiff_document_get_info; } static GdkPixbuf * diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index 9d1144a..66d7d46 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -1,5 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */ /* + * Copyright (C) 2009 Carlos Garcia Campos * Copyright (C) 2004 Marco Pesenti Gritti * * This program is free software; you can redistribute it and/or modify @@ -25,7 +26,7 @@ GMutex *ev_doc_mutex = NULL; GMutex *ev_fc_mutex = NULL; -EV_DEFINE_INTERFACE (EvDocument, ev_document, G_TYPE_OBJECT) +G_DEFINE_ABSTRACT_TYPE (EvDocument, ev_document, G_TYPE_OBJECT) GQuark ev_document_error_quark (void) @@ -37,11 +38,24 @@ ev_document_error_quark (void) return q; } +static EvPage * +ev_document_impl_get_page (EvDocument *document, + gint index) +{ + return ev_page_new (index); +} + static void -ev_document_class_init (EvDocumentIface *klass) +ev_document_init (EvDocument *document) { } +static void +ev_document_class_init (EvDocumentClass *klass) +{ + klass->get_page = ev_document_impl_get_page; +} + GMutex * ev_document_get_doc_mutex (void) { @@ -118,16 +132,16 @@ ev_document_load (EvDocument *document, const char *uri, GError **error) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); gboolean retval; GError *err = NULL; - retval = iface->load (document, uri, &err); + retval = klass->load (document, uri, &err); if (!retval) { if (err) { g_propagate_error (error, err); } else { - g_warning ("%s::EvDocumentIface::load returned FALSE but did not fill in @error; fix the backend!\n", + g_warning ("%s::EvDocument::load returned FALSE but did not fill in @error; fix the backend!\n", G_OBJECT_TYPE_NAME (document)); /* So upper layers don't crash */ @@ -156,38 +170,26 @@ ev_document_save (EvDocument *document, const char *uri, GError **error) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - gboolean retval; - - retval = iface->save (document, uri, error); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - return retval; + return klass->save (document, uri, error); } int ev_document_get_n_pages (EvDocument *document) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - gint retval; - - retval = iface->get_n_pages (document); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - return retval; + return klass->get_n_pages (document); } EvPage * ev_document_get_page (EvDocument *document, gint index) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - EvPage *retval; + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - if (iface->get_page) - retval = iface->get_page (document, index); - else - retval = ev_page_new (index); - - return retval; + return klass->get_page (document, index); } void @@ -196,43 +198,36 @@ ev_document_get_page_size (EvDocument *document, double *width, double *height) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - iface->get_page_size (document, page, width, height); + klass->get_page_size (document, page, width, height); } -char * +gchar * ev_document_get_page_label (EvDocument *document, EvPage *page) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - if (iface->get_page_label == NULL) - return NULL; - - return iface->get_page_label (document, page); + return klass->get_page_label ? + klass->get_page_label (document, page) : NULL; } EvDocumentInfo * ev_document_get_info (EvDocument *document) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - return iface->get_info (document); + return klass->get_info (document); } cairo_surface_t * ev_document_render (EvDocument *document, EvRenderContext *rc) { - EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document); - cairo_surface_t *retval; - - g_assert (iface->render); + EvDocumentClass *klass = EV_DOCUMENT_GET_CLASS (document); - retval = iface->render (document, rc); - - return retval; + return klass->render (document, rc); } /* EvDocumentInfo */ diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h index e74c49a..74bd3bb 100644 --- a/libdocument/ev-document.h +++ b/libdocument/ev-document.h @@ -1,5 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8; c-indent-level: 8 -*- */ /* + * Copyright (C) 2009 Carlos Garcia Campos * Copyright (C) 2000-2003 Marco Pesenti Gritti * * This program is free software; you can redistribute it and/or modify @@ -39,13 +40,13 @@ G_BEGIN_DECLS #define EV_TYPE_DOCUMENT (ev_document_get_type ()) #define EV_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EV_TYPE_DOCUMENT, EvDocument)) -#define EV_DOCUMENT_IFACE(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT, EvDocumentIface)) +#define EV_DOCUMENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EV_TYPE_DOCUMENT, EvDocumentClass)) #define EV_IS_DOCUMENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EV_TYPE_DOCUMENT)) -#define EV_IS_DOCUMENT_IFACE(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT)) -#define EV_DOCUMENT_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), EV_TYPE_DOCUMENT, EvDocumentIface)) +#define EV_IS_DOCUMENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EV_TYPE_DOCUMENT)) +#define EV_DOCUMENT_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), EV_TYPE_DOCUMENT, EvDocumentClass)) typedef struct _EvDocument EvDocument; -typedef struct _EvDocumentIface EvDocumentIface; +typedef struct _EvDocumentClass EvDocumentClass; typedef struct _EvPageCache EvPageCache; typedef struct _EvPageCacheClass EvPageCacheClass; @@ -66,29 +67,34 @@ typedef struct { typedef struct _EvRectangle EvRectangle; -struct _EvDocumentIface +struct _EvDocument { - GTypeInterface base_iface; + GObject base; +}; + +struct _EvDocumentClass +{ + GObjectClass base_class; - /* Methods */ + /* Virtual Methods */ gboolean (* load) (EvDocument *document, const char *uri, GError **error); gboolean (* save) (EvDocument *document, const char *uri, GError **error); - int (* get_n_pages) (EvDocument *document); + gint (* get_n_pages) (EvDocument *document); EvPage * (* get_page) (EvDocument *document, gint index); void (* get_page_size) (EvDocument *document, EvPage *page, double *width, double *height); - char * (* get_page_label) (EvDocument *document, + gchar * (* get_page_label) (EvDocument *document, EvPage *page); cairo_surface_t * (* render) (EvDocument *document, EvRenderContext *rc); - EvDocumentInfo * (* get_info) (EvDocument *document); + EvDocumentInfo * (* get_info) (EvDocument *document); }; GType ev_document_get_type (void) G_GNUC_CONST; @@ -113,14 +119,14 @@ gboolean ev_document_load (EvDocument *document, gboolean ev_document_save (EvDocument *document, const char *uri, GError **error); -int ev_document_get_n_pages (EvDocument *document); +gint ev_document_get_n_pages (EvDocument *document); EvPage *ev_document_get_page (EvDocument *document, gint index); void ev_document_get_page_size (EvDocument *document, EvPage *page, double *width, double *height); -char *ev_document_get_page_label (EvDocument *document, +gchar *ev_document_get_page_label (EvDocument *document, EvPage *page); cairo_surface_t *ev_document_render (EvDocument *document, EvRenderContext *rc); @@ -187,7 +193,7 @@ static void backend_name##_class_intern_init (gpointer klass) \ G_MODULE_EXPORT GType \ register_evince_backend (GTypeModule *module) \ { \ - const GTypeInfo our_info = { \ + const GTypeInfo our_info = { \ sizeof (BackendName##Class), \ NULL, /* base_init */ \ NULL, /* base_finalize */ \ @@ -204,14 +210,11 @@ register_evince_backend (GTypeModule *module) \ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); \ \ g_define_type_id = g_type_module_register_type (module, \ - G_TYPE_OBJECT, \ - #BackendName, \ - &our_info, \ - (GTypeFlags)0); \ + EV_TYPE_DOCUMENT, \ + #BackendName, \ + &our_info, \ + (GTypeFlags)0); \ \ - EV_BACKEND_IMPLEMENT_INTERFACE (EV_TYPE_DOCUMENT, \ - backend_name##_document_iface_init); \ - \ CODE \ \ return g_define_type_id; \ -- cgit v0.9.1