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 --- (limited to 'libdocument/ev-document.c') 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 */ -- cgit v0.9.1