[gegl] buffer: add gegl_rectangle_xor()



commit c7de787947253024d33b3a8c434a1a8f529a61b4
Author: Ell <ell_se yahoo com>
Date:   Thu Aug 1 16:23:55 2019 +0300

    buffer: add gegl_rectangle_xor()
    
    ... which computes the symmetric difference between a pair of
    rectangles.

 gegl/buffer/gegl-rectangle.c | 15 +++++++++++++++
 gegl/buffer/gegl-rectangle.h | 18 ++++++++++++++++++
 2 files changed, 33 insertions(+)
---
diff --git a/gegl/buffer/gegl-rectangle.c b/gegl/buffer/gegl-rectangle.c
index 059fd1382..112856e98 100644
--- a/gegl/buffer/gegl-rectangle.c
+++ b/gegl/buffer/gegl-rectangle.c
@@ -316,6 +316,21 @@ gegl_rectangle_subtract_bounding_box (GeglRectangle       *dest,
     }
 }
 
+gint
+gegl_rectangle_xor (GeglRectangle       *dest,
+                    const GeglRectangle *src1,
+                    const GeglRectangle *src2)
+{
+  GeglRectangle rect1 = *src1;
+  GeglRectangle rect2 = *src2;
+  gint          n;
+
+  n  = gegl_rectangle_subtract (dest,     &rect1, &rect2);
+  n += gegl_rectangle_subtract (dest + n, &rect2, &rect1);
+
+  return n;
+}
+
 void
 gegl_rectangle_copy (GeglRectangle       *to,
                      const GeglRectangle *from)
diff --git a/gegl/buffer/gegl-rectangle.h b/gegl/buffer/gegl-rectangle.h
index d17cdad22..4b2b03bc4 100644
--- a/gegl/buffer/gegl-rectangle.h
+++ b/gegl/buffer/gegl-rectangle.h
@@ -275,6 +275,24 @@ gboolean
                                           const GeglRectangle *minuend,
                                           const GeglRectangle *subtrahend);
 
+/**
+ * gegl_rectangle_xor:
+ * @destination: an array of 4 #GeglRectangle elements
+ * @source1: a #GeglRectangle
+ * @source2: a #GeglRectangle
+ *
+ * Computes the symmetric difference of the rectangles @source1 and @source2,
+ * and stores the resulting rectangles in @destination.  Between 0 and 4
+ * disjoint rectangles may be produced.
+ *
+ * @destination may contain @rectangle1 or @rectangle2.
+ *
+ * Returns the number of resulting rectangles.
+ */
+gint        gegl_rectangle_xor           (GeglRectangle       *destination,
+                                          const GeglRectangle *source1,
+                                          const GeglRectangle *source2);
+
 /**
  * gegl_rectangle_contains:
  * @parent: a #GeglRectangle


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