[gimp] app: use GimpApplicator in gimp_image_merge_layers()



commit e2bcad3cfdc3ffe1717f56037def739bc8b6280e
Author: Michael Natterer <mitch gimp org>
Date:   Wed Apr 17 16:17:39 2013 +0200

    app: use GimpApplicator in gimp_image_merge_layers()

 app/core/gimpimage-merge.c | 52 ++++++++++++++++++++++++++--------------------
 1 file changed, 29 insertions(+), 23 deletions(-)
---
diff --git a/app/core/gimpimage-merge.c b/app/core/gimpimage-merge.c
index 2d6bf0d..1460b29 100644
--- a/app/core/gimpimage-merge.c
+++ b/app/core/gimpimage-merge.c
@@ -27,9 +27,9 @@
 
 #include "core-types.h"
 
+#include "gegl/gimpapplicator.h"
 #include "gegl/gimp-babl-compat.h"
 #include "gegl/gimp-gegl-apply-operation.h"
-#include "gegl/gimp-gegl-nodes.h"
 #include "gegl/gimp-gegl-utils.h"
 
 #include "vectors/gimpvectors.h"
@@ -582,8 +582,7 @@ gimp_image_merge_layers (GimpImage     *image,
     {
       GeglBuffer           *merge_buffer;
       GeglBuffer           *layer_buffer;
-      GeglBuffer           *mask_buffer = NULL;
-      GeglNode             *apply;
+      GimpApplicator       *applicator;
       GimpLayerModeEffects  mode;
 
       layer = layers->data;
@@ -601,32 +600,39 @@ gimp_image_merge_layers (GimpImage     *image,
       merge_buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (merge_layer));
       layer_buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layer));
 
+      applicator = gimp_applicator_new (NULL);
+
       if (gimp_layer_get_mask (layer) &&
           gimp_layer_get_apply_mask (layer))
         {
+          GeglBuffer *mask_buffer;
+
           mask_buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layer->mask));
+
+          gimp_applicator_set_mask_buffer (applicator, mask_buffer);
+          gimp_applicator_set_mask_offset (applicator,
+                                           - (x1 - off_x),
+                                           - (y1 - off_y));
         }
 
-      apply =
-        gimp_gegl_create_apply_buffer_node (layer_buffer,
-                                            - (x1 - off_x),
-                                            - (y1 - off_y),
-                                            0,
-                                            0,
-                                            0,
-                                            0,
-                                            mask_buffer,
-                                            - (x1 - off_x),
-                                            - (y1 - off_y),
-                                            gimp_layer_get_opacity (layer),
-                                            mode,
-                                            GIMP_COMPONENT_ALL);
-
-      gimp_gegl_apply_operation (merge_buffer, NULL, NULL,
-                                 apply,
-                                 merge_buffer, NULL);
-
-      g_object_unref (apply);
+      gimp_applicator_set_src_buffer (applicator, merge_buffer);
+      gimp_applicator_set_dest_buffer (applicator, merge_buffer);
+
+      gimp_applicator_set_apply_buffer (applicator, layer_buffer);
+      gimp_applicator_set_apply_offset (applicator,
+                                        - (x1 - off_x),
+                                        - (y1 - off_y));
+
+      gimp_applicator_set_mode (applicator,
+                                gimp_layer_get_opacity (layer),
+                                mode);
+
+      gimp_applicator_blit (applicator,
+                            GEGL_RECTANGLE (0, 0,
+                                            gegl_buffer_get_width  (merge_buffer),
+                                            gegl_buffer_get_height (merge_buffer)));
+
+      g_object_unref (applicator);
 
       gimp_image_remove_layer (image, layer, TRUE, NULL);
     }


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