[gegl] add passthrough api



commit 9a09dcfc927025d60bff855642c22d681197af0e
Author: Øyvind Kolås <pippin gimp org>
Date:   Mon Jul 14 00:17:17 2014 +0200

    add passthrough api
    
    This API permits making a given node a no-op; works for most cases - but might
    need additional work for meta-ops.

 gegl/graph/gegl-node-private.h |    2 ++
 gegl/graph/gegl-node.c         |   37 ++++++++++++++++++++++++++++++++++++-
 gegl/graph/gegl-node.h         |    6 ++++++
 3 files changed, 44 insertions(+), 1 deletions(-)
---
diff --git a/gegl/graph/gegl-node-private.h b/gegl/graph/gegl-node-private.h
index 222d141..f458176 100644
--- a/gegl/graph/gegl-node-private.h
+++ b/gegl/graph/gegl-node-private.h
@@ -79,6 +79,8 @@ struct _GeglNode
 
   GMutex          mutex;
 
+  gint            passthrough;
+
   /*< private >*/
   GeglNodePrivate *priv;
 };
diff --git a/gegl/graph/gegl-node.c b/gegl/graph/gegl-node.c
index 8fc8edc..4ab2103 100644
--- a/gegl/graph/gegl-node.c
+++ b/gegl/graph/gegl-node.c
@@ -50,7 +50,8 @@ enum
   PROP_OPERATION,
   PROP_NAME,
   PROP_DONT_CACHE,
-  PROP_USE_OPENCL
+  PROP_USE_OPENCL,
+  PROP_PASSTHROUGH
 };
 
 enum
@@ -172,6 +173,14 @@ gegl_node_class_init (GeglNodeClass *klass)
                                                         G_PARAM_CONSTRUCT |
                                                         G_PARAM_READWRITE));
 
+  g_object_class_install_property (gobject_class, PROP_PASSTHROUGH,
+                                   g_param_spec_boolean ("passthrough",
+                                                         "Passthrough",
+                                                        "Act as a nop, passing input unmodifed through to 
ouput.",
+                                                        FALSE,
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_READWRITE));
+
   gegl_node_signals[INVALIDATED] =
     g_signal_new ("invalidated",
                   G_TYPE_FROM_CLASS (klass),
@@ -305,6 +314,10 @@ gegl_node_local_set_property (GObject      *gobject,
         node->dont_cache = g_value_get_boolean (value);
         break;
 
+      case PROP_PASSTHROUGH:
+        node->passthrough = g_value_get_boolean (value);
+        break;
+
       case PROP_USE_OPENCL:
         node->use_opencl = g_value_get_boolean (value);
         break;
@@ -351,6 +364,10 @@ gegl_node_local_get_property (GObject    *gobject,
         g_value_set_boolean (value, node->dont_cache);
         break;
 
+      case PROP_PASSTHROUGH:
+        g_value_set_boolean (value, node->passthrough);
+        break;
+
       case PROP_USE_OPENCL:
         g_value_set_boolean (value, node->use_opencl);
         break;
@@ -2128,3 +2145,21 @@ gegl_node_new (void)
 {
   return g_object_new (GEGL_TYPE_NODE, NULL);
 }
+
+gboolean
+gegl_node_get_passthrough (GeglNode *node)
+{
+  g_return_val_if_fail (GEGL_IS_NODE (node), FALSE);
+
+  return node->passthrough;
+}
+
+void
+gegl_node_set_passthrough (GeglNode *node,
+                           gboolean  passthrough)
+{
+  g_return_if_fail (GEGL_IS_NODE (node));
+
+  gegl_node_invalidated (node, NULL, TRUE);
+  node->passthrough = passthrough;
+}
diff --git a/gegl/graph/gegl-node.h b/gegl/graph/gegl-node.h
index 5af5afe..df76656 100644
--- a/gegl/graph/gegl-node.h
+++ b/gegl/graph/gegl-node.h
@@ -667,6 +667,12 @@ GeglNode    * gegl_node_new_from_file    (const gchar   *path);
 gchar       * gegl_node_to_xml           (GeglNode      *node,
                                           const gchar   *path_root);
 
+gboolean       gegl_node_get_passthrough (GeglNode      *node);
+
+void           gegl_node_set_passthrough (GeglNode      *node,
+                                          gboolean       passthrough);
+
+
 G_END_DECLS
 
 #endif /* __GEGL_NODE_H__ */


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