[gimp/metadata-browser] app: add a new gimp_gegl_combine_mask() which does what it says
- From: Roman Joost <romanofski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/metadata-browser] app: add a new gimp_gegl_combine_mask() which does what it says
- Date: Thu, 13 Sep 2012 00:09:27 +0000 (UTC)
commit 33a90b12c10b5ae38735165c4cf312e29e083011
Author: Michael Natterer <mitch gimp org>
Date: Sun May 6 20:01:20 2012 +0200
app: add a new gimp_gegl_combine_mask() which does what it says
which is combining two masks. Use it in gimp_drawable_real_replace_buffer()
instead of gimp_gegl_apply_mask() which does the wrong thing.
app/core/gimpdrawable-combine.c | 6 +++---
app/gegl/gimp-gegl-loops.c | 32 ++++++++++++++++++++++++++++++++
app/gegl/gimp-gegl-loops.h | 6 ++++++
3 files changed, 41 insertions(+), 3 deletions(-)
---
diff --git a/app/core/gimpdrawable-combine.c b/app/core/gimpdrawable-combine.c
index f8a2011..1be8df3 100644
--- a/app/core/gimpdrawable-combine.c
+++ b/app/core/gimpdrawable-combine.c
@@ -331,9 +331,9 @@ gimp_drawable_real_replace_buffer (GimpDrawable *drawable,
dest_buffer,
GEGL_RECTANGLE (0, 0, 0, 0));
- gimp_gegl_apply_mask (mask_buffer, mask_buffer_region,
- dest_buffer, GEGL_RECTANGLE (0, 0, width, height),
- 1.0);
+ gimp_gegl_combine_mask (mask_buffer, mask_buffer_region,
+ dest_buffer, GEGL_RECTANGLE (0, 0, width, height),
+ 1.0);
gimp_gegl_replace (buffer,
buffer_region,
diff --git a/app/gegl/gimp-gegl-loops.c b/app/gegl/gimp-gegl-loops.c
index f656df3..2397a53 100644
--- a/app/gegl/gimp-gegl-loops.c
+++ b/app/gegl/gimp-gegl-loops.c
@@ -425,6 +425,38 @@ gimp_gegl_apply_mask (GeglBuffer *mask_buffer,
}
void
+gimp_gegl_combine_mask (GeglBuffer *mask_buffer,
+ const GeglRectangle *mask_rect,
+ GeglBuffer *dest_buffer,
+ const GeglRectangle *dest_rect,
+ gdouble opacity)
+{
+ GeglBufferIterator *iter;
+
+ iter = gegl_buffer_iterator_new (mask_buffer, mask_rect, 0,
+ babl_format ("Y float"),
+ GEGL_BUFFER_READ, GEGL_ABYSS_NONE);
+
+ gegl_buffer_iterator_add (iter, dest_buffer, dest_rect, 0,
+ babl_format ("Y float"),
+ GEGL_BUFFER_READWRITE, GEGL_ABYSS_NONE);
+
+ while (gegl_buffer_iterator_next (iter))
+ {
+ const gfloat *mask = iter->data[0];
+ gfloat *dest = iter->data[1];
+
+ while (iter->length--)
+ {
+ *dest *= *mask * opacity;
+
+ mask += 1;
+ dest += 1;
+ }
+ }
+}
+
+void
gimp_gegl_combine_mask_weird (GeglBuffer *mask_buffer,
const GeglRectangle *mask_rect,
GeglBuffer *dest_buffer,
diff --git a/app/gegl/gimp-gegl-loops.h b/app/gegl/gimp-gegl-loops.h
index 1178be1..9fdde4a 100644
--- a/app/gegl/gimp-gegl-loops.h
+++ b/app/gegl/gimp-gegl-loops.h
@@ -57,6 +57,12 @@ void gimp_gegl_apply_mask (GeglBuffer *mask_buffer,
const GeglRectangle *dest_rect,
gdouble opacity);
+void gimp_gegl_combine_mask (GeglBuffer *mask_buffer,
+ const GeglRectangle *mask_rect,
+ GeglBuffer *dest_buffer,
+ const GeglRectangle *dest_rect,
+ gdouble opacity);
+
void gimp_gegl_combine_mask_weird (GeglBuffer *mask_buffer,
const GeglRectangle *mask_rect,
GeglBuffer *dest_buffer,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]