[gimp] modules: implement convert_buffer() in the high contrast display filter
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] modules: implement convert_buffer() in the high contrast display filter
- Date: Sat, 2 Nov 2013 00:39:19 +0000 (UTC)
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]