[gimp/gimp-2-10] app: add gimp_applicator_set_active()
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: add gimp_applicator_set_active()
- Date: Thu, 2 Apr 2020 16:05:19 +0000 (UTC)
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]