[gegl/pippin/property-keys: 2/11] gegl-op.h: a new way of chanting ops



commit 2e79bf2c8fe2b734008b81345b35ea2c3cd4188b
Author: Øyvind Kolås <pippin gimp org>
Date:   Thu May 15 00:45:45 2014 +0200

    gegl-op.h: a new way of chanting ops
    
    The existing way of specifying additional ui contextual information for
    displaying interactions for operation properties
    
    gegl_chant_double_ui (var, "var", 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, "description")
    
    makes the inherited hard to remember order of parameters even harder to
    remember than the still hard to remember order of arguments in
    g_param_spec_double. This infrastructure uses var_args and named parameters;
    making the declaration concise and self-documenting - at the cost of some
    programming mistakes only surfacing at runtime.
    
    The chant prefix has also been trimmed away; replacing it with more
    descriptive vocabulary.
    
    The changes also makes it easier to subclass aribitrary gobject derived classes.

 gegl/Makefile.am                      |    2 +
 gegl/property-types/gegl-paramspecs.c |  599 +++++++++++++++++++++++++++++++++
 gegl/property-types/gegl-paramspecs.h |   28 ++
 3 files changed, 629 insertions(+), 0 deletions(-)
---
diff --git a/gegl/Makefile.am b/gegl/Makefile.am
index 58bbd9e..19ca064 100644
--- a/gegl/Makefile.am
+++ b/gegl/Makefile.am
@@ -74,6 +74,7 @@ GEGL_public_HEADERS = \
        gegl-c.h                        \
        gegl-chant.h                    \
        gegl-cpuaccel.h                 \
+       gegl-op.h                       \
        gegl-plugin.h                   \
        buffer/gegl-tile.h \
        buffer/gegl-buffer-cl-iterator.h
@@ -110,6 +111,7 @@ GEGL_sources = \
        gegl-lookup.h                   \
        gegl-matrix.h                   \
        gegl-module.h                   \
+       gegl-op.h                           \
        gegl-plugin.h                   \
        gegl-random-private.h           \
        gegl-types-internal.h           \
diff --git a/gegl/property-types/gegl-paramspecs.c b/gegl/property-types/gegl-paramspecs.c
index 2438306..231b1da 100644
--- a/gegl/property-types/gegl-paramspecs.c
+++ b/gegl/property-types/gegl-paramspecs.c
@@ -25,6 +25,11 @@
 #include <glib.h>
 #include <glib-object.h>
 #include "gegl-paramspecs.h"
+#include "gegl-types.h"
+#include <babl/babl.h>
+#include "gegl-color.h"
+#include "gegl-curve.h"
+#include "gegl-path.h"
 
 static void       gegl_param_double_class_init (GParamSpecClass *klass);
 static void       gegl_param_double_init       (GParamSpec      *pspec);
@@ -740,3 +745,597 @@ gegl_param_spec_format (const gchar *name,
 
   return G_PARAM_SPEC (pspec);
 }
