cairo-gobject-structs.c [plain text]
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "cairo-gobject.h"
#define CAIRO_DEFINE_BOXED(Name,underscore_name,copy_func,free_func) \
GType \
underscore_name ## _get_type (void) \
{ \
static volatile gsize type_volatile = 0; \
if (g_once_init_enter (&type_volatile)) { \
GType type = g_boxed_type_register_static (g_intern_static_string (Name), \
(GBoxedCopyFunc)copy_func, \
(GBoxedFreeFunc)free_func); \
g_once_init_leave (&type_volatile, type); \
} \
return type_volatile; \
}
CAIRO_DEFINE_BOXED ("CairoContext", cairo_gobject_context,
cairo_reference, cairo_destroy);
CAIRO_DEFINE_BOXED ("CairoDevice", cairo_gobject_device,
cairo_device_reference, cairo_device_destroy);
CAIRO_DEFINE_BOXED ("CairoPattern", cairo_gobject_pattern,
cairo_pattern_reference, cairo_pattern_destroy);
CAIRO_DEFINE_BOXED ("CairoSurface", cairo_gobject_surface,
cairo_surface_reference, cairo_surface_destroy);
CAIRO_DEFINE_BOXED ("CairoScaledFont", cairo_gobject_scaled_font,
cairo_scaled_font_reference, cairo_scaled_font_destroy);
CAIRO_DEFINE_BOXED ("CairoFontFace", cairo_gobject_font_face,
cairo_font_face_reference, cairo_font_face_destroy);
CAIRO_DEFINE_BOXED ("CairoFontOptions", cairo_gobject_font_options,
cairo_font_options_copy, cairo_font_options_destroy);
CAIRO_DEFINE_BOXED ("CairoRegion", cairo_gobject_region,
cairo_region_reference, cairo_region_destroy);
#define COPY_FUNC(name) \
static gpointer \
cairo_gobject_cairo_ ## name ## _copy (gpointer src) \
{ \
return g_memdup (src, sizeof (cairo_ ## name ## _t)); \
}
COPY_FUNC (rectangle)
CAIRO_DEFINE_BOXED ("CairoRectangle", cairo_gobject_rectangle,
cairo_gobject_cairo_rectangle_copy, g_free);
COPY_FUNC (rectangle_int)
CAIRO_DEFINE_BOXED ("CairoRectangleInt", cairo_gobject_rectangle_int,
cairo_gobject_cairo_rectangle_int_copy, g_free);