[gimp] app: make GimpApplicator's preview feature optional



commit a0b18c7929dadba5068a823b5c61b6a8fd1bb78b
Author: Michael Natterer <mitch gimp org>
Date:   Tue Feb 16 00:32:27 2016 +0100

    app: make GimpApplicator's preview feature optional
    
    Don't add the preview nodes if use_preview_cache is FALSE in
    gimp_applicator_new().

 app/core/gimpdrawable-combine.c |    2 +-
 app/core/gimpdrawable.c         |    3 +-
 app/core/gimpimage-merge.c      |    2 +-
 app/core/gimpimagemap.c         |    2 +-
 app/gegl/gimpapplicator.c       |   47 +++++++++++++++++++++++++-------------
 app/gegl/gimpapplicator.h       |    3 +-
 app/paint/gimppaintcore.c       |    3 +-
 7 files changed, 40 insertions(+), 22 deletions(-)
---
diff --git a/app/core/gimpdrawable-combine.c b/app/core/gimpdrawable-combine.c
index 281ac29..d89bf50 100644
--- a/app/core/gimpdrawable-combine.c
+++ b/app/core/gimpdrawable-combine.c
@@ -120,7 +120,7 @@ gimp_drawable_real_apply_buffer (GimpDrawable         *drawable,
     }
 
   applicator = gimp_applicator_new (NULL, gimp_drawable_get_linear (drawable),
-                                    FALSE);
+                                    FALSE, FALSE);
 
   if (mask)
     {
diff --git a/app/core/gimpdrawable.c b/app/core/gimpdrawable.c
index 384c77e..e88591c 100644
--- a/app/core/gimpdrawable.c
+++ b/app/core/gimpdrawable.c
@@ -947,7 +947,8 @@ gimp_drawable_sync_fs_filter (GimpDrawable *drawable,
 
           gegl_node_add_child (node, fs_source);
 
-          private->fs_applicator = gimp_applicator_new (node, linear, FALSE);
+          private->fs_applicator = gimp_applicator_new (node, linear,
+                                                        FALSE, FALSE);
 
           private->fs_crop_node =
             gegl_node_new_child (node,
diff --git a/app/core/gimpimage-merge.c b/app/core/gimpimage-merge.c
index 590a4c2..60ed08b 100644
--- a/app/core/gimpimage-merge.c
+++ b/app/core/gimpimage-merge.c
@@ -616,7 +616,7 @@ gimp_image_merge_layers (GimpImage     *image,
       applicator =
         gimp_applicator_new (NULL,
                              gimp_drawable_get_linear (GIMP_DRAWABLE (layer)),
-                             FALSE);
+                             FALSE, FALSE);
 
       if (gimp_layer_get_mask (layer) &&
           gimp_layer_get_apply_mask (layer))
diff --git a/app/core/gimpimagemap.c b/app/core/gimpimagemap.c
index 6da2a0c..acc1baa 100644
--- a/app/core/gimpimagemap.c
+++ b/app/core/gimpimagemap.c
@@ -324,7 +324,7 @@ gimp_image_map_apply (GimpImageMap        *image_map,
       image_map->applicator =
         gimp_applicator_new (filter_node,
                              gimp_drawable_get_linear (image_map->drawable),
-                             TRUE);
+                             TRUE, TRUE);
 
       gimp_filter_set_applicator (image_map->filter,
                                   image_map->applicator);
diff --git a/app/gegl/gimpapplicator.c b/app/gegl/gimpapplicator.c
index 1fdb98d..3d77871 100644
--- a/app/gegl/gimpapplicator.c
+++ b/app/gegl/gimpapplicator.c
@@ -107,7 +107,8 @@ gimp_applicator_get_property (GObject    *object,
 GimpApplicator *
 gimp_applicator_new (GeglNode *parent,
                      gboolean  linear,
-                     gboolean  use_cache)
+                     gboolean  use_preview_cache,
+                     gboolean  use_result_cache)
 {
   GimpApplicator *applicator;
 
@@ -154,24 +155,35 @@ gimp_applicator_new (GeglNode *parent,
                          "operation", "gegl:copy-buffer",
                          NULL);
 
-  applicator->preview_cache_node =
-    gegl_node_new_child (applicator->node,
-                         "operation", "gegl:cache",
-                         NULL);
-
-  applicator->preview_crop_node =
-    gegl_node_new_child (applicator->node,
-                         "operation", "gegl:nop",
-                         NULL);
-
   gegl_node_link_many (applicator->aux_node,
                        applicator->apply_offset_node,
                        applicator->dup_apply_buffer_node,
-                       applicator->preview_cache_node,
-                       applicator->preview_crop_node,
                        NULL);
-  gegl_node_connect_to (applicator->preview_crop_node, "output",
-                        applicator->mode_node,         "aux");
+
+  if (use_preview_cache)
+    {
+      applicator->preview_cache_node =
+        gegl_node_new_child (applicator->node,
+                             "operation", "gegl:cache",
+                             NULL);
+
+      applicator->preview_crop_node =
+        gegl_node_new_child (applicator->node,
+                             "operation", "gegl:nop",
+                             NULL);
+
+      gegl_node_link_many (applicator->dup_apply_buffer_node,
+                           applicator->preview_cache_node,
+                           applicator->preview_crop_node,
+                           NULL);
+      gegl_node_connect_to (applicator->preview_crop_node, "output",
+                            applicator->mode_node,         "aux");
+    }
+  else
+    {
+      gegl_node_connect_to (applicator->dup_apply_buffer_node, "output",
+                            applicator->mode_node,             "aux");
+    }
 
   applicator->mask_node =
     gegl_node_new_child (applicator->node,
@@ -193,7 +205,7 @@ gimp_applicator_new (GeglNode *parent,
                          "mask",      applicator->affect,
                          NULL);
 
-  if (use_cache)
+  if (use_result_cache)
     {
       applicator->output_cache_node =
         gegl_node_new_child (applicator->node,
@@ -473,6 +485,9 @@ gimp_applicator_set_preview (GimpApplicator      *applicator,
   g_return_if_fail (GIMP_IS_APPLICATOR (applicator));
   g_return_if_fail (rect != NULL);
 
+  if (! applicator->preview_cache_node)
+    return;
+
   if (applicator->preview_enabled     != enable      ||
       applicator->preview_rect.x      != rect->x     ||
       applicator->preview_rect.y      != rect->y     ||
diff --git a/app/gegl/gimpapplicator.h b/app/gegl/gimpapplicator.h
index 91e9b8a..8983094 100644
--- a/app/gegl/gimpapplicator.h
+++ b/app/gegl/gimpapplicator.h
@@ -89,7 +89,8 @@ GType        gimp_applicator_get_type         (void) G_GNUC_CONST;
 
 GimpApplicator * gimp_applicator_new          (GeglNode             *parent,
                                                gboolean              linear,
-                                               gboolean              use_cache);
+                                               gboolean              use_preview_cache,
+                                               gboolean              use_result_cache);
 
 void         gimp_applicator_set_src_buffer   (GimpApplicator       *applicator,
                                                GeglBuffer           *dest_buffer);
diff --git a/app/paint/gimppaintcore.c b/app/paint/gimppaintcore.c
index 514c8c1..1539b01 100644
--- a/app/paint/gimppaintcore.c
+++ b/app/paint/gimppaintcore.c
@@ -446,7 +446,8 @@ gimp_paint_core_start (GimpPaintCore     *core,
 
   if (paint_options->use_applicator)
     {
-      core->applicator = gimp_applicator_new (NULL, core->linear_mode, FALSE);
+      core->applicator = gimp_applicator_new (NULL, core->linear_mode,
+                                              FALSE, FALSE);
 
       if (core->mask_buffer)
         {


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