[gimp] app: add gimp_applicator_dup_apply_buffer()
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add gimp_applicator_dup_apply_buffer()
- Date: Mon, 22 Apr 2013 09:01:12 +0000 (UTC)
commit c20838fa263d0b53f23fc96a9ebf97c145fb6186
Author: Michael Natterer <mitch gimp org>
Date: Mon Apr 22 10:54:05 2013 +0200
app: add gimp_applicator_dup_apply_buffer()
which copies a rectangle of the layer mode node's "aux" input into
a newly allocated buffer.
app/gegl/gimpapplicator.c | 40 +++++++++++++++++++++++++++++++
app/gegl/gimpapplicator.h | 61 +++++++++++++++++++++++++----------------------
2 files changed, 72 insertions(+), 29 deletions(-)
---
diff --git a/app/gegl/gimpapplicator.c b/app/gegl/gimpapplicator.c
index fee2482..90787a9 100644
--- a/app/gegl/gimpapplicator.c
+++ b/app/gegl/gimpapplicator.c
@@ -408,3 +408,43 @@ gimp_applicator_blit (GimpApplicator *applicator,
gegl_node_blit (applicator->dest_node, 1.0, rect,
NULL, NULL, 0, GEGL_BLIT_DEFAULT);
}
+
+GeglBuffer *
+gimp_applicator_dup_apply_buffer (GimpApplicator *applicator,
+ const GeglRectangle *rect)
+{
+ GeglBuffer *buffer;
+ GeglNode *offset;
+ GeglNode *dest;
+
+ buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, rect->width, rect->height),
+ babl_format ("RGBA float"));
+
+ offset = gegl_node_new_child (applicator->node,
+ "operation", "gegl:translate",
+ "x",
+ (gdouble) - applicator->apply_offset_x - rect->x,
+ "y",
+ (gdouble) - applicator->apply_offset_y - rect->y,
+ NULL);
+
+ dest = gegl_node_new_child (applicator->node,
+ "operation", "gegl:write-buffer",
+ "buffer", buffer,
+ NULL);
+
+ gegl_node_link_many (applicator->apply_offset_node,
+ offset,
+ dest,
+ NULL);
+
+ gegl_node_blit (dest, 1.0, GEGL_RECTANGLE (0, 0, rect->width, rect->height),
+ NULL, NULL, 0, GEGL_BLIT_DEFAULT);
+
+ gegl_node_disconnect (offset, "input");
+
+ gegl_node_remove_child (applicator->node, offset);
+ gegl_node_remove_child (applicator->node, dest);
+
+ return buffer;
+}
diff --git a/app/gegl/gimpapplicator.h b/app/gegl/gimpapplicator.h
index cf624d9..c979c14 100644
--- a/app/gegl/gimpapplicator.h
+++ b/app/gegl/gimpapplicator.h
@@ -75,35 +75,38 @@ struct _GimpApplicatorClass
};
-GType gimp_applicator_get_type (void) G_GNUC_CONST;
-
-GimpApplicator * gimp_applicator_new (GeglNode *parent);
-
-void gimp_applicator_set_src_buffer (GimpApplicator *applicator,
- GeglBuffer *dest_buffer);
-void gimp_applicator_set_dest_buffer (GimpApplicator *applicator,
- GeglBuffer *dest_buffer);
-
-void gimp_applicator_set_mask_buffer (GimpApplicator *applicator,
- GeglBuffer *mask_buffer);
-void gimp_applicator_set_mask_offset (GimpApplicator *applicator,
- gint mask_offset_x,
- gint mask_offset_y);
-
-void gimp_applicator_set_apply_buffer (GimpApplicator *applicator,
- GeglBuffer *apply_buffer);
-void gimp_applicator_set_apply_offset (GimpApplicator *applicator,
- gint apply_offset_x,
- gint apply_offset_y);
-
-void gimp_applicator_set_mode (GimpApplicator *applicator,
- gdouble opacity,
- GimpLayerModeEffects paint_mode);
-void gimp_applicator_set_affect (GimpApplicator *applicator,
- GimpComponentMask affect);
-
-void gimp_applicator_blit (GimpApplicator *applicator,
- const GeglRectangle *rect);
+GType gimp_applicator_get_type (void) G_GNUC_CONST;
+
+GimpApplicator * gimp_applicator_new (GeglNode *parent);
+
+void gimp_applicator_set_src_buffer (GimpApplicator *applicator,
+ GeglBuffer *dest_buffer);
+void gimp_applicator_set_dest_buffer (GimpApplicator *applicator,
+ GeglBuffer *dest_buffer);
+
+void gimp_applicator_set_mask_buffer (GimpApplicator *applicator,
+ GeglBuffer *mask_buffer);
+void gimp_applicator_set_mask_offset (GimpApplicator *applicator,
+ gint mask_offset_x,
+ gint mask_offset_y);
+
+void gimp_applicator_set_apply_buffer (GimpApplicator *applicator,
+ GeglBuffer *apply_buffer);
+void gimp_applicator_set_apply_offset (GimpApplicator *applicator,
+ gint apply_offset_x,
+ gint apply_offset_y);
+
+void gimp_applicator_set_mode (GimpApplicator *applicator,
+ gdouble opacity,
+ GimpLayerModeEffects paint_mode);
+void gimp_applicator_set_affect (GimpApplicator *applicator,
+ GimpComponentMask affect);
+
+void gimp_applicator_blit (GimpApplicator *applicator,
+ const GeglRectangle *rect);
+
+GeglBuffer * gimp_applicator_dup_apply_buffer (GimpApplicator *applicator,
+ const GeglRectangle *rect);
#endif /* __GIMP_APPLICATOR_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]