Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/libdocument
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2009-05-12 08:38:33 (GMT)
committer Carlos Garcia Campos <carlosgc@gnome.org>2009-05-12 08:38:33 (GMT)
commit13c5a93aca3d2e7b88161ae047b751af20ce277d (patch)
tree22dbb1491f027d37f2626c990c211ac0a009e6c2 /libdocument
parent1ef84ecbbff3626802476909c821a17ecfe2ed32 (diff)
[libdocument] Convert EvRectangle struct into a boxed type
Diffstat (limited to 'libdocument')
-rw-r--r--libdocument/ev-document.c27
-rw-r--r--libdocument/ev-document.h40
2 files changed, 61 insertions, 6 deletions
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