From 13c5a93aca3d2e7b88161ae047b751af20ce277d Mon Sep 17 00:00:00 2001 From: Carlos Garcia Campos Date: Tue, 12 May 2009 08:38:33 +0000 Subject: [libdocument] Convert EvRectangle struct into a boxed type --- (limited to 'libdocument') diff --git a/libdocument/ev-document.c b/libdocument/ev-document.c index f33b75b..e1521b7 100644 --- a/libdocument/ev-document.c +++ b/libdocument/ev-document.c @@ -311,6 +311,33 @@ ev_document_info_free (EvDocumentInfo *info) g_free (info); } +/* EvRectangle */ +EV_DEFINE_BOXED_TYPE (EvRectangle, ev_rectangle, ev_rectangle_copy, ev_rectangle_free) + +EvRectangle * +ev_rectangle_new (void) +{ + return g_new0 (EvRectangle, 1); +} + +EvRectangle * +ev_rectangle_copy (EvRectangle *rectangle) +{ + EvRectangle *new_rectangle; + + g_return_val_if_fail (rectangle != NULL, NULL); + + new_rectangle = g_new (EvRectangle, 1); + *new_rectangle = *rectangle; + + return new_rectangle; +} + +void +ev_rectangle_free (EvRectangle *rectangle) +{ + g_free (rectangle); +} /* Compares two rects. returns 0 if they're equal */ #define EPSILON 0.0000001 diff --git a/libdocument/ev-document.h b/libdocument/ev-document.h index 3ab918a..5afdb03 100644 --- a/libdocument/ev-document.h +++ b/libdocument/ev-document.h @@ -64,12 +64,7 @@ typedef struct { double y; } EvPoint; -typedef struct { - double x1; - double y1; - double x2; - double y2; -} EvRectangle; +typedef struct _EvRectangle EvRectangle; struct _EvDocumentIface { @@ -137,6 +132,20 @@ cairo_surface_t *ev_document_render (EvDocument *document, 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()). @@ -269,6 +278,25 @@ type_name##_get_type (void) } \ 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 -- cgit v0.9.1