[gegl] gegl-op: add macro based alternative to varargs property meta-data
- From: Øyvind Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] gegl-op: add macro based alternative to varargs property meta-data
- Date: Mon, 19 May 2014 12:43:49 +0000 (UTC)
commit 4b10ec0f346e04a9ec6e7fdd82041b9027b743f3
Author: Øyvind Kolås <pippin gimp org>
Date: Mon May 19 14:27:48 2014 +0200
gegl-op: add macro based alternative to varargs property meta-data
Varargs in operation initialization can cause crashes on startup; that might
be masked by running on 32bit vs 64bit; and possibly other platform specific
traits.
gegl/gegl-op.h | 550 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 445 insertions(+), 105 deletions(-)
---
diff --git a/gegl/gegl-op.h b/gegl/gegl-op.h
index fa68351..64f1cf5 100644
--- a/gegl/gegl-op.h
+++ b/gegl/gegl-op.h
@@ -228,20 +228,44 @@ gegl_module_register (GTypeModule *module)
}
#endif
+
+#define description(blurb)
+#define value_range(min,max)
+#define ui_range(min,max)
+#define ui_gamma(gamma)
+#define ui_meta(key,val)
+
+#define ITEM(name,label,def_val, type)
+#define ITEM2(name,label,def_val,type) ITEM(name,label,def_val,type)
+
/* enum registration */
-#define gegl_property_double(name, label, ...)
-#define gegl_property_string(name, label, ...)
-#define gegl_property_file_path(name, label, ...)
-#define gegl_property_int(name, label, ...)
-#define gegl_property_boolean(name, label, ...)
-#define gegl_property_enum(name, label, enum, enum_name, ...)
-#define gegl_property_object(name, label, ...)
-#define gegl_property_pointer(name, label, ...)
-#define gegl_property_format(name, label, ...)
-#define gegl_property_color(name, label, ...)
-#define gegl_property_curve(name, label, ...)
-#define gegl_property_seed(name, label, rand_name, ...)
-#define gegl_property_path(name, label, ...)
+
+#define property_double(name, label, def_val) ITEM(name,label,def_val,double)
+#define property_int(name, label, def_val) ITEM(name,label,def_val,int)
+#define property_string(name, label, def_val) ITEM(name,label,def_val,string)
+#define property_file_path(name, label, def_val) ITEM(name,label,def_val,string)
+#define property_boolean(name, label, def_val) ITEM(name,label,def_val,boolean)
+#define property_pointer(name, label, def_val) ITEM(name,label,def_val,pointer)
+#define property_object(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_enum(name, label, enm, enum_name, def_val) ITEM(name,label,def_val,pointer)
+#define property_seed(name, label, rand_name) ITEM(name,label,def_val,int)
+#define property_format(name, label, def_val) ITEM(name,label,def_val,pointer)
+#define property_curve(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_path(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_color(name, label, def_val) ITEM2(name,label,def_val,object)
+#define gegl_property_double(name, label, ...) ITEM(name,label,def_val,double)
+#define gegl_property_string(name, label, ...) ITEM(name,label,def_val,string)
+#define gegl_property_file_path(name, label, ...) ITEM(name,label,def_val,string)
+#define gegl_property_int(name, label, ...) ITEM(name,label,def_val,int)
+#define gegl_property_boolean(name, label, ...) ITEM(name,label,def_val,boolean)
+#define gegl_property_object(name, label, ...) ITEM2(name,label,def_val,object)
+#define gegl_property_pointer(name, label, ...) ITEM(name,label,def_val,pointer)
+#define gegl_property_format(name, label, ...) ITEM(name,label,def_val,pointer)
+#define gegl_property_color(name, label, ...) ITEM(name,label,def_val,object)
+#define gegl_property_curve(name, label, ...) ITEM2(name,label,def_val,object)
+#define gegl_property_path(name, label, ...) ITEM2(name,label,def_val,object)
+#define gegl_property_seed(name, label, rand_name, ...) ITEM(name,label,def_val,int)
+#define gegl_property_enum(name, label, enm, enum_name, ...) ITEM(name,label,def_val,enum)
#define gegl_enum_start(enum_name) typedef enum {
#define gegl_enum_value(value, nick) value ,
@@ -274,6 +298,19 @@ GType enum_name ## _get_type (void) \
#include GEGL_OP_C_FILE
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_boolean
+#undef property_file_path
+#undef property_object
+#undef property_pointer
+#undef property_format
+#undef property_enum
+#undef property_seed
+#undef property_curve
+#undef property_color
+#undef property_path
#undef gegl_property_double
#undef gegl_property_string
#undef gegl_property_file_path
@@ -299,12 +336,27 @@ GType enum_name ## _get_type (void) \
struct _GeglProperties
{
gpointer user_data; /* for use by the op implementation */
+#define property_double(name, label, def_val) gdouble name;
+#define property_int(name, label, def_val) gint name;
+#define property_string(name, label, def_val) gchar *name;
+#define property_boolean(name, label, def_val) gboolean name;
+#define property_file_path(name, label, def_val) gchar *name;
+#define property_object(name, label, def_val) GObject *name;
+#define property_curve(name, label, def_val) GeglCurve *name;
+#define property_color(name, label, def_val) GeglColor *name;
+#define property_path(name, label, def_val) GeglPath *name; gulong path_changed_handler;
+#define property_pointer(name, label, def_val) gpointer name;
+#define property_format(name, label, def_val) gpointer name;
+#define property_enum(name, label, enum, enum_name, def_val) enum name;
+#define property_seed(name, label, rand_name) gint name;\
+ GeglRandom *rand_name;
+
#define gegl_property_double(name, label, ...) gdouble name;
#define gegl_property_boolean(name, label, ...) gboolean name;
#define gegl_property_int(name, label, ...) gint name;
#define gegl_property_string(name, label, ...) gchar *name;
#define gegl_property_file_path(name, label, ...) gchar *name;
-#define gegl_property_enum(name, label, enum, enum_name, ...) enum name;
+#define gegl_property_enum(name, label, enum, enum_name, ...) enum name;
#define gegl_property_object(name, label, ...) GObject *name;
#define gegl_property_pointer(name, label, ...) gpointer name;
#define gegl_property_format(name, label, ...) gpointer name;
@@ -317,6 +369,19 @@ struct _GeglProperties
#include GEGL_OP_C_FILE
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_boolean
+#undef property_file_path
+#undef property_object
+#undef property_pointer
+#undef property_format
+#undef property_enum
+#undef property_seed
+#undef property_curve
+#undef property_color
+#undef property_path
#undef gegl_property_double
#undef gegl_property_boolean
#undef gegl_property_int
@@ -338,35 +403,47 @@ enum
{
PROP_0,
-#define gegl_property_double(name, label, ...) PROP_##name,
-#define gegl_property_boolean(name, label, ...) PROP_##name,
-#define gegl_property_int(name, label, ...) PROP_##name,
-#define gegl_property_string(name, label, ...) PROP_##name,
-#define gegl_property_file_path(name, label, ...) PROP_##name,
-#define gegl_property_enum(name, label, enum, enum_name, ...) PROP_##name,
-#define gegl_property_object(name, label, ...) PROP_##name,
-#define gegl_property_pointer(name, label, ...) PROP_##name,
-#define gegl_property_format(name, label, ...) PROP_##name,
-#define gegl_property_color(name, label, ...) PROP_##name,
-#define gegl_property_curve(name, label, ...) PROP_##name,
-#define gegl_property_seed(name, label, rand_name, ...) PROP_##name,
-#define gegl_property_path(name, label, ...) PROP_##name,
+#undef ITEM
+#define ITEM(name,label,def_val, type) PROP_##name,
+#define ITEM2(name,label,def_val, type) ITEM(name,label,def_val,type)
+
+#define property_double(name, label, def_val) ITEM(name,label,def_val,double)
+#define property_int(name, label, def_val) ITEM(name,label,def_val,int)
+#define property_string(name, label, def_val) ITEM(name,label,def_val,string)
+#define property_file_path(name, label, def_val) ITEM(name,label,def_val,string)
+#define property_boolean(name, label, def_val) ITEM(name,label,def_val,boolean)
+#define property_object(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_curve(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_color(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_path(name, label, def_val) ITEM2(name,label,def_val,object)
+#define property_pointer(name, label, def_val) ITEM(name,label,def_val,pointer)
+#define property_format(name, label, def_val) ITEM(name,label,def_val,pointer)
+#define property_enum(name, label, enm, enum_name, def_val) ITEM(name,label,def_val,enum)
+#define property_seed(name, label, rand_name) ITEM(name,label,def_val,int)
+
+#define gegl_property_double(name, label, ...) ITEM(name,label,def_val,double)
+#define gegl_property_string(name, label, ...) ITEM(name,label,def_val,string)
+#define gegl_property_file_path(name, label, ...) ITEM(name,label,def_val,string)
+#define gegl_property_int(name, label, ...) ITEM(name,label,def_val,int)
+#define gegl_property_boolean(name, label, ...) ITEM(name,label,def_val,boolean)
+#define gegl_property_object(name, label, ...) ITEM2(name,label,def_val,object)
+#define gegl_property_pointer(name, label, ...) ITEM(name,label,def_val,pointer)
+#define gegl_property_format(name, label, ...) ITEM(name,label,def_val,pointer)
+#define gegl_property_color(name, label, ...) ITEM(name,label,def_val,object)
+#define gegl_property_curve(name, label, ...) ITEM2(name,label,def_val,object)
+#define gegl_property_path(name, label, ...) ITEM2(name,label,def_val,object)
+#define gegl_property_seed(name, label, rand_name, ...) ITEM(name,label,def_val,int)
+#define gegl_property_enum(name, label, enm, enum_name, ...) ITEM(name,label,def_val,enum)
#include GEGL_OP_C_FILE
-#undef gegl_property_double
-#undef gegl_property_string
-#undef gegl_property_file_path
-#undef gegl_property_boolean
-#undef gegl_property_int
-#undef gegl_property_enum
-#undef gegl_property_object
-#undef gegl_property_pointer
-#undef gegl_property_format
-#undef gegl_property_color
-#undef gegl_property_curve
-#undef gegl_property_seed
-#undef gegl_property_path
+#undef ITEM
+#define ITEM(name,label,def_val, type) \
+ case PROP_##name: \
+ g_value_set_##type (value, properties->name); \
+ break;
+#define ITEM2(name,label,def_val, type) ITEM(name,label,def_val,type)
+
PROP_LAST
};
@@ -382,61 +459,22 @@ get_property (GObject *gobject,
switch (property_id)
{
-#define gegl_property_double(name, label,...) \
- case PROP_##name: \
- g_value_set_double (value, properties->name); \
- break;
-#define gegl_property_boolean(name, label,...) \
- case PROP_##name: \
- g_value_set_boolean (value, properties->name); \
- break;
-#define gegl_property_int(name, label,...) \
- case PROP_##name: \
- g_value_set_int (value, properties->name); \
- break;
-#define gegl_property_string(name, label, ...) \
- case PROP_##name: \
- g_value_set_string (value, properties->name); \
- break;
-#define gegl_property_file_path(name, label, ...) \
- case PROP_##name: \
- g_value_set_string (value, properties->name); \
- break;
-#define gegl_property_enum(name, label, enum, enum_name, ...) \
- case PROP_##name: \
- g_value_set_enum (value, properties->name); \
- break;
-#define gegl_property_object(name, label, ...) \
- case PROP_##name: \
- g_value_set_object (value, properties->name); \
- break;
-#define gegl_property_pointer(name, label, ...) \
- case PROP_##name: \
- g_value_set_pointer (value, properties->name); \
- break;
-#define gegl_property_format(name, label, ...) \
- case PROP_##name: \
- g_value_set_pointer (value, properties->name); \
- break;
-#define gegl_property_color(name, label, ...) \
- case PROP_##name: \
- g_value_set_object (value, properties->name); \
- break;
-#define gegl_property_curve(name, label, ...) \
- case PROP_##name: \
- g_value_set_object (value, properties->name); \
- break;
-#define gegl_property_seed(name, label, rand_name, ...) \
- case PROP_##name: \
- g_value_set_int (value, properties->name); \
- break;
-#define gegl_property_path(name, label, ...) \
- case PROP_##name: \
- g_value_set_object (value, properties->name); \
- break;
#include GEGL_OP_C_FILE
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_boolean
+#undef property_file_path
+#undef property_object
+#undef property_pointer
+#undef property_format
+#undef property_enum
+#undef property_seed
+#undef property_curve
+#undef property_color
+#undef property_path
#undef gegl_property_double
#undef gegl_property_boolean
#undef gegl_property_int
@@ -469,61 +507,130 @@ set_property (GObject *gobject,
switch (property_id)
{
-#define gegl_property_double(name, label, ...) \
+#define property_double(name, label, def_val) \
+ case PROP_##name: \
+ properties->name = g_value_get_double (value); \
+ break;
+#define property_int(name, label, def_val) \
+ case PROP_##name: \
+ properties->name = g_value_get_double (value); \
+ break;
+#define property_string(name, label, def_val) \
+ case PROP_##name: \
+ if (properties->name) \
+ g_free (properties->name); \
+ properties->name = g_value_dup_string (value); \
+ break;
+#define property_boolean(name, label, def_val) \
+ case PROP_##name: \
+ properties->name = g_value_get_boolean (value); \
+ break;
+#define property_file_path (name, label, def_val) \
+ case PROP_##name: \
+ if (properties->name) \
+ g_free (properties->name); \
+ properties->name = g_value_dup_string (value); \
+ break;
+#define property_object(name, label, def_val) \
+ case PROP_##name: \
+ if (properties->name != NULL) \
+ g_object_unref (properties->name); \
+ properties->name = g_value_dup_object (value); \
+ break;
+#define property_curve(name, label, def_val) \
+ case PROP_##name: \
+ if (properties->name != NULL) \
+ g_object_unref (properties->name); \
+ properties->name = g_value_dup_object (value); \
+ break;
+#define property_color(name, label, def_val) \
+ case PROP_##name: \
+ if (properties->name != NULL) \
+ g_object_unref (properties->name); \
+ properties->name = g_value_dup_object (value); \
+ break;
+#define property_path(name, label, def_val) \
+ case PROP_##name: \
+ if (properties->name != NULL) \
+ g_object_unref (properties->name); \
+ properties->name = g_value_dup_object (value); \
+ break;
+#define property_pointer(name, label, def_val) \
+ case PROP_##name: \
+ properties->name = g_value_get_pointer (value); \
+ break;
+#define property_format(name, label, def_val) \
+ case PROP_##name: \
+ properties->name = g_value_get_pointer (value); \
+ break;
+#define property_enum(name, label, enum, enum_name, def_val) \
+ case PROP_##name: \
+ properties->name = g_value_get_enum (value); \
+ break;
+#define property_seed(name, label, rand_name) \
+ case PROP_##name: \
+ properties->name = g_value_get_int (value); \
+ if (!properties->rand_name) \
+ properties->rand_name = gegl_random_new_with_seed (properties->name);\
+ else \
+ gegl_random_set_seed (properties->rand_name, properties->name);\
+ break;
+
+#define gegl_property_double(name, label, ...) \
case PROP_##name: \
properties->name = g_value_get_double (value); \
break;
-#define gegl_property_boolean(name, label, ...) \
+#define gegl_property_boolean(name, label, ...) \
case PROP_##name: \
properties->name = g_value_get_boolean (value); \
break;
-#define gegl_property_int(name, label, ...) \
+#define gegl_property_int(name, label, ...) \
case PROP_##name: \
properties->name = g_value_get_int (value); \
break;
-#define gegl_property_string(name, label, ...) \
+#define gegl_property_string(name, label, ...) \
case PROP_##name: \
if (properties->name) \
g_free (properties->name); \
properties->name = g_value_dup_string (value); \
break;
-#define gegl_property_file_path(name, label, ...) \
+#define gegl_property_file_path(name, label, ...) \
case PROP_##name: \
if (properties->name) \
g_free (properties->name); \
properties->name = g_value_dup_string (value); \
break;
-#define gegl_property_enum(name, label, enum, enum_name, ...) \
+#define gegl_property_enum(name, label, enum, enum_name, ...) \
case PROP_##name: \
properties->name = g_value_get_enum (value); \
break;
-#define gegl_property_object(name, label, ...) \
+#define gegl_property_object(name, label, ...) \
case PROP_##name: \
if (properties->name != NULL) \
g_object_unref (properties->name); \
properties->name = g_value_dup_object (value); \
break;
-#define gegl_property_pointer(name, label, ...) \
+#define gegl_property_pointer(name, label, ...) \
case PROP_##name: \
properties->name = g_value_get_pointer (value); \
break;
-#define gegl_property_format(name, label, ...) \
+#define gegl_property_format(name, label, ...) \
case PROP_##name: \
properties->name = g_value_get_pointer (value); \
break;
-#define gegl_property_color(name, label, ...) \
+#define gegl_property_color(name, label, ...) \
case PROP_##name: \
if (properties->name != NULL) \
g_object_unref (properties->name); \
properties->name = g_value_dup_object (value); \
break;
-#define gegl_property_curve(name, label, ...) \
+#define gegl_property_curve(name, label, ...) \
case PROP_##name: \
if (properties->name != NULL) \
g_object_unref (properties->name); \
properties->name = g_value_dup_object (value); \
break;
-#define gegl_property_seed(name, label, rand_name, ...) \
+#define gegl_property_seed(name, label, rand_name, ...) \
case PROP_##name: \
properties->name = g_value_get_int (value); \
if (!properties->rand_name) \
@@ -552,6 +659,19 @@ set_property (GObject *gobject,
#include GEGL_OP_C_FILE
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_boolean
+#undef property_file_path
+#undef property_object
+#undef property_pointer
+#undef property_curve
+#undef property_color
+#undef property_path
+#undef property_format
+#undef property_enum
+#undef property_seed
#undef gegl_property_double
#undef gegl_property_boolean
#undef gegl_property_int
@@ -578,6 +698,49 @@ static void gegl_op_destroy_notify (gpointer data)
{
GeglProperties *properties = GEGL_PROPERTIES (data);
+#define property_double(name, label, def_val)
+#define property_int(name, label, def_val)
+#define property_string(name, label, ...) \
+ if (properties->name) \
+ { \
+ g_free (properties->name); \
+ properties->name = NULL; \
+ }
+#define property_boolean(name, label, def_val)
+#define property_file_path(name, label, def_val) \
+ if (properties->name) \
+ { \
+ g_free (properties->name); \
+ properties->name = NULL; \
+ }
+#define property_object(name, label, def_val) \
+ if (properties->name) \
+ { \
+ g_object_unref (properties->name); \
+ properties->name = NULL; \
+ }
+#define property_curve(name, label, def_val) \
+ if (properties->name) \
+ { \
+ g_object_unref (properties->name); \
+ properties->name = NULL; \
+ }
+#define property_color(name, label, def_val) \
+ if (properties->name) \
+ { \
+ g_object_unref (properties->name); \
+ properties->name = NULL; \
+ }
+#define property_path(name, label, def_val) \
+ if (properties->name) \
+ { \
+ g_object_unref (properties->name); \
+ properties->name = NULL; \
+ }
+#define property_pointer(name, label, ...)
+#define property_format(name, label, ...)
+#define property_enum(name, label, ...)
+#define property_seed(name, label, ...)
#define gegl_property_double(name, label, ...)
#define gegl_property_boolean(name, label, ...)
#define gegl_property_int(name, label, ...)
@@ -614,7 +777,7 @@ static void gegl_op_destroy_notify (gpointer data)
g_object_unref (properties->name); \
properties->name = NULL; \
}
-#define gegl_property_seed(name, label, rand_name, ...) \
+#define gegl_property_seed(name, label, rand_name, ...) \
if (properties->rand_name) \
{ \
gegl_random_free (properties->rand_name); \
@@ -629,6 +792,19 @@ static void gegl_op_destroy_notify (gpointer data)
#include GEGL_OP_C_FILE
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_boolean
+#undef property_file_path
+#undef property_object
+#undef property_pointer
+#undef property_format
+#undef property_enum
+#undef property_seed
+#undef property_curve
+#undef property_color
+#undef property_path
#undef gegl_property_double
#undef gegl_property_boolean
#undef gegl_property_int
@@ -660,6 +836,23 @@ gegl_op_constructor (GType type,
/* create dummy colors and vectors */
properties = GEGL_PROPERTIES (obj);
+#define property_double(name, label, def_val)
+#define property_int(name, label, def_val)
+#define property_string(name, label, def_val)
+#define property_boolean(name, label, def_val)
+#define property_file_path(name, label, def_val)
+#define property_object(name, label, def_val)
+#define property_pointer(name, label, def_val)
+#define property_format(name, label, def_val)
+#define property_curve(name, label, def_val)
+#define property_color(name, label, def_val)\
+ if (properties->name == NULL) \
+ {properties->name = gegl_color_new(def_val?def_val:"black");}
+#define property_path(name, label, def_val)
+#define property_enum(name, ...)
+#define property_seed(name, label, rand_name) \
+ if (properties->rand_name == NULL) \
+ {properties->rand_name = gegl_random_new_with_seed (0);}
#define gegl_property_double(name, label, ...)
#define gegl_property_boolean(name, label, ...)
#define gegl_property_int(name, label, ...)
@@ -680,6 +873,19 @@ gegl_op_constructor (GType type,
#include GEGL_OP_C_FILE
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_boolean
+#undef property_file_path
+#undef property_object
+#undef property_pointer
+#undef property_format
+#undef property_enum
+#undef property_seed
+#undef property_curve
+#undef property_color
+#undef property_path
#undef gegl_property_double
#undef gegl_property_boolean
#undef gegl_property_int
@@ -703,11 +909,124 @@ static void
gegl_op_class_intern_init (gpointer klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ int current_prop = -1;
+ GParamFlags flags G_GNUC_UNUSED = G_PARAM_READWRITE | G_PARAM_CONSTRUCT | GEGL_PARAM_PAD_INPUT;
object_class->set_property = set_property;
object_class->get_property = get_property;
object_class->constructor = gegl_op_constructor;
+ {
+ GParamSpec *pspec = NULL;
+
+#undef description
+#undef value_range
+#undef ui_range
+#undef ui_gamma
+#undef ui_meta
+
+#define REGISTER_IF_ANY \
+ if (pspec && current_prop >=0) {\
+ g_object_class_install_property (object_class, current_prop, pspec);\
+ pspec = NULL; current_prop = -1;\
+ }
+
+#define description(blurb) \
+ pspec->_blurb = g_strdup (blurb);
+#define value_range(min,max) \
+ vpspec->minimum = min; vpspec->maximum = max; \
+ upspec->ui_minimum = min; upspec->ui_maximum = max;
+#define ui_range(min,max) \
+ upspec->ui_minimum = min; upspec->ui_maximum = max;
+#define ui_gamma(gamma) \
+ upspec->ui_gamma = gamma;
+#define ui_meta(key,val) \
+ gegl_param_spec_set_property_key(pspec, key, val);
+
+#define property_double(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_double (#name, label, NULL,-G_MAXDOUBLE,G_MAXDOUBLE,0,-100,100,1.0,flags);\
+ GeglParamSpecDouble *upspec G_GNUC_UNUSED = GEGL_PARAM_SPEC_DOUBLE (pspec);\
+ GParamSpecDouble *vpspec G_GNUC_UNUSED = G_PARAM_SPEC_DOUBLE (pspec);\
+ current_prop = PROP_##name ;
+
+#define property_int(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_int (#name, label, NULL,G_MININT,G_MAXINT,0,-100,100,1.0,flags);\
+ GeglParamSpecInt *upspec G_GNUC_UNUSED = GEGL_PARAM_SPEC_INT (pspec);\
+ GParamSpecInt *vpspec G_GNUC_UNUSED = G_PARAM_SPEC_INT (pspec);\
+ current_prop = PROP_##name ;
+
+#define property_string(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ g_param_spec_string (#name, label, def_val, flags);\
+ current_prop = PROP_##name ;
+
+#define property_boolean(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ g_param_spec_boolean (#name, label, NULL, def_val, flags);\
+ current_prop = PROP_##name ;
+
+#define property_file_path(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_file_path (#name, label, NULL, FALSE, FALSE, def_val, flags);\
+ current_prop = PROP_##name ;
+
+#define property_object(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ g_param_spec_object (#name, label, NULL, flags);\
+ current_prop = PROP_##name ;
+
+#define property_curve(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_curve (#name, label, NULL, flags);\
+ current_prop = PROP_##name ;
+
+#define property_color(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_color_from_string (#name, label, NULL, def_val, flags);\
+ current_prop = PROP_##name ;
+
+#define property_path(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_path (#name, label, NULL, flags);\
+ current_prop = PROP_##name ;
+
+#define property_pointer(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ g_param_spec_pointer (#name, label, NULL, flags);\
+ current_prop = PROP_##name ;
+
+#define property_format(name, label, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = \
+ gegl_param_spec_format (#name, label, NULL, flags);\
+ current_prop = PROP_##name ;
+
+#define property_enum(name, label, enum, enum_name, def_val) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = gegl_param_spec_enum (#name, label, NULL, enum_name ##_get_type(), def_val, flags);
\
+ current_prop = PROP_##name ;
+
+#define property_seed(name, label, rand_name) \
+ REGISTER_IF_ANY \
+ }{ GParamSpec *pspec = gegl_param_spec_seed (#name, label, NULL, flags); \
+ current_prop = PROP_##name ;
+
+#define gegl_property_string(name, label, foo...) \
+ { GParamSpec *pspec = gegl_param_spec_string_from_vararg (#name, label, foo);\
+ g_object_class_install_property (object_class, PROP_##name, pspec);};
+
#define gegl_property_double(name, label, foo...) \
{ GParamSpec *pspec = gegl_param_spec_double_from_vararg (#name, label, foo);\
g_object_class_install_property (object_class, PROP_##name, pspec);};
@@ -752,6 +1071,27 @@ gegl_op_class_intern_init (gpointer klass)
#include GEGL_OP_C_FILE
+ REGISTER_IF_ANY
+ }
+
+#undef REGISTER_IF_ANY
+#undef description
+#undef value_range
+#undef ui_range
+#undef ui_gamma
+#undef ui_meta
+#undef property_double
+#undef property_int
+#undef property_string
+#undef property_enum
+#undef property_seed
+#undef property_pointer
+#undef property_path
+#undef property_curve
+#undef property_color
+#undef property_object
+#undef property_format
+
#undef gegl_property_double
#undef gegl_property_boolean
#undef gegl_property_int
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]