[gimp/gimp-2-10] app: add gimp_applicator_set_active()



commit 3d727809da7dc0b35424c194f103d490131d5ab7
Author: Ell <ell_se yahoo com>
Date:   Thu Apr 2 18:46:41 2020 +0300

    app: add gimp_applicator_set_active()
    
    ... which allows temporarily turning the applicator into a NOP,
    without destroying cached data.
    
    This commit also improves gimp_applicator_set_{src,dest}_buffer().
    
    (cherry picked from commit e324e2d4b32735a387944a7f8a7c10243313cd71)

 app/gegl/gimpapplicator.c | 46 ++++++++++++++++++++++++++++------------------
 app/gegl/gimpapplicator.h |  5 +++++
 2 files changed, 33 insertions(+), 18 deletions(-)
---
diff --git a/app/gegl/gimpapplicator.c b/app/gegl/gimpapplicator.c
index 5cfeb0ec79..ac8c2db17d 100644
--- a/app/gegl/gimpapplicator.c
+++ b/app/gegl/gimpapplicator.c
@@ -57,6 +57,7 @@ gimp_applicator_class_init (GimpApplicatorClass *klass)
 static void
 gimp_applicator_init (GimpApplicator *applicator)
 {
+  applicator->active          = TRUE;
   applicator->opacity         = 1.0;
   applicator->paint_mode      = GIMP_LAYER_MODE_NORMAL;
   applicator->blend_space     = GIMP_LAYER_COLOR_SPACE_AUTO;
@@ -202,6 +203,23 @@ gimp_applicator_new (GeglNode *parent)
   return applicator;
 }
 
+void
+gimp_applicator_set_active (GimpApplicator *applicator,
+                            gboolean        active)
+{
+  g_return_if_fail (GIMP_IS_APPLICATOR (applicator));
+
+  if (active != applicator->active)
+    {
+      applicator->active = active;
+
+      if (active)
+        gegl_node_link (applicator->crop_node, applicator->output_node);
+      else
+        gegl_node_link (applicator->input_node, applicator->output_node);
+    }
+}
+
 void
 gimp_applicator_set_src_buffer (GimpApplicator *applicator,
                                 GeglBuffer     *src_buffer)
@@ -230,19 +248,15 @@ gimp_applicator_set_src_buffer (GimpApplicator *applicator,
         }
 
       if (! applicator->src_buffer)
-        {
-          gegl_node_connect_to (applicator->src_node,    "output",
-                                applicator->mode_node,   "input");
-          gegl_node_connect_to (applicator->src_node,    "output",
-                                applicator->affect_node, "input");
-        }
+        gegl_node_link (applicator->src_node, applicator->input_node);
     }
   else if (applicator->src_buffer)
     {
-      gegl_node_connect_to (applicator->input_node,  "output",
-                            applicator->mode_node,   "input");
-      gegl_node_connect_to (applicator->input_node,  "output",
-                            applicator->affect_node, "input");
+      gegl_node_disconnect (applicator->input_node, "input");
+
+      gegl_node_set (applicator->src_node,
+                     "buffer", NULL,
+                     NULL);
     }
 
   applicator->src_buffer = src_buffer;
@@ -276,19 +290,15 @@ gimp_applicator_set_dest_buffer (GimpApplicator *applicator,
         }
 
       if (! applicator->dest_buffer)
-        {
-          gegl_node_disconnect (applicator->output_node, "input");
-
-          gegl_node_connect_to (applicator->affect_node, "output",
-                                applicator->dest_node,   "input");
-        }
+        gegl_node_link (applicator->affect_node, applicator->dest_node);
     }
   else if (applicator->dest_buffer)
     {
       gegl_node_disconnect (applicator->dest_node, "input");
 
-      gegl_node_connect_to (applicator->affect_node, "output",
-                            applicator->output_node, "input");
+      gegl_node_set (applicator->dest_node,
+                     "buffer", NULL,
+                     NULL);
     }
 
   applicator->dest_buffer = dest_buffer;
diff --git a/app/gegl/gimpapplicator.h b/app/gegl/gimpapplicator.h
index a981999c13..e2919c2946 100644
--- a/app/gegl/gimpapplicator.h
+++ b/app/gegl/gimpapplicator.h
@@ -41,6 +41,8 @@ struct _GimpApplicator
   GeglNode               *aux_node;
   GeglNode               *output_node;
 
+  gboolean                active;
+
   GeglBuffer             *apply_buffer;
   GeglNode               *apply_src_node;
 
@@ -92,6 +94,9 @@ GType        gimp_applicator_get_type          (void) G_GNUC_CONST;
 
 GimpApplicator * gimp_applicator_new           (GeglNode             *parent);
 
+void         gimp_applicator_set_active        (GimpApplicator       *applicator,
+                                                gboolean              active);
+
 void         gimp_applicator_set_src_buffer    (GimpApplicator       *applicator,
                                                 GeglBuffer           *dest_buffer);
 void         gimp_applicator_set_dest_buffer   (GimpApplicator       *applicator,


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