* $Id$
*/
+#if !defined (__EV_EVINCE_DOCUMENT_H_INSIDE__) && !defined (EVINCE_COMPILATION)
+#error "Only <evince-document.h> can be included directly."
+#endif
+
#ifndef EV_DOCUMENT_H
#define EV_DOCUMENT_H
double y;
} EvPoint;
-typedef struct {
- double x1;
- double y1;
- double x2;
- double y2;
-} EvRectangle;
+typedef struct _EvRectangle EvRectangle;
struct _EvDocumentIface
{
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);
+
/* convenience macro to ease interface addition in the CODE
* section of EV_BACKEND_REGISTER_WITH_CODE (this macro relies on
* the g_define_type_id present within EV_BACKEND_REGISTER_WITH_CODE()).
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 */ \
} \
return g_define_type_id__volatile; \
}
+
+/*
+ * A convenience macro for boxed type implementations, which defines a
+ * type_name_get_type() function registering the boxed type.
+ */
+#define EV_DEFINE_BOXED_TYPE(TypeName, type_name, copy_func, free_func) \
+GType \
+type_name##_get_type (void) \
+{ \
+ static volatile gsize g_define_type_id__volatile = 0; \
+ if (g_once_init_enter (&g_define_type_id__volatile)) { \
+ GType g_define_type_id = \
+ g_boxed_type_register_static (g_intern_static_string (#TypeName), \
+ (GBoxedCopyFunc) copy_func, \
+ (GBoxedFreeFunc) free_func); \
+ g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
+ } \
+ return g_define_type_id__volatile; \
+}
G_END_DECLS