#ifndef GEGL_CHANT_SELF #error "GEGL_CHANT_SELF not defined" #endif #define GEGL_CHANT_PROPERTIES 1 /****************************************************************************/ #include #include #include #include "transform-core.h" #include "module.h" #define GEGL_CHANT_PARENT_TypeName OpTransform #define GEGL_CHANT_PARENT_TypeNameClass OpTransformClass #define GEGL_CHANT_PARENT_TYPE TYPE_OP_AFFINE #define GEGL_CHANT_PARENT_CLASS OP_AFFINE_CLASS typedef struct Generated GeglChantOperation; typedef struct GeneratedClass ChantClass; struct Generated { GEGL_CHANT_PARENT_TypeName parent_instance; #define gegl_chant_int(name, min, max, def, blurb) gint name; #define gegl_chant_double(name, min, max, def, blurb) gdouble name; #define gegl_chant_float(name, min, max, def, blurb) gfloat name; #define gegl_chant_boolean(name, def, blurb) gboolean name; #define gegl_chant_string(name, def, blurb) gchar *name; #define gegl_chant_object(name, blurb) GObject *name; #define gegl_chant_pointer(name, blurb) gpointer name; #include GEGL_CHANT_SELF /****************************************************************************/ /* undefining the chant macros before all subsequent inclusions */ #undef gegl_chant_int #undef gegl_chant_double #undef gegl_chant_float #undef gegl_chant_boolean #undef gegl_chant_string #undef gegl_chant_object #undef gegl_chant_pointer /****************************************************************************/ }; struct GeneratedClass { GEGL_CHANT_PARENT_TypeNameClass parent_class; }; #define GEGL_CHANT_OPERATION(obj) ((GeglChantOperation*)(obj)) #define M_DEFINE_TYPE_EXTENDED(type_name, TYPE_PARENT, flags, CODE) \ \ static void gegl_chant_init (GeglChantOperation *self); \ static void gegl_chant_class_init (ChantClass *klass); \ static gpointer gegl_chant_parent_class = NULL; \ \ static void \ gegl_chant_class_intern_init (gpointer klass) \ { \ gegl_chant_parent_class = g_type_class_peek_parent (klass); \ gegl_chant_class_init ((ChantClass*) klass); \ } \ GType type_name##_get_type (void); \ \ GType \ type_name##_get_type (void) \ { \ static GType g_define_type_id = 0; \ if (G_UNLIKELY (g_define_type_id == 0)) \ { \ static const GTypeInfo g_define_type_info = \ { \ sizeof (ChantClass), \ (GBaseInitFunc) NULL, \ (GBaseFinalizeFunc) NULL, \ (GClassInitFunc) gegl_chant_class_intern_init, \ (GClassFinalizeFunc) NULL, \ NULL, /* class_data */ \ sizeof (GeglChantOperation), \ 0, /* n_preallocs */ \ (GInstanceInitFunc) gegl_chant_init, \ NULL /* value_table */ \ }; \ g_define_type_id = \ gegl_module_register_type (affine_module_get_module (), TYPE_PARENT,\ "GeglOpPlugIn-" #type_name,\ &g_define_type_info, 0);\ { CODE ; }\ } \ return g_define_type_id; \ } #define M_DEFINE_TYPE(t_n, T_P) M_DEFINE_TYPE_EXTENDED (t_n, T_P, 0, ) M_DEFINE_TYPE (GEGL_CHANT_NAME, GEGL_CHANT_PARENT_TYPE) enum { PROP_0, #define gegl_chant_int(name, min, max, def, blurb) PROP_##name, #define gegl_chant_double(name, min, max, def, blurb) PROP_##name, #define gegl_chant_float(name, min, max, def, blurb) PROP_##name, #define gegl_chant_boolean(name, def, blurb) PROP_##name, #define gegl_chant_string(name, def, blurb) PROP_##name, #define gegl_chant_object(name, blurb) PROP_##name, #define gegl_chant_pointer(name, blurb) PROP_##name, #include GEGL_CHANT_SELF #undef gegl_chant_int #undef gegl_chant_double #undef gegl_chant_float #undef gegl_chant_boolean #undef gegl_chant_string #undef gegl_chant_object #undef gegl_chant_pointer PROP_LAST }; static void get_property (GObject *gobject, guint property_id, GValue *value, GParamSpec *pspec) { GeglChantOperation *self = GEGL_CHANT_OPERATION (gobject); switch (property_id) { #define gegl_chant_int(name, min, max, def, blurb)\ case PROP_##name: g_value_set_int (value, self->name);break; #define gegl_chant_double(name, min, max, def, blurb)\ case PROP_##name: g_value_set_double (value, self->name);break; #define gegl_chant_float(name, min, max, def, blurb)\ case PROP_##name: g_value_set_float (value, self->name);break; #define gegl_chant_boolean(name, def, blurb)\ case PROP_##name: g_value_set_boolean (value, self->name);break; #define gegl_chant_string(name, def, blurb)\ case PROP_##name: g_value_set_string (value, self->name);break; #define gegl_chant_object(name, blurb)\ case PROP_##name: g_value_set_object (value, self->name);break; #define gegl_chant_pointer(name, blurb)\ case PROP_##name: g_value_set_pointer (value, self->name);break; #include GEGL_CHANT_SELF #undef gegl_chant_int #undef gegl_chant_double #undef gegl_chant_float #undef gegl_chant_boolean #undef gegl_chant_string #undef gegl_chant_object #undef gegl_chant_pointer default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); break; } self = NULL; /* silence GCC if no properties were defined */ } static void set_property (GObject *gobject, guint property_id, const GValue *value, GParamSpec *pspec) { GeglChantOperation *self = GEGL_CHANT_OPERATION (gobject); switch (property_id) { #define gegl_chant_int(name, min, max, def, blurb)\ case PROP_##name:\ self->name = g_value_get_int (value);\ break; #define gegl_chant_double(name, min, max, def, blurb)\ case PROP_##name:\ self->name = g_value_get_double (value);\ break; #define gegl_chant_float(name, min, max, def, blurb)\ case PROP_##name:\ self->name = g_value_get_float (value);\ break; #define gegl_chant_boolean(name, def, blurb)\ case PROP_##name:\ self->name = g_value_get_boolean (value);\ break; #define gegl_chant_string(name, def, blurb)\ case PROP_##name:\ if (self->name)\ g_free (self->name);\ self->name = g_strdup (g_value_get_string (value));\ break; #define gegl_chant_object(name, blurb)\ case PROP_##name:\ if (self->name != NULL) \ g_object_unref (self->name);\ self->name = g_value_get_object (value);\ break; #define gegl_chant_pointer(name, blurb)\ case PROP_##name:\ self->name = g_value_get_pointer (value);\ break; #include GEGL_CHANT_SELF #undef gegl_chant_int #undef gegl_chant_double #undef gegl_chant_float #undef gegl_chant_boolean #undef gegl_chant_string #undef gegl_chant_object #undef gegl_chant_pointer default: G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, property_id, pspec); break; } self = NULL; /* silence GCC if no properties were defined */ } static void gegl_chant_init (GeglChantOperation *self) { } #ifdef GEGL_CHANT_INIT static void init (GeglChantOperation *self); static GObject * gegl_chant_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { GObject *obj; obj = G_OBJECT_CLASS (gegl_chant_parent_class)->constructor ( type, n_construct_properties, construct_properties); init (GEGL_CHANT_OPERATION (obj)); return obj; } #endif #ifdef GEGL_CHANT_CLASS_INIT static void class_init (GeglOperationClass *operation_class); #endif static void create_matrix (OpTransform *affine, GeglMatrix3 *matrix); static void gegl_chant_class_init (ChantClass * klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GEGL_CHANT_PARENT_TypeNameClass *parent_class = GEGL_CHANT_PARENT_CLASS (klass); GeglOperationClass *operation_class; operation_class = GEGL_OPERATION_CLASS (klass); object_class->set_property = set_property; object_class->get_property = get_property; parent_class->create_matrix = create_matrix; #ifdef GEGL_CHANT_INIT object_class->constructor = gegl_chant_constructor; #endif #ifdef GEGL_CHANT_CLASS_INIT class_init (operation_class); #endif #if 1 #define M_GEGL_CHANT_SET_NAME_EXTENDED(nam) \ operation_class->name=g_strdup("gegl:"#nam); #define M_GEGL_CHANT_SET_NAME(name) M_GEGL_CHANT_SET_NAME_EXTENDED(name) M_GEGL_CHANT_SET_NAME (GEGL_CHANT_NAME); #endif #ifdef GEGL_CHANT_DESCRIPTION gegl_operation_class_set_key (operation_class, "description", GEGL_CHANT_DESCRIPTION); #endif #define gegl_chant_int(name, min, max, def, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_int (#name, #name, blurb,\ min, max, def,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #define gegl_chant_double(name, min, max, def, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_double (#name, #name, blurb,\ min, max, def,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #define gegl_chant_float(name, min, max, def, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_float (#name, #name, blurb,\ min, max, def,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #define gegl_chant_boolean(name, def, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_boolean (#name, #name, blurb,\ def,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #define gegl_chant_string(name, def, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_string (#name, #name, blurb,\ def,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #define gegl_chant_object(name, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_object (#name, #name, blurb,\ G_TYPE_OBJECT,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #define gegl_chant_pointer(name, blurb) \ g_object_class_install_property (object_class, PROP_##name,\ g_param_spec_pointer (#name, #name, blurb,\ G_PARAM_READWRITE |\ G_PARAM_CONSTRUCT |\ GEGL_PARAM_PAD_INPUT)); #include GEGL_CHANT_SELF #undef gegl_chant_int #undef gegl_chant_double #undef gegl_chant_float #undef gegl_chant_boolean #undef gegl_chant_string #undef gegl_chant_object #undef gegl_chant_pointer } /****************************************************************************/