X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=libdocument%2Fev-document.h;h=63d2a8ec7e71c561240de009f7c9db6bdd67aa4f;hb=aeadd8e191190c43e94999fef077ebea69e966c9;hp=e07e3a22a8a5e99a17c8c68aa59ea176669a4632;hpb=95395e6b0e5e174a43931605043dba668232d331;p=evince.git diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h index e07e3a22..63d2a8ec 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 @@ -14,11 +15,15 @@ * * 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. * * $Id$ */ +#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION) +#error "Only can be included directly." +#endif + #ifndef EV_DOCUMENT_H #define EV_DOCUMENT_H @@ -35,15 +40,14 @@ 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 _EvPageCache EvPageCache; -typedef struct _EvPageCacheClass EvPageCacheClass; +typedef struct _EvDocumentClass EvDocumentClass; +typedef struct _EvDocumentPrivate EvDocumentPrivate; #define EV_DOCUMENT_ERROR ev_document_error_quark () #define EV_DOC_MUTEX_LOCK (ev_document_doc_mutex_lock ()) @@ -60,78 +64,140 @@ typedef struct { double y; } EvPoint; +typedef struct _EvRectangle EvRectangle; +typedef struct _EvMapping EvMapping; + +typedef struct _EvDocumentBackendInfo EvDocumentBackendInfo; +struct _EvDocumentBackendInfo +{ + const gchar *name; + const gchar *version; +}; + typedef struct { - double x1; - double y1; - double x2; - double y2; -} EvRectangle; + const gchar *filename; + gint line; + gint col; +} EvSourceLink; + +struct _EvDocument +{ + GObject base; -struct _EvDocumentIface + EvDocumentPrivate *priv; +}; + +struct _EvDocumentClass { - GTypeInterface base_iface; + 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); - gboolean (* has_attachments) (EvDocument *document); - GList * (* get_attachments) (EvDocument *document); cairo_surface_t * (* render) (EvDocument *document, EvRenderContext *rc); - EvDocumentInfo * (* get_info) (EvDocument *document); + EvDocumentInfo * (* get_info) (EvDocument *document); + gboolean (* get_backend_info)(EvDocument *document, + EvDocumentBackendInfo *info); + gboolean (* support_synctex) (EvDocument *document); }; -GType ev_document_get_type (void) G_GNUC_CONST; -GQuark ev_document_error_quark (void); +GType ev_document_get_type (void) G_GNUC_CONST; +GQuark ev_document_error_quark (void); /* Document mutex */ -GMutex *ev_document_get_doc_mutex (void); -void ev_document_doc_mutex_lock (void); -void ev_document_doc_mutex_unlock (void); -gboolean ev_document_doc_mutex_trylock(void); +GMutex *ev_document_get_doc_mutex (void); +void ev_document_doc_mutex_lock (void); +void ev_document_doc_mutex_unlock (void); +gboolean ev_document_doc_mutex_trylock (void); /* FontConfig mutex */ -GMutex *ev_document_get_fc_mutex (void); -void ev_document_fc_mutex_lock (void); -void ev_document_fc_mutex_unlock (void); -gboolean ev_document_fc_mutex_trylock (void); +GMutex *ev_document_get_fc_mutex (void); +void ev_document_fc_mutex_lock (void); +void ev_document_fc_mutex_unlock (void); +gboolean ev_document_fc_mutex_trylock (void); -EvDocumentInfo *ev_document_get_info (EvDocument *document); -gboolean ev_document_load (EvDocument *document, - const char *uri, - GError **error); -gboolean ev_document_save (EvDocument *document, - const char *uri, - GError **error); -int 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, - EvPage *page); -gboolean ev_document_has_attachments (EvDocument *document); -GList *ev_document_get_attachments (EvDocument *document); -cairo_surface_t *ev_document_render (EvDocument *document, - EvRenderContext *rc); +EvDocumentInfo *ev_document_get_info (EvDocument *document); +gboolean ev_document_get_backend_info (EvDocument *document, + EvDocumentBackendInfo *info); +gboolean ev_document_load (EvDocument *document, + const char *uri, + GError **error); +gboolean ev_document_save (EvDocument *document, + const char *uri, + GError **error); +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, + gint page_index, + double *width, + double *height); +gchar *ev_document_get_page_label (EvDocument *document, + gint page_index); +cairo_surface_t *ev_document_render (EvDocument *document, + EvRenderContext *rc); +const gchar *ev_document_get_uri (EvDocument *document); +const gchar *ev_document_get_title (EvDocument *document); +gboolean ev_document_is_page_size_uniform (EvDocument *document); +void ev_document_get_max_page_size (EvDocument *document, + gdouble *width, + gdouble *height); +void ev_document_get_min_page_size (EvDocument *document, + gdouble *width, + gdouble *height); +gboolean ev_document_check_dimensions (EvDocument *document); +gint ev_document_get_max_label_len (EvDocument *document); +gboolean ev_document_has_text_page_labels (EvDocument *document); +gboolean ev_document_find_page_by_label (EvDocument *document, + const gchar *page_label, + gint *page_index); +gboolean ev_document_has_synctex (EvDocument *document); + +EvSourceLink *ev_document_synctex_backward_search + (EvDocument *document, + gint page_index, + gfloat x, + gfloat y); + +EvMapping *ev_document_synctex_forward_search + (EvDocument *document, + EvSourceLink *source_link); -gint ev_rect_cmp (EvRectangle *a, - EvRectangle *b); +gint ev_rect_cmp (EvRectangle *a, + EvRectangle *b); + +#define EV_TYPE_RECTANGLE (ev_rectangle_get_type ()) +struct _EvRectangle +{ + gdouble x1; + gdouble y1; + gdouble x2; + gdouble y2; +}; + +GType ev_rectangle_get_type (void) G_GNUC_CONST; +EvRectangle *ev_rectangle_new (void); +EvRectangle *ev_rectangle_copy (EvRectangle *ev_rect); +void ev_rectangle_free (EvRectangle *ev_rect); + +struct _EvMapping { + EvRectangle area; + gpointer data; +}; /* convenience macro to ease interface addition in the CODE * section of EV_BACKEND_REGISTER_WITH_CODE (this macro relies on @@ -178,7 +244,7 @@ static void backend_name##_class_intern_init (gpointer klass) \ G_MODULE_EXPORT GType \ register_evince_backend (GTypeModule *module) \ { \ - static const GTypeInfo our_info = { \ + const GTypeInfo our_info = { \ sizeof (BackendName##Class), \ NULL, /* base_init */ \ NULL, /* base_finalize */ \ @@ -195,14 +261,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; \ @@ -234,7 +297,6 @@ type_name##_get_type (void) } \ return g_define_type_id__volatile; \ } - G_END_DECLS