[gimp] modules: implement convert_buffer() in the high contrast display filter



commit a04c442e690a206151cd16efc7b2d2a65f656b19
Author: Michael Natterer <mitch gimp org>
Date:   Sat Nov 2 01:37:52 2013 +0100

    modules: implement convert_buffer() in the high contrast display filter

 modules/display-filter-high-contrast.c |   35 ++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)
---
diff --git a/modules/display-filter-high-contrast.c b/modules/display-filter-high-contrast.c
index 422b192..1a0a869 100644
--- a/modules/display-filter-high-contrast.c
+++ b/modules/display-filter-high-contrast.c
@@ -74,6 +74,9 @@ static void        cdisplay_contrast_get_property    (GObject          *object,
                                                       GValue           *value,
                                                       GParamSpec       *pspec);
 
+static void        cdisplay_contrast_convert_buffer  (GimpColorDisplay *display,
+                                                      GeglBuffer       *buffer,
+                                                      GeglRectangle    *area);
 static void        cdisplay_contrast_convert_surface (GimpColorDisplay *display,
                                                       cairo_surface_t  *surface);
 static GtkWidget * cdisplay_contrast_configure       (GimpColorDisplay *display);
@@ -128,6 +131,7 @@ cdisplay_contrast_class_init (CdisplayContrastClass *klass)
   display_class->help_id         = "gimp-colordisplay-contrast";
   display_class->stock_id        = GIMP_STOCK_DISPLAY_FILTER_CONTRAST;
 
+  display_class->convert_buffer  = cdisplay_contrast_convert_buffer;
   display_class->convert_surface = cdisplay_contrast_convert_surface;
   display_class->configure       = cdisplay_contrast_configure;
 }
@@ -181,6 +185,37 @@ cdisplay_contrast_set_property (GObject      *object,
 }
 
 static void
+cdisplay_contrast_convert_buffer (GimpColorDisplay *display,
+                                  GeglBuffer       *buffer,
+                                  GeglRectangle    *area)
+{
+  CdisplayContrast   *contrast = CDISPLAY_CONTRAST (display);
+  GeglBufferIterator *iter;
+  gfloat              c;
+
+  c = contrast->contrast * 2 * G_PI;
+
+  iter = gegl_buffer_iterator_new (buffer, area, 0,
+                                   babl_format ("R'G'B'A float"),
+                                   GEGL_BUFFER_READWRITE, GEGL_ABYSS_NONE);
+
+  while (gegl_buffer_iterator_next (iter))
+    {
+      gfloat *data  = iter->data[0];
+      gint    count = iter->length;
+
+      while (count--)
+        {
+          *data = 0.5 * (1.0 + sin (c * *data)); data++;
+          *data = 0.5 * (1.0 + sin (c * *data)); data++;
+          *data = 0.5 * (1.0 + sin (c * *data)); data++;
+
+          data++;
+        }
+    }
+}
+
+static void
 cdisplay_contrast_convert_surface (GimpColorDisplay *display,
                                    cairo_surface_t  *surface)
 {


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