[gegl] buffer: added gegl_buffer_set_color



commit b42348fc8c3c6318c0aa8066a28a8b21e2107644
Author: Ãyvind KolÃs <pippin gimp org>
Date:   Thu Mar 15 20:56:18 2012 +0000

    buffer: added gegl_buffer_set_color

 gegl/buffer/gegl-buffer-access.c |   60 ++++++++++++++++++++++++++++++++++++++
 gegl/buffer/gegl-buffer.h        |   13 ++++++++
 2 files changed, 73 insertions(+), 0 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 92e7648..567588f 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -1192,6 +1192,66 @@ gegl_buffer_clear (GeglBuffer          *dst,
     }
 }
 
+#if 0
+/**
+ * gegl_buffer_pattern:
+ * @buffer: a #GeglBuffer
+ * @roi: a rectangular region
+ * @pattern: a #GeglBuffer to be repeated as a pattern
+ * @x_offset: where the pattern starts horizontally
+ * @y_offset: where the pattern starts vertical
+ *
+ * Clears the provided rectangular region by setting all the associated memory
+ * to 0
+ */
+void            gegl_buffer_set_pattern       (GeglBuffer          *buffer,
+                                               const GeglRectangle *rect,
+                                               GeglBuffer          *pattern,
+                                               gdouble              x_offset,
+                                               gdouble              y_offset)
+{
+  /* NYI */
+}
+#endif
+
+void            gegl_buffer_set_color         (GeglBuffer          *dst,
+                                               const GeglRectangle *dst_rect,
+                                               GeglColor           *color)
+{
+  GeglBufferIterator *i;
+  gfloat              rgbaf[4];
+  gchar               buf[128];
+  gint                pxsize;
+
+  g_return_if_fail (GEGL_IS_BUFFER (dst));
+  g_return_if_fail (color);
+
+  gegl_color_get_rgba4f (color, rgbaf);
+  babl_process (babl_fish (babl_format ("RGBA float"), dst->format),
+                rgbaf, buf, 1);
+
+  if (!dst_rect)
+    {
+      dst_rect = gegl_buffer_get_extent (dst);
+    }
+  if (dst_rect->width == 0 ||
+      dst_rect->height == 0)
+    return;
+
+  pxsize = babl_format_get_bytes_per_pixel (dst->format);
+
+  /* FIXME: this can be even further optimized by special casing it so
+   * that fully filled tiles are shared.
+   */
+  i = gegl_buffer_iterator_new (dst, dst_rect, dst->format, GEGL_BUFFER_WRITE);
+  while (gegl_buffer_iterator_next (i))
+    {
+      int j;
+      for (j = 0; j < i->length; j++)
+        memcpy (((guchar*)(i->data[j * pxsize])), buf, pxsize);
+    }
+}
+
 GeglBuffer *
 gegl_buffer_dup (GeglBuffer *buffer)
 {
diff --git a/gegl/buffer/gegl-buffer.h b/gegl/buffer/gegl-buffer.h
index 3f8dd77..3b653d8 100644
--- a/gegl/buffer/gegl-buffer.h
+++ b/gegl/buffer/gegl-buffer.h
@@ -258,6 +258,19 @@ void            gegl_buffer_set               (GeglBuffer          *buffer,
 
 
 /**
+ * gegl_buffer_set_color:
+ * @buffer: a #GeglBuffer
+ * @rect: a rectangular region to fill with a color.
+ * @color: the GeglColor to fill with.
+ *
+ * Clears the provided rectangular region by setting all the associated memory
+ * to 0
+ */
+void            gegl_buffer_set_color         (GeglBuffer          *buffer,
+                                               const GeglRectangle *rect,
+                                               GeglColor           *color);
+
+/**
  * gegl_buffer_get_format:
  * @buffer: a #GeglBuffer
  *



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