+
+GParamSpec *
+gegl_param_spec_double_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  gdouble min_value     = DBL_MIN,
+          max_value     = DBL_MAX,
+          default_value = 0.0,
+          ui_min = -100,
+          ui_max = 100,
+          ui_gamma = 1.0;
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if      (g_str_equal (key, "min"))
+      min_value = va_arg (var_args, double);
+    else if (g_str_equal (key, "max"))
+      max_value = va_arg (var_args, double);
+    else if (g_str_equal (key, "ui-min"))
+      ui_min = va_arg (var_args, double);
+    else if (g_str_equal (key, "ui-gamma"))
+      ui_gamma = va_arg (var_args, double);
+    else if (g_str_equal (key, "ui-max"))
+      ui_max = va_arg (var_args, double);
+    else if (g_str_equal (key, "default"))
+      default_value = va_arg (var_args, double);
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+
+  if (ui_min < min_value)
+    ui_min = min_value;
+  if (ui_max > max_value)
+    ui_max = max_value;
+
+  pspec = gegl_param_spec_double (name, nick, blurb,
+                               min_value, max_value, default_value,
+                               ui_min, ui_max, ui_gamma, \
+                               (GParamFlags) (         \
+                               G_PARAM_READWRITE |     \
+                               G_PARAM_CONSTRUCT |     \
+                               GEGL_PARAM_PAD_INPUT));
+
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+
+GParamSpec *
+gegl_param_spec_int_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  gint min_value     = G_MININT,
+       max_value     = G_MAXINT,
+       default_value = 0,
+       ui_min = -100,
+       ui_max = 100,
+       ui_gamma = 1.0;
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if      (g_str_equal (key, "min"))
+      min_value = va_arg (var_args, gint);
+    else if (g_str_equal (key, "max"))
+      max_value = va_arg (var_args, gint);
+    else if (g_str_equal (key, "ui-min"))
+      ui_min = va_arg (var_args, gint);
+    else if (g_str_equal (key, "ui-gamma"))
+      ui_gamma = va_arg (var_args, double);
+    else if (g_str_equal (key, "ui-max"))
+      ui_max = va_arg (var_args, gint);
+    else if (g_str_equal (key, "default"))
+      default_value = va_arg (var_args, gint);
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+
+  if (ui_min < min_value)
+    ui_min = min_value;
+  if (ui_max > max_value)
+    ui_max = max_value;
+
+  pspec = gegl_param_spec_int (name, nick, blurb,
+                               min_value, max_value, default_value,
+                               ui_min, ui_max, ui_gamma, \
+                               (GParamFlags) (         \
+                               G_PARAM_READWRITE |     \
+                               G_PARAM_CONSTRUCT |     \
+                               GEGL_PARAM_PAD_INPUT));
+
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+
+GParamSpec *
+gegl_param_spec_boolean_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  gboolean default_value = FALSE;
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "default"))
+      default_value = va_arg (var_args, gboolean);
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = g_param_spec_boolean (name, nick, blurb,
+                            default_value,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_string_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  const gchar *default_value = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "default"))
+      default_value = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = g_param_spec_string (name, nick, blurb,
+                            default_value,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_file_path_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  const gchar *default_value = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "default"))
+      default_value = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = gegl_param_spec_file_path (name, nick, blurb,
+                            FALSE, FALSE, /* XXX: take from varargs? */
+                            default_value,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_enum_from_vararg (const char *name, GType enum_type, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  int default_value = 0;
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, enum_type);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "default"))
+      default_value = va_arg (var_args, int);
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+
+  pspec = g_param_spec_enum (name, nick, blurb,
+                             enum_type,
+                             default_value,
+                             (GParamFlags) (
+                             G_PARAM_READWRITE |
+                             G_PARAM_CONSTRUCT |
+                             GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_pointer_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = g_param_spec_pointer (name, nick, blurb,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_object_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = g_param_spec_object (name, nick, blurb,
+                            G_TYPE_OBJECT,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_curve_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+  GeglCurve  *curve;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  curve = gegl_curve_new_default ();
+  pspec = gegl_param_spec_curve (name, nick, blurb,
+                             curve,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_object_unref (curve);
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_path_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = gegl_param_spec_path (name, nick, blurb, NULL,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_format_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = gegl_param_spec_format (name, nick, blurb,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_color_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+  const gchar *default_value = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "default"))
+    {
+      default_value = va_arg (var_args, const gchar *);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (default_value));
+    }
+    else if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = gegl_param_spec_color_from_string (name, nick, blurb,
+                            default_value,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
+
+GParamSpec *
+gegl_param_spec_seed_from_vararg (const char *name, ...)
+{
+  const gchar *nick  = name,
+              *blurb = "";
+
+  GParamSpec *pspec;
+  GHashTable *ht;
+
+  va_list var_args;
+  const gchar *key;
+
+  ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+  va_start (var_args, name);
+  key = va_arg (var_args, const char*);
+  while (key)
+  {
+    if (g_str_equal (key, "blurb"))
+      blurb = va_arg (var_args, const gchar *);
+    else if (g_str_equal (key, "nick"))
+      nick = va_arg (var_args, const gchar *);
+    else
+    {
+      const char *value = va_arg (var_args, const gchar*);
+      g_hash_table_insert (ht, g_strdup (key), g_strdup (value));
+    }
+    key = va_arg (var_args, const char*);
+  }
+  va_end (var_args);
+  pspec = gegl_param_spec_seed (name, nick, blurb,
+                            (GParamFlags) (
+                            G_PARAM_READWRITE |
+                            G_PARAM_CONSTRUCT |
+                            GEGL_PARAM_PAD_INPUT));
+  g_param_spec_set_qdata_full (pspec, g_quark_from_static_string ("gegl-property-keys"),
+                               ht, (GDestroyNotify)g_hash_table_unref);
+  return pspec;
+}
diff --git a/gegl/property-types/gegl-paramspecs.h b/gegl/property-types/gegl-paramspecs.h
index 6142e46..9e9108e 100644
--- a/gegl/property-types/gegl-paramspecs.h
+++ b/gegl/property-types/gegl-paramspecs.h
@@ -374,5 +374,33 @@ GParamSpec * gegl_param_spec_format (const gchar *name,
                                      const gchar *blurb,
                                      GParamFlags  flags);
 
+GParamSpec * gegl_param_spec_double_from_vararg (const char *name, ...) 
+                                                 G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_int_from_vararg (const char *name, ...)
+                                              G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_string_from_vararg (const char *name, ...)
+                                                 G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_boolean_from_vararg (const char *name, ...)
+                                                  G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_pointer_from_vararg (const char *name, ...)
+                                                  G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_enum_from_vararg (const char *name, GType enum_type, ...)
+                                               G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_color_from_vararg (const char *name, ...)
+                                                G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_seed_from_vararg (const char *name, ...)
+                                               G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_object_from_vararg (const char *name, ...)
+                                                 G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_format_from_vararg (const char *name, ...)
+                                                 G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_curve_from_vararg (const char *name, ...)
+                                                G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_path_from_vararg (const char *name, ...)
+                                               G_GNUC_NULL_TERMINATED;
+GParamSpec * gegl_param_spec_file_path_from_vararg (const char *name, ...)
+                                                    G_GNUC_NULL_TERMINATED;
+
+
 G_END_DECLS
 #endif  /*  __GEGL_PARAM_SPECS_H__  */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]