[gimp] app: add back individual operation classes for the layer modes
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] app: add back individual operation classes for the layer modes
- Date: Wed, 30 Dec 2009 14:23:06 +0000 (UTC)
commit 9f6827be7c626f94148f605d85be29ad490672cc
Author: Michael Natterer <mitch gimp org>
Date: Wed Dec 30 15:18:44 2009 +0100
app: add back individual operation classes for the layer modes
They are derived from GimpOperationPointLayerMode and are completely
empty and unused, but can be filled with code and enabled one-by-one
now.
app/gegl/Makefile.am | 52 +++++++++++++++++-
app/gegl/gimp-gegl-types.h | 25 +++++++++
app/gegl/gimp-gegl-utils.c | 38 +++++++++++++
app/gegl/gimp-gegl-utils.h | 2 +
app/gegl/gimp-gegl.c | 50 +++++++++++++++++
app/gegl/gimpoperationadditionmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationadditionmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationantierasemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationantierasemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationbehindmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationbehindmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationburnmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationburnmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationcolorerasemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationcolorerasemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationcolormode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationcolormode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationdarkenonlymode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationdarkenonlymode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationdifferencemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationdifferencemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationdissolvemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationdissolvemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationdividemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationdividemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationdodgemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationdodgemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationerasemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationerasemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationgrainextractmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationgrainextractmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationgrainmergemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationgrainmergemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationhardlightmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationhardlightmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationhuemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationhuemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationlightenonlymode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationlightenonlymode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationmultiplymode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationmultiplymode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationoverlaymode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationoverlaymode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationreplacemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationreplacemode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationsaturationmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationsaturationmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationscreenmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationscreenmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationsoftlightmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationsoftlightmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationsubtractmode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationsubtractmode.h | 53 ++++++++++++++++++
app/gegl/gimpoperationvaluemode.c | 88 ++++++++++++++++++++++++++++++
app/gegl/gimpoperationvaluemode.h | 53 ++++++++++++++++++
55 files changed, 3691 insertions(+), 1 deletions(-)
---
diff --git a/app/gegl/Makefile.am b/app/gegl/Makefile.am
index 8e505c2..0936761 100644
--- a/app/gegl/Makefile.am
+++ b/app/gegl/Makefile.am
@@ -65,4 +65,54 @@ libappgegl_a_SOURCES = \
gimpoperationthreshold.h \
\
gimpoperationpointlayermode.c \
- gimpoperationpointlayermode.h
+ gimpoperationpointlayermode.h \
+ gimpoperationdissolvemode.c \
+ gimpoperationdissolvemode.h \
+ gimpoperationbehindmode.c \
+ gimpoperationbehindmode.h \
+ gimpoperationmultiplymode.c \
+ gimpoperationmultiplymode.h \
+ gimpoperationscreenmode.c \
+ gimpoperationscreenmode.h \
+ gimpoperationoverlaymode.c \
+ gimpoperationoverlaymode.h \
+ gimpoperationdifferencemode.c \
+ gimpoperationdifferencemode.h \
+ gimpoperationadditionmode.c \
+ gimpoperationadditionmode.h \
+ gimpoperationsubtractmode.c \
+ gimpoperationsubtractmode.h \
+ gimpoperationdarkenonlymode.c \
+ gimpoperationdarkenonlymode.h \
+ gimpoperationlightenonlymode.c \
+ gimpoperationlightenonlymode.h \
+ gimpoperationhuemode.c \
+ gimpoperationhuemode.h \
+ gimpoperationsaturationmode.c \
+ gimpoperationsaturationmode.h \
+ gimpoperationcolormode.c \
+ gimpoperationcolormode.h \
+ gimpoperationvaluemode.c \
+ gimpoperationvaluemode.h \
+ gimpoperationdividemode.c \
+ gimpoperationdividemode.h \
+ gimpoperationdodgemode.c \
+ gimpoperationdodgemode.h \
+ gimpoperationburnmode.c \
+ gimpoperationburnmode.h \
+ gimpoperationhardlightmode.c \
+ gimpoperationhardlightmode.h \
+ gimpoperationsoftlightmode.c \
+ gimpoperationsoftlightmode.h \
+ gimpoperationgrainextractmode.c \
+ gimpoperationgrainextractmode.h \
+ gimpoperationgrainmergemode.c \
+ gimpoperationgrainmergemode.h \
+ gimpoperationcolorerasemode.c \
+ gimpoperationcolorerasemode.h \
+ gimpoperationerasemode.c \
+ gimpoperationerasemode.h \
+ gimpoperationreplacemode.c \
+ gimpoperationreplacemode.h \
+ gimpoperationantierasemode.c \
+ gimpoperationantierasemode.h
diff --git a/app/gegl/gimp-gegl-types.h b/app/gegl/gimp-gegl-types.h
index d146c50..dcf18c2 100644
--- a/app/gegl/gimp-gegl-types.h
+++ b/app/gegl/gimp-gegl-types.h
@@ -39,6 +39,31 @@ typedef struct _GimpOperationPosterize GimpOperationPosterize;
typedef struct _GimpOperationThreshold GimpOperationThreshold;
typedef struct _GimpOperationPointLayerMode GimpOperationPointLayerMode;
+typedef struct _GimpOperationDissolveMode GimpOperationDissolveMode;
+typedef struct _GimpOperationBehindMode GimpOperationBehindMode;
+typedef struct _GimpOperationMultiplyMode GimpOperationMultiplyMode;
+typedef struct _GimpOperationScreenMode GimpOperationScreenMode;
+typedef struct _GimpOperationOverlayMode GimpOperationOverlayMode;
+typedef struct _GimpOperationDifferenceMode GimpOperationDifferenceMode;
+typedef struct _GimpOperationAdditionMode GimpOperationAdditionMode;
+typedef struct _GimpOperationSubtractMode GimpOperationSubtractMode;
+typedef struct _GimpOperationDarkenOnlyMode GimpOperationDarkenOnlyMode;
+typedef struct _GimpOperationLightenOnlyMode GimpOperationLightenOnlyMode;
+typedef struct _GimpOperationHueMode GimpOperationHueMode;
+typedef struct _GimpOperationSaturationMode GimpOperationSaturationMode;
+typedef struct _GimpOperationColorMode GimpOperationColorMode;
+typedef struct _GimpOperationValueMode GimpOperationValueMode;
+typedef struct _GimpOperationDivideMode GimpOperationDivideMode;
+typedef struct _GimpOperationDodgeMode GimpOperationDodgeMode;
+typedef struct _GimpOperationBurnMode GimpOperationBurnMode;
+typedef struct _GimpOperationHardlightMode GimpOperationHardlightMode;
+typedef struct _GimpOperationSoftlightMode GimpOperationSoftlightMode;
+typedef struct _GimpOperationGrainExtractMode GimpOperationGrainExtractMode;
+typedef struct _GimpOperationGrainMergeMode GimpOperationGrainMergeMode;
+typedef struct _GimpOperationColorEraseMode GimpOperationColorEraseMode;
+typedef struct _GimpOperationEraseMode GimpOperationEraseMode;
+typedef struct _GimpOperationReplaceMode GimpOperationReplaceMode;
+typedef struct _GimpOperationAntiEraseMode GimpOperationAntiEraseMode;
/* operation config objects */
diff --git a/app/gegl/gimp-gegl-utils.c b/app/gegl/gimp-gegl-utils.c
index e0838d5..8b08766 100644
--- a/app/gegl/gimp-gegl-utils.c
+++ b/app/gegl/gimp-gegl-utils.c
@@ -114,3 +114,41 @@ gimp_buffer_to_tiles (GeglBuffer *buffer)
return new_tiles;
}
+
+const gchar *
+gimp_layer_mode_to_gegl_operation (GimpLayerModeEffects mode)
+{
+ switch (mode)
+ {
+ case GIMP_NORMAL_MODE: return "gegl:over";
+ case GIMP_DISSOLVE_MODE: return "gimp:dissolve-mode";
+ case GIMP_BEHIND_MODE: return "gimp:behind-mode";
+ case GIMP_MULTIPLY_MODE: return "gimp:multiply-mode";
+ case GIMP_SCREEN_MODE: return "gimp:screen-mode";
+ case GIMP_OVERLAY_MODE: return "gimp:overlay-mode";
+ case GIMP_DIFFERENCE_MODE: return "gimp:difference-mode";
+ case GIMP_ADDITION_MODE: return "gimp:addition-mode";
+ case GIMP_SUBTRACT_MODE: return "gimp:subtract-mode";
+ case GIMP_DARKEN_ONLY_MODE: return "gimp:darken-mode";
+ case GIMP_LIGHTEN_ONLY_MODE: return "gimp:lighten-mode";
+ case GIMP_HUE_MODE: return "gimp:hue-mode";
+ case GIMP_SATURATION_MODE: return "gimp:saturation-mode";
+ case GIMP_COLOR_MODE: return "gimp:color-mode";
+ case GIMP_VALUE_MODE: return "gimp:value-mode";
+ case GIMP_DIVIDE_MODE: return "gimp:divide-mode";
+ case GIMP_DODGE_MODE: return "gimp:dodge-mode";
+ case GIMP_BURN_MODE: return "gimp:burn-mode";
+ case GIMP_HARDLIGHT_MODE: return "gimp:hardlight-mode";
+ case GIMP_SOFTLIGHT_MODE: return "gimp:softlight-mode";
+ case GIMP_GRAIN_EXTRACT_MODE: return "gimp:grain-extract-mode";
+ case GIMP_GRAIN_MERGE_MODE: return "gimp:grain-merge-mode";
+ case GIMP_COLOR_ERASE_MODE: return "gimp:color-erase-mode";
+ case GIMP_ERASE_MODE: return "gimp:erase-mode";
+ case GIMP_REPLACE_MODE: return "gimp:replace-mode";
+ case GIMP_ANTI_ERASE_MODE: return "gimp:anti-erase-mode";
+ default:
+ break;
+ }
+
+ return "gegl:over";
+}
diff --git a/app/gegl/gimp-gegl-utils.h b/app/gegl/gimp-gegl-utils.h
index 75446cb..5d5fc3b 100644
--- a/app/gegl/gimp-gegl-utils.h
+++ b/app/gegl/gimp-gegl-utils.h
@@ -27,5 +27,7 @@ const Babl * gimp_bpp_to_babl_format (guint bpp,
TileManager * gimp_buffer_to_tiles (GeglBuffer *buffer);
+const gchar * gimp_layer_mode_to_gegl_operation (GimpLayerModeEffects mode) G_GNUC_CONST;
+
#endif /* __GIMP_GEGL_UTILS_H__ */
diff --git a/app/gegl/gimp-gegl.c b/app/gegl/gimp-gegl.c
index feda36c..7d7b86b 100644
--- a/app/gegl/gimp-gegl.c
+++ b/app/gegl/gimp-gegl.c
@@ -43,6 +43,31 @@
#include "gimpoperationtilesource.h"
#include "gimpoperationpointlayermode.h"
+#include "gimpoperationdissolvemode.h"
+#include "gimpoperationbehindmode.h"
+#include "gimpoperationmultiplymode.h"
+#include "gimpoperationscreenmode.h"
+#include "gimpoperationoverlaymode.h"
+#include "gimpoperationdifferencemode.h"
+#include "gimpoperationadditionmode.h"
+#include "gimpoperationsubtractmode.h"
+#include "gimpoperationdarkenonlymode.h"
+#include "gimpoperationlightenonlymode.h"
+#include "gimpoperationhuemode.h"
+#include "gimpoperationsaturationmode.h"
+#include "gimpoperationcolormode.h"
+#include "gimpoperationvaluemode.h"
+#include "gimpoperationdividemode.h"
+#include "gimpoperationdodgemode.h"
+#include "gimpoperationburnmode.h"
+#include "gimpoperationhardlightmode.h"
+#include "gimpoperationsoftlightmode.h"
+#include "gimpoperationgrainextractmode.h"
+#include "gimpoperationgrainmergemode.h"
+#include "gimpoperationcolorerasemode.h"
+#include "gimpoperationerasemode.h"
+#include "gimpoperationreplacemode.h"
+#include "gimpoperationantierasemode.h"
static void gimp_gegl_notify_tile_cache_size (GimpBaseConfig *config);
@@ -80,6 +105,31 @@ gimp_gegl_init (Gimp *gimp)
g_type_class_ref (GIMP_TYPE_OPERATION_THRESHOLD);
g_type_class_ref (GIMP_TYPE_OPERATION_POINT_LAYER_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_DISSOLVE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_BEHIND_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_MULTIPLY_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_SCREEN_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_OVERLAY_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_DIFFERENCE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_ADDITION_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_SUBTRACT_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_HUE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_SATURATION_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_COLOR_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_VALUE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_DIVIDE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_DODGE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_BURN_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_HARDLIGHT_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_SOFTLIGHT_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_COLOR_ERASE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_ERASE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_REPLACE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_ANTI_ERASE_MODE);
}
static void
diff --git a/app/gegl/gimpoperationadditionmode.c b/app/gegl/gimpoperationadditionmode.c
new file mode 100644
index 0000000..645d5e8
--- /dev/null
+++ b/app/gegl/gimpoperationadditionmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationadditionmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationadditionmode.h"
+
+
+static gboolean gimp_operation_addition_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationAdditionMode, gimp_operation_addition_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_addition_mode_class_init (GimpOperationAdditionModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:addition-mode";
+ operation_class->description = "GIMP addition mode operation";
+
+ point_class->process = gimp_operation_addition_mode_process;
+}
+
+static void
+gimp_operation_addition_mode_init (GimpOperationAdditionMode *self)
+{
+}
+
+static gboolean
+gimp_operation_addition_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationadditionmode.h b/app/gegl/gimpoperationadditionmode.h
new file mode 100644
index 0000000..34b8dbb
--- /dev/null
+++ b/app/gegl/gimpoperationadditionmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationadditionmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_ADDITION_MODE_H__
+#define __GIMP_OPERATION_ADDITION_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_ADDITION_MODE (gimp_operation_addition_mode_get_type ())
+#define GIMP_OPERATION_ADDITION_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_ADDITION_MODE, GimpOperationAdditionMode))
+#define GIMP_OPERATION_ADDITION_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_ADDITION_MODE, GimpOperationAdditionModeClass))
+#define GIMP_IS_OPERATION_ADDITION_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_ADDITION_MODE))
+#define GIMP_IS_OPERATION_ADDITION_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_ADDITION_MODE))
+#define GIMP_OPERATION_ADDITION_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_ADDITION_MODE, GimpOperationAdditionModeClass))
+
+
+typedef struct _GimpOperationAdditionModeClass GimpOperationAdditionModeClass;
+
+struct _GimpOperationAdditionMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationAdditionModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_addition_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_ADDITION_MODE_H__ */
diff --git a/app/gegl/gimpoperationantierasemode.c b/app/gegl/gimpoperationantierasemode.c
new file mode 100644
index 0000000..132d861
--- /dev/null
+++ b/app/gegl/gimpoperationantierasemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationantierasemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationantierasemode.h"
+
+
+static gboolean gimp_operation_anti_erase_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationAntiEraseMode, gimp_operation_anti_erase_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_anti_erase_mode_class_init (GimpOperationAntiEraseModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:anti-erase-mode";
+ operation_class->description = "GIMP anti erase mode operation";
+
+ point_class->process = gimp_operation_anti_erase_mode_process;
+}
+
+static void
+gimp_operation_anti_erase_mode_init (GimpOperationAntiEraseMode *self)
+{
+}
+
+static gboolean
+gimp_operation_anti_erase_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationantierasemode.h b/app/gegl/gimpoperationantierasemode.h
new file mode 100644
index 0000000..fafdff7
--- /dev/null
+++ b/app/gegl/gimpoperationantierasemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationanti_erasemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_ANTI_ERASE_MODE_H__
+#define __GIMP_OPERATION_ANTI_ERASE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_ANTI_ERASE_MODE (gimp_operation_anti_erase_mode_get_type ())
+#define GIMP_OPERATION_ANTI_ERASE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_ANTI_ERASE_MODE, GimpOperationAntiEraseMode))
+#define GIMP_OPERATION_ANTI_ERASE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_ANTI_ERASE_MODE, GimpOperationAntiEraseModeClass))
+#define GIMP_IS_OPERATION_ANTI_ERASE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_ANTI_ERASE_MODE))
+#define GIMP_IS_OPERATION_ANTI_ERASE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_ANTI_ERASE_MODE))
+#define GIMP_OPERATION_ANTI_ERASE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_ANTI_ERASE_MODE, GimpOperationAntiEraseModeClass))
+
+
+typedef struct _GimpOperationAntiEraseModeClass GimpOperationAntiEraseModeClass;
+
+struct _GimpOperationAntiEraseMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationAntiEraseModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_anti_erase_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_ANTI_ERASE_MODE_H__ */
diff --git a/app/gegl/gimpoperationbehindmode.c b/app/gegl/gimpoperationbehindmode.c
new file mode 100644
index 0000000..cf97a07
--- /dev/null
+++ b/app/gegl/gimpoperationbehindmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationbehindmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationbehindmode.h"
+
+
+static gboolean gimp_operation_behind_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationBehindMode, gimp_operation_behind_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_behind_mode_class_init (GimpOperationBehindModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:behind-mode";
+ operation_class->description = "GIMP behind mode operation";
+
+ point_class->process = gimp_operation_behind_mode_process;
+}
+
+static void
+gimp_operation_behind_mode_init (GimpOperationBehindMode *self)
+{
+}
+
+static gboolean
+gimp_operation_behind_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationbehindmode.h b/app/gegl/gimpoperationbehindmode.h
new file mode 100644
index 0000000..a039bb8
--- /dev/null
+++ b/app/gegl/gimpoperationbehindmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationbehindmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_BEHIND_MODE_H__
+#define __GIMP_OPERATION_BEHIND_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_BEHIND_MODE (gimp_operation_behind_mode_get_type ())
+#define GIMP_OPERATION_BEHIND_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_BEHIND_MODE, GimpOperationBehindMode))
+#define GIMP_OPERATION_BEHIND_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_BEHIND_MODE, GimpOperationBehindModeClass))
+#define GIMP_IS_OPERATION_BEHIND_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_BEHIND_MODE))
+#define GIMP_IS_OPERATION_BEHIND_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_BEHIND_MODE))
+#define GIMP_OPERATION_BEHIND_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_BEHIND_MODE, GimpOperationBehindModeClass))
+
+
+typedef struct _GimpOperationBehindModeClass GimpOperationBehindModeClass;
+
+struct _GimpOperationBehindMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationBehindModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_behind_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_BEHIND_MODE_H__ */
diff --git a/app/gegl/gimpoperationburnmode.c b/app/gegl/gimpoperationburnmode.c
new file mode 100644
index 0000000..6325ab4
--- /dev/null
+++ b/app/gegl/gimpoperationburnmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationburnmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationburnmode.h"
+
+
+static gboolean gimp_operation_burn_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationBurnMode, gimp_operation_burn_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_burn_mode_class_init (GimpOperationBurnModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:burn-mode";
+ operation_class->description = "GIMP burn mode operation";
+
+ point_class->process = gimp_operation_burn_mode_process;
+}
+
+static void
+gimp_operation_burn_mode_init (GimpOperationBurnMode *self)
+{
+}
+
+static gboolean
+gimp_operation_burn_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationburnmode.h b/app/gegl/gimpoperationburnmode.h
new file mode 100644
index 0000000..c9c845a
--- /dev/null
+++ b/app/gegl/gimpoperationburnmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationburnmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_BURN_MODE_H__
+#define __GIMP_OPERATION_BURN_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_BURN_MODE (gimp_operation_burn_mode_get_type ())
+#define GIMP_OPERATION_BURN_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_BURN_MODE, GimpOperationBurnMode))
+#define GIMP_OPERATION_BURN_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_BURN_MODE, GimpOperationBurnModeClass))
+#define GIMP_IS_OPERATION_BURN_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_BURN_MODE))
+#define GIMP_IS_OPERATION_BURN_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_BURN_MODE))
+#define GIMP_OPERATION_BURN_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_BURN_MODE, GimpOperationBurnModeClass))
+
+
+typedef struct _GimpOperationBurnModeClass GimpOperationBurnModeClass;
+
+struct _GimpOperationBurnMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationBurnModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_burn_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_BURN_MODE_H__ */
diff --git a/app/gegl/gimpoperationcolorerasemode.c b/app/gegl/gimpoperationcolorerasemode.c
new file mode 100644
index 0000000..f1cf0ab
--- /dev/null
+++ b/app/gegl/gimpoperationcolorerasemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationcolorerasemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationcolorerasemode.h"
+
+
+static gboolean gimp_operation_color_erase_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationColorEraseMode, gimp_operation_color_erase_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_color_erase_mode_class_init (GimpOperationColorEraseModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:color-erase-mode";
+ operation_class->description = "GIMP color erase mode operation";
+
+ point_class->process = gimp_operation_color_erase_mode_process;
+}
+
+static void
+gimp_operation_color_erase_mode_init (GimpOperationColorEraseMode *self)
+{
+}
+
+static gboolean
+gimp_operation_color_erase_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationcolorerasemode.h b/app/gegl/gimpoperationcolorerasemode.h
new file mode 100644
index 0000000..887eca3
--- /dev/null
+++ b/app/gegl/gimpoperationcolorerasemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationcolor_erasemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_COLOR_ERASE_MODE_H__
+#define __GIMP_OPERATION_COLOR_ERASE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_COLOR_ERASE_MODE (gimp_operation_color_erase_mode_get_type ())
+#define GIMP_OPERATION_COLOR_ERASE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_COLOR_ERASE_MODE, GimpOperationColorEraseMode))
+#define GIMP_OPERATION_COLOR_ERASE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_COLOR_ERASE_MODE, GimpOperationColorEraseModeClass))
+#define GIMP_IS_OPERATION_COLOR_ERASE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_COLOR_ERASE_MODE))
+#define GIMP_IS_OPERATION_COLOR_ERASE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_COLOR_ERASE_MODE))
+#define GIMP_OPERATION_COLOR_ERASE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_COLOR_ERASE_MODE, GimpOperationColorEraseModeClass))
+
+
+typedef struct _GimpOperationColorEraseModeClass GimpOperationColorEraseModeClass;
+
+struct _GimpOperationColorEraseMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationColorEraseModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_color_erase_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_COLOR_ERASE_MODE_H__ */
diff --git a/app/gegl/gimpoperationcolormode.c b/app/gegl/gimpoperationcolormode.c
new file mode 100644
index 0000000..26e5d0c
--- /dev/null
+++ b/app/gegl/gimpoperationcolormode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationcolormode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationcolormode.h"
+
+
+static gboolean gimp_operation_color_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationColorMode, gimp_operation_color_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_color_mode_class_init (GimpOperationColorModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:color-mode";
+ operation_class->description = "GIMP color mode operation";
+
+ point_class->process = gimp_operation_color_mode_process;
+}
+
+static void
+gimp_operation_color_mode_init (GimpOperationColorMode *self)
+{
+}
+
+static gboolean
+gimp_operation_color_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationcolormode.h b/app/gegl/gimpoperationcolormode.h
new file mode 100644
index 0000000..4c29c2a
--- /dev/null
+++ b/app/gegl/gimpoperationcolormode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationcolormode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_COLOR_MODE_H__
+#define __GIMP_OPERATION_COLOR_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_COLOR_MODE (gimp_operation_color_mode_get_type ())
+#define GIMP_OPERATION_COLOR_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_COLOR_MODE, GimpOperationColorMode))
+#define GIMP_OPERATION_COLOR_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_COLOR_MODE, GimpOperationColorModeClass))
+#define GIMP_IS_OPERATION_COLOR_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_COLOR_MODE))
+#define GIMP_IS_OPERATION_COLOR_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_COLOR_MODE))
+#define GIMP_OPERATION_COLOR_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_COLOR_MODE, GimpOperationColorModeClass))
+
+
+typedef struct _GimpOperationColorModeClass GimpOperationColorModeClass;
+
+struct _GimpOperationColorMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationColorModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_color_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_COLOR_MODE_H__ */
diff --git a/app/gegl/gimpoperationdarkenonlymode.c b/app/gegl/gimpoperationdarkenonlymode.c
new file mode 100644
index 0000000..acd9265
--- /dev/null
+++ b/app/gegl/gimpoperationdarkenonlymode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdarkenonlymode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationdarkenonlymode.h"
+
+
+static gboolean gimp_operation_darken_only_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationDarkenOnlyMode, gimp_operation_darken_only_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_darken_only_mode_class_init (GimpOperationDarkenOnlyModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:darken-only-mode";
+ operation_class->description = "GIMP darken only mode operation";
+
+ point_class->process = gimp_operation_darken_only_mode_process;
+}
+
+static void
+gimp_operation_darken_only_mode_init (GimpOperationDarkenOnlyMode *self)
+{
+}
+
+static gboolean
+gimp_operation_darken_only_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationdarkenonlymode.h b/app/gegl/gimpoperationdarkenonlymode.h
new file mode 100644
index 0000000..54a982c
--- /dev/null
+++ b/app/gegl/gimpoperationdarkenonlymode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdarken_onlymode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_DARKEN_ONLY_MODE_H__
+#define __GIMP_OPERATION_DARKEN_ONLY_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE (gimp_operation_darken_only_mode_get_type ())
+#define GIMP_OPERATION_DARKEN_ONLY_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE, GimpOperationDarkenOnlyMode))
+#define GIMP_OPERATION_DARKEN_ONLY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE, GimpOperationDarkenOnlyModeClass))
+#define GIMP_IS_OPERATION_DARKEN_ONLY_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE))
+#define GIMP_IS_OPERATION_DARKEN_ONLY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE))
+#define GIMP_OPERATION_DARKEN_ONLY_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_DARKEN_ONLY_MODE, GimpOperationDarkenOnlyModeClass))
+
+
+typedef struct _GimpOperationDarkenOnlyModeClass GimpOperationDarkenOnlyModeClass;
+
+struct _GimpOperationDarkenOnlyMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationDarkenOnlyModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_darken_only_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_DARKEN_ONLY_MODE_H__ */
diff --git a/app/gegl/gimpoperationdifferencemode.c b/app/gegl/gimpoperationdifferencemode.c
new file mode 100644
index 0000000..b6c7ff1
--- /dev/null
+++ b/app/gegl/gimpoperationdifferencemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdifferencemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationdifferencemode.h"
+
+
+static gboolean gimp_operation_difference_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationDifferenceMode, gimp_operation_difference_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_difference_mode_class_init (GimpOperationDifferenceModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:difference-mode";
+ operation_class->description = "GIMP difference mode operation";
+
+ point_class->process = gimp_operation_difference_mode_process;
+}
+
+static void
+gimp_operation_difference_mode_init (GimpOperationDifferenceMode *self)
+{
+}
+
+static gboolean
+gimp_operation_difference_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationdifferencemode.h b/app/gegl/gimpoperationdifferencemode.h
new file mode 100644
index 0000000..f6af20d
--- /dev/null
+++ b/app/gegl/gimpoperationdifferencemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdifferencemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_DIFFERENCE_MODE_H__
+#define __GIMP_OPERATION_DIFFERENCE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_DIFFERENCE_MODE (gimp_operation_difference_mode_get_type ())
+#define GIMP_OPERATION_DIFFERENCE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_DIFFERENCE_MODE, GimpOperationDifferenceMode))
+#define GIMP_OPERATION_DIFFERENCE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_DIFFERENCE_MODE, GimpOperationDifferenceModeClass))
+#define GIMP_IS_OPERATION_DIFFERENCE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_DIFFERENCE_MODE))
+#define GIMP_IS_OPERATION_DIFFERENCE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_DIFFERENCE_MODE))
+#define GIMP_OPERATION_DIFFERENCE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_DIFFERENCE_MODE, GimpOperationDifferenceModeClass))
+
+
+typedef struct _GimpOperationDifferenceModeClass GimpOperationDifferenceModeClass;
+
+struct _GimpOperationDifferenceMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationDifferenceModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_difference_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_DIFFERENCE_MODE_H__ */
diff --git a/app/gegl/gimpoperationdissolvemode.c b/app/gegl/gimpoperationdissolvemode.c
new file mode 100644
index 0000000..5cb61bf
--- /dev/null
+++ b/app/gegl/gimpoperationdissolvemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdissolvemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationdissolvemode.h"
+
+
+static gboolean gimp_operation_dissolve_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationDissolveMode, gimp_operation_dissolve_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_dissolve_mode_class_init (GimpOperationDissolveModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:dissolve-mode";
+ operation_class->description = "GIMP dissolve mode operation";
+
+ point_class->process = gimp_operation_dissolve_mode_process;
+}
+
+static void
+gimp_operation_dissolve_mode_init (GimpOperationDissolveMode *self)
+{
+}
+
+static gboolean
+gimp_operation_dissolve_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationdissolvemode.h b/app/gegl/gimpoperationdissolvemode.h
new file mode 100644
index 0000000..0979f0a
--- /dev/null
+++ b/app/gegl/gimpoperationdissolvemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdissolvemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_DISSOLVE_MODE_H__
+#define __GIMP_OPERATION_DISSOLVE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_DISSOLVE_MODE (gimp_operation_dissolve_mode_get_type ())
+#define GIMP_OPERATION_DISSOLVE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_DISSOLVE_MODE, GimpOperationDissolveMode))
+#define GIMP_OPERATION_DISSOLVE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_DISSOLVE_MODE, GimpOperationDissolveModeClass))
+#define GIMP_IS_OPERATION_DISSOLVE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_DISSOLVE_MODE))
+#define GIMP_IS_OPERATION_DISSOLVE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_DISSOLVE_MODE))
+#define GIMP_OPERATION_DISSOLVE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_DISSOLVE_MODE, GimpOperationDissolveModeClass))
+
+
+typedef struct _GimpOperationDissolveModeClass GimpOperationDissolveModeClass;
+
+struct _GimpOperationDissolveMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationDissolveModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_dissolve_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_DISSOLVE_MODE_H__ */
diff --git a/app/gegl/gimpoperationdividemode.c b/app/gegl/gimpoperationdividemode.c
new file mode 100644
index 0000000..0f578f1
--- /dev/null
+++ b/app/gegl/gimpoperationdividemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdividemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationdividemode.h"
+
+
+static gboolean gimp_operation_divide_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationDivideMode, gimp_operation_divide_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_divide_mode_class_init (GimpOperationDivideModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:divide-mode";
+ operation_class->description = "GIMP divide mode operation";
+
+ point_class->process = gimp_operation_divide_mode_process;
+}
+
+static void
+gimp_operation_divide_mode_init (GimpOperationDivideMode *self)
+{
+}
+
+static gboolean
+gimp_operation_divide_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationdividemode.h b/app/gegl/gimpoperationdividemode.h
new file mode 100644
index 0000000..f1c23fd
--- /dev/null
+++ b/app/gegl/gimpoperationdividemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdividemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_DIVIDE_MODE_H__
+#define __GIMP_OPERATION_DIVIDE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_DIVIDE_MODE (gimp_operation_divide_mode_get_type ())
+#define GIMP_OPERATION_DIVIDE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_DIVIDE_MODE, GimpOperationDivideMode))
+#define GIMP_OPERATION_DIVIDE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_DIVIDE_MODE, GimpOperationDivideModeClass))
+#define GIMP_IS_OPERATION_DIVIDE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_DIVIDE_MODE))
+#define GIMP_IS_OPERATION_DIVIDE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_DIVIDE_MODE))
+#define GIMP_OPERATION_DIVIDE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_DIVIDE_MODE, GimpOperationDivideModeClass))
+
+
+typedef struct _GimpOperationDivideModeClass GimpOperationDivideModeClass;
+
+struct _GimpOperationDivideMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationDivideModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_divide_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_DIVIDE_MODE_H__ */
diff --git a/app/gegl/gimpoperationdodgemode.c b/app/gegl/gimpoperationdodgemode.c
new file mode 100644
index 0000000..92dde2d
--- /dev/null
+++ b/app/gegl/gimpoperationdodgemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdodgemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationdodgemode.h"
+
+
+static gboolean gimp_operation_dodge_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationDodgeMode, gimp_operation_dodge_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_dodge_mode_class_init (GimpOperationDodgeModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:dodge-mode";
+ operation_class->description = "GIMP dodge mode operation";
+
+ point_class->process = gimp_operation_dodge_mode_process;
+}
+
+static void
+gimp_operation_dodge_mode_init (GimpOperationDodgeMode *self)
+{
+}
+
+static gboolean
+gimp_operation_dodge_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationdodgemode.h b/app/gegl/gimpoperationdodgemode.h
new file mode 100644
index 0000000..0ffa35f
--- /dev/null
+++ b/app/gegl/gimpoperationdodgemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationdodgemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_DODGE_MODE_H__
+#define __GIMP_OPERATION_DODGE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_DODGE_MODE (gimp_operation_dodge_mode_get_type ())
+#define GIMP_OPERATION_DODGE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_DODGE_MODE, GimpOperationDodgeMode))
+#define GIMP_OPERATION_DODGE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_DODGE_MODE, GimpOperationDodgeModeClass))
+#define GIMP_IS_OPERATION_DODGE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_DODGE_MODE))
+#define GIMP_IS_OPERATION_DODGE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_DODGE_MODE))
+#define GIMP_OPERATION_DODGE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_DODGE_MODE, GimpOperationDodgeModeClass))
+
+
+typedef struct _GimpOperationDodgeModeClass GimpOperationDodgeModeClass;
+
+struct _GimpOperationDodgeMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationDodgeModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_dodge_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_DODGE_MODE_H__ */
diff --git a/app/gegl/gimpoperationerasemode.c b/app/gegl/gimpoperationerasemode.c
new file mode 100644
index 0000000..71dff2b
--- /dev/null
+++ b/app/gegl/gimpoperationerasemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationerasemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationerasemode.h"
+
+
+static gboolean gimp_operation_erase_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationEraseMode, gimp_operation_erase_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_erase_mode_class_init (GimpOperationEraseModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:erase-mode";
+ operation_class->description = "GIMP erase mode operation";
+
+ point_class->process = gimp_operation_erase_mode_process;
+}
+
+static void
+gimp_operation_erase_mode_init (GimpOperationEraseMode *self)
+{
+}
+
+static gboolean
+gimp_operation_erase_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationerasemode.h b/app/gegl/gimpoperationerasemode.h
new file mode 100644
index 0000000..a851ace
--- /dev/null
+++ b/app/gegl/gimpoperationerasemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationerasemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_ERASE_MODE_H__
+#define __GIMP_OPERATION_ERASE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_ERASE_MODE (gimp_operation_erase_mode_get_type ())
+#define GIMP_OPERATION_ERASE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_ERASE_MODE, GimpOperationEraseMode))
+#define GIMP_OPERATION_ERASE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_ERASE_MODE, GimpOperationEraseModeClass))
+#define GIMP_IS_OPERATION_ERASE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_ERASE_MODE))
+#define GIMP_IS_OPERATION_ERASE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_ERASE_MODE))
+#define GIMP_OPERATION_ERASE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_ERASE_MODE, GimpOperationEraseModeClass))
+
+
+typedef struct _GimpOperationEraseModeClass GimpOperationEraseModeClass;
+
+struct _GimpOperationEraseMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationEraseModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_erase_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_ERASE_MODE_H__ */
diff --git a/app/gegl/gimpoperationgrainextractmode.c b/app/gegl/gimpoperationgrainextractmode.c
new file mode 100644
index 0000000..e7d2e23
--- /dev/null
+++ b/app/gegl/gimpoperationgrainextractmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationgrainextractmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationgrainextractmode.h"
+
+
+static gboolean gimp_operation_grain_extract_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationGrainExtractMode, gimp_operation_grain_extract_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_grain_extract_mode_class_init (GimpOperationGrainExtractModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:grain-extract-mode";
+ operation_class->description = "GIMP grain extract mode operation";
+
+ point_class->process = gimp_operation_grain_extract_mode_process;
+}
+
+static void
+gimp_operation_grain_extract_mode_init (GimpOperationGrainExtractMode *self)
+{
+}
+
+static gboolean
+gimp_operation_grain_extract_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationgrainextractmode.h b/app/gegl/gimpoperationgrainextractmode.h
new file mode 100644
index 0000000..5ad1fea
--- /dev/null
+++ b/app/gegl/gimpoperationgrainextractmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationgrain_extractmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_GRAIN_EXTRACT_MODE_H__
+#define __GIMP_OPERATION_GRAIN_EXTRACT_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE (gimp_operation_grain_extract_mode_get_type ())
+#define GIMP_OPERATION_GRAIN_EXTRACT_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE, GimpOperationGrainExtractMode))
+#define GIMP_OPERATION_GRAIN_EXTRACT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE, GimpOperationGrainExtractModeClass))
+#define GIMP_IS_OPERATION_GRAIN_EXTRACT_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE))
+#define GIMP_IS_OPERATION_GRAIN_EXTRACT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE))
+#define GIMP_OPERATION_GRAIN_EXTRACT_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_GRAIN_EXTRACT_MODE, GimpOperationGrainExtractModeClass))
+
+
+typedef struct _GimpOperationGrainExtractModeClass GimpOperationGrainExtractModeClass;
+
+struct _GimpOperationGrainExtractMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationGrainExtractModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_grain_extract_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_GRAIN_EXTRACT_MODE_H__ */
diff --git a/app/gegl/gimpoperationgrainmergemode.c b/app/gegl/gimpoperationgrainmergemode.c
new file mode 100644
index 0000000..bef4b4b
--- /dev/null
+++ b/app/gegl/gimpoperationgrainmergemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationgrainmergemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationgrainmergemode.h"
+
+
+static gboolean gimp_operation_grain_merge_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationGrainMergeMode, gimp_operation_grain_merge_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_grain_merge_mode_class_init (GimpOperationGrainMergeModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:grain-merge-mode";
+ operation_class->description = "GIMP grain merge mode operation";
+
+ point_class->process = gimp_operation_grain_merge_mode_process;
+}
+
+static void
+gimp_operation_grain_merge_mode_init (GimpOperationGrainMergeMode *self)
+{
+}
+
+static gboolean
+gimp_operation_grain_merge_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationgrainmergemode.h b/app/gegl/gimpoperationgrainmergemode.h
new file mode 100644
index 0000000..e77c72c
--- /dev/null
+++ b/app/gegl/gimpoperationgrainmergemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationgrain_mergemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_GRAIN_MERGE_MODE_H__
+#define __GIMP_OPERATION_GRAIN_MERGE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE (gimp_operation_grain_merge_mode_get_type ())
+#define GIMP_OPERATION_GRAIN_MERGE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE, GimpOperationGrainMergeMode))
+#define GIMP_OPERATION_GRAIN_MERGE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE, GimpOperationGrainMergeModeClass))
+#define GIMP_IS_OPERATION_GRAIN_MERGE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE))
+#define GIMP_IS_OPERATION_GRAIN_MERGE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE))
+#define GIMP_OPERATION_GRAIN_MERGE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_GRAIN_MERGE_MODE, GimpOperationGrainMergeModeClass))
+
+
+typedef struct _GimpOperationGrainMergeModeClass GimpOperationGrainMergeModeClass;
+
+struct _GimpOperationGrainMergeMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationGrainMergeModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_grain_merge_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_GRAIN_MERGE_MODE_H__ */
diff --git a/app/gegl/gimpoperationhardlightmode.c b/app/gegl/gimpoperationhardlightmode.c
new file mode 100644
index 0000000..f02bfb8
--- /dev/null
+++ b/app/gegl/gimpoperationhardlightmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationhardlightmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationhardlightmode.h"
+
+
+static gboolean gimp_operation_hardlight_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationHardlightMode, gimp_operation_hardlight_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_hardlight_mode_class_init (GimpOperationHardlightModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:hardlight-mode";
+ operation_class->description = "GIMP hardlight mode operation";
+
+ point_class->process = gimp_operation_hardlight_mode_process;
+}
+
+static void
+gimp_operation_hardlight_mode_init (GimpOperationHardlightMode *self)
+{
+}
+
+static gboolean
+gimp_operation_hardlight_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationhardlightmode.h b/app/gegl/gimpoperationhardlightmode.h
new file mode 100644
index 0000000..ca09c10
--- /dev/null
+++ b/app/gegl/gimpoperationhardlightmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationhardlightmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_HARDLIGHT_MODE_H__
+#define __GIMP_OPERATION_HARDLIGHT_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_HARDLIGHT_MODE (gimp_operation_hardlight_mode_get_type ())
+#define GIMP_OPERATION_HARDLIGHT_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_HARDLIGHT_MODE, GimpOperationHardlightMode))
+#define GIMP_OPERATION_HARDLIGHT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_HARDLIGHT_MODE, GimpOperationHardlightModeClass))
+#define GIMP_IS_OPERATION_HARDLIGHT_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_HARDLIGHT_MODE))
+#define GIMP_IS_OPERATION_HARDLIGHT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_HARDLIGHT_MODE))
+#define GIMP_OPERATION_HARDLIGHT_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_HARDLIGHT_MODE, GimpOperationHardlightModeClass))
+
+
+typedef struct _GimpOperationHardlightModeClass GimpOperationHardlightModeClass;
+
+struct _GimpOperationHardlightMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationHardlightModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_hardlight_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_HARDLIGHT_MODE_H__ */
diff --git a/app/gegl/gimpoperationhuemode.c b/app/gegl/gimpoperationhuemode.c
new file mode 100644
index 0000000..8356195
--- /dev/null
+++ b/app/gegl/gimpoperationhuemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationhuemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationhuemode.h"
+
+
+static gboolean gimp_operation_hue_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationHueMode, gimp_operation_hue_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_hue_mode_class_init (GimpOperationHueModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:hue-mode";
+ operation_class->description = "GIMP hue mode operation";
+
+ point_class->process = gimp_operation_hue_mode_process;
+}
+
+static void
+gimp_operation_hue_mode_init (GimpOperationHueMode *self)
+{
+}
+
+static gboolean
+gimp_operation_hue_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationhuemode.h b/app/gegl/gimpoperationhuemode.h
new file mode 100644
index 0000000..d775aa6
--- /dev/null
+++ b/app/gegl/gimpoperationhuemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationhuemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_HUE_MODE_H__
+#define __GIMP_OPERATION_HUE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_HUE_MODE (gimp_operation_hue_mode_get_type ())
+#define GIMP_OPERATION_HUE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_HUE_MODE, GimpOperationHueMode))
+#define GIMP_OPERATION_HUE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_HUE_MODE, GimpOperationHueModeClass))
+#define GIMP_IS_OPERATION_HUE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_HUE_MODE))
+#define GIMP_IS_OPERATION_HUE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_HUE_MODE))
+#define GIMP_OPERATION_HUE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_HUE_MODE, GimpOperationHueModeClass))
+
+
+typedef struct _GimpOperationHueModeClass GimpOperationHueModeClass;
+
+struct _GimpOperationHueMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationHueModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_hue_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_HUE_MODE_H__ */
diff --git a/app/gegl/gimpoperationlightenonlymode.c b/app/gegl/gimpoperationlightenonlymode.c
new file mode 100644
index 0000000..26a8d0e
--- /dev/null
+++ b/app/gegl/gimpoperationlightenonlymode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationlightenonlymode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationlightenonlymode.h"
+
+
+static gboolean gimp_operation_lighten_only_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationLightenOnlyMode, gimp_operation_lighten_only_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_lighten_only_mode_class_init (GimpOperationLightenOnlyModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:lighten-only-mode";
+ operation_class->description = "GIMP lighten only mode operation";
+
+ point_class->process = gimp_operation_lighten_only_mode_process;
+}
+
+static void
+gimp_operation_lighten_only_mode_init (GimpOperationLightenOnlyMode *self)
+{
+}
+
+static gboolean
+gimp_operation_lighten_only_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationlightenonlymode.h b/app/gegl/gimpoperationlightenonlymode.h
new file mode 100644
index 0000000..4bbb990
--- /dev/null
+++ b/app/gegl/gimpoperationlightenonlymode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationlighten_onlymode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_LIGHTEN_ONLY_MODE_H__
+#define __GIMP_OPERATION_LIGHTEN_ONLY_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE (gimp_operation_lighten_only_mode_get_type ())
+#define GIMP_OPERATION_LIGHTEN_ONLY_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE, GimpOperationLightenOnlyMode))
+#define GIMP_OPERATION_LIGHTEN_ONLY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE, GimpOperationLightenOnlyModeClass))
+#define GIMP_IS_OPERATION_LIGHTEN_ONLY_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE))
+#define GIMP_IS_OPERATION_LIGHTEN_ONLY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE))
+#define GIMP_OPERATION_LIGHTEN_ONLY_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_LIGHTEN_ONLY_MODE, GimpOperationLightenOnlyModeClass))
+
+
+typedef struct _GimpOperationLightenOnlyModeClass GimpOperationLightenOnlyModeClass;
+
+struct _GimpOperationLightenOnlyMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationLightenOnlyModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_lighten_only_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_LIGHTEN_ONLY_MODE_H__ */
diff --git a/app/gegl/gimpoperationmultiplymode.c b/app/gegl/gimpoperationmultiplymode.c
new file mode 100644
index 0000000..b2756c4
--- /dev/null
+++ b/app/gegl/gimpoperationmultiplymode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationmultiplymode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationmultiplymode.h"
+
+
+static gboolean gimp_operation_multiply_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationMultiplyMode, gimp_operation_multiply_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_multiply_mode_class_init (GimpOperationMultiplyModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:multiply-mode";
+ operation_class->description = "GIMP multiply mode operation";
+
+ point_class->process = gimp_operation_multiply_mode_process;
+}
+
+static void
+gimp_operation_multiply_mode_init (GimpOperationMultiplyMode *self)
+{
+}
+
+static gboolean
+gimp_operation_multiply_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationmultiplymode.h b/app/gegl/gimpoperationmultiplymode.h
new file mode 100644
index 0000000..0901ac8
--- /dev/null
+++ b/app/gegl/gimpoperationmultiplymode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationmultiplymode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_MULTIPLY_MODE_H__
+#define __GIMP_OPERATION_MULTIPLY_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_MULTIPLY_MODE (gimp_operation_multiply_mode_get_type ())
+#define GIMP_OPERATION_MULTIPLY_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_MULTIPLY_MODE, GimpOperationMultiplyMode))
+#define GIMP_OPERATION_MULTIPLY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_MULTIPLY_MODE, GimpOperationMultiplyModeClass))
+#define GIMP_IS_OPERATION_MULTIPLY_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_MULTIPLY_MODE))
+#define GIMP_IS_OPERATION_MULTIPLY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_MULTIPLY_MODE))
+#define GIMP_OPERATION_MULTIPLY_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_MULTIPLY_MODE, GimpOperationMultiplyModeClass))
+
+
+typedef struct _GimpOperationMultiplyModeClass GimpOperationMultiplyModeClass;
+
+struct _GimpOperationMultiplyMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationMultiplyModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_multiply_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_MULTIPLY_MODE_H__ */
diff --git a/app/gegl/gimpoperationoverlaymode.c b/app/gegl/gimpoperationoverlaymode.c
new file mode 100644
index 0000000..6f67213
--- /dev/null
+++ b/app/gegl/gimpoperationoverlaymode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationoverlaymode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationoverlaymode.h"
+
+
+static gboolean gimp_operation_overlay_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationOverlayMode, gimp_operation_overlay_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_overlay_mode_class_init (GimpOperationOverlayModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:overlay-mode";
+ operation_class->description = "GIMP overlay mode operation";
+
+ point_class->process = gimp_operation_overlay_mode_process;
+}
+
+static void
+gimp_operation_overlay_mode_init (GimpOperationOverlayMode *self)
+{
+}
+
+static gboolean
+gimp_operation_overlay_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationoverlaymode.h b/app/gegl/gimpoperationoverlaymode.h
new file mode 100644
index 0000000..831e6c1
--- /dev/null
+++ b/app/gegl/gimpoperationoverlaymode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationoverlaymode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_OVERLAY_MODE_H__
+#define __GIMP_OPERATION_OVERLAY_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_OVERLAY_MODE (gimp_operation_overlay_mode_get_type ())
+#define GIMP_OPERATION_OVERLAY_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_OVERLAY_MODE, GimpOperationOverlayMode))
+#define GIMP_OPERATION_OVERLAY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_OVERLAY_MODE, GimpOperationOverlayModeClass))
+#define GIMP_IS_OPERATION_OVERLAY_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_OVERLAY_MODE))
+#define GIMP_IS_OPERATION_OVERLAY_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_OVERLAY_MODE))
+#define GIMP_OPERATION_OVERLAY_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_OVERLAY_MODE, GimpOperationOverlayModeClass))
+
+
+typedef struct _GimpOperationOverlayModeClass GimpOperationOverlayModeClass;
+
+struct _GimpOperationOverlayMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationOverlayModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_overlay_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_OVERLAY_MODE_H__ */
diff --git a/app/gegl/gimpoperationreplacemode.c b/app/gegl/gimpoperationreplacemode.c
new file mode 100644
index 0000000..8ae8d6b
--- /dev/null
+++ b/app/gegl/gimpoperationreplacemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationreplacemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationreplacemode.h"
+
+
+static gboolean gimp_operation_replace_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationReplaceMode, gimp_operation_replace_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_replace_mode_class_init (GimpOperationReplaceModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:replace-mode";
+ operation_class->description = "GIMP replace mode operation";
+
+ point_class->process = gimp_operation_replace_mode_process;
+}
+
+static void
+gimp_operation_replace_mode_init (GimpOperationReplaceMode *self)
+{
+}
+
+static gboolean
+gimp_operation_replace_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationreplacemode.h b/app/gegl/gimpoperationreplacemode.h
new file mode 100644
index 0000000..866bb97
--- /dev/null
+++ b/app/gegl/gimpoperationreplacemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationreplacemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_REPLACE_MODE_H__
+#define __GIMP_OPERATION_REPLACE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_REPLACE_MODE (gimp_operation_replace_mode_get_type ())
+#define GIMP_OPERATION_REPLACE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_REPLACE_MODE, GimpOperationReplaceMode))
+#define GIMP_OPERATION_REPLACE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_REPLACE_MODE, GimpOperationReplaceModeClass))
+#define GIMP_IS_OPERATION_REPLACE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_REPLACE_MODE))
+#define GIMP_IS_OPERATION_REPLACE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_REPLACE_MODE))
+#define GIMP_OPERATION_REPLACE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_REPLACE_MODE, GimpOperationReplaceModeClass))
+
+
+typedef struct _GimpOperationReplaceModeClass GimpOperationReplaceModeClass;
+
+struct _GimpOperationReplaceMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationReplaceModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_replace_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_REPLACE_MODE_H__ */
diff --git a/app/gegl/gimpoperationsaturationmode.c b/app/gegl/gimpoperationsaturationmode.c
new file mode 100644
index 0000000..ee7c8b0
--- /dev/null
+++ b/app/gegl/gimpoperationsaturationmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationsaturationmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationsaturationmode.h"
+
+
+static gboolean gimp_operation_saturation_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationSaturationMode, gimp_operation_saturation_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_saturation_mode_class_init (GimpOperationSaturationModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:saturation-mode";
+ operation_class->description = "GIMP saturation mode operation";
+
+ point_class->process = gimp_operation_saturation_mode_process;
+}
+
+static void
+gimp_operation_saturation_mode_init (GimpOperationSaturationMode *self)
+{
+}
+
+static gboolean
+gimp_operation_saturation_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationsaturationmode.h b/app/gegl/gimpoperationsaturationmode.h
new file mode 100644
index 0000000..cd28664
--- /dev/null
+++ b/app/gegl/gimpoperationsaturationmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationsaturationmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_SATURATION_MODE_H__
+#define __GIMP_OPERATION_SATURATION_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_SATURATION_MODE (gimp_operation_saturation_mode_get_type ())
+#define GIMP_OPERATION_SATURATION_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_SATURATION_MODE, GimpOperationSaturationMode))
+#define GIMP_OPERATION_SATURATION_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_SATURATION_MODE, GimpOperationSaturationModeClass))
+#define GIMP_IS_OPERATION_SATURATION_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_SATURATION_MODE))
+#define GIMP_IS_OPERATION_SATURATION_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_SATURATION_MODE))
+#define GIMP_OPERATION_SATURATION_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_SATURATION_MODE, GimpOperationSaturationModeClass))
+
+
+typedef struct _GimpOperationSaturationModeClass GimpOperationSaturationModeClass;
+
+struct _GimpOperationSaturationMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationSaturationModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_saturation_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_SATURATION_MODE_H__ */
diff --git a/app/gegl/gimpoperationscreenmode.c b/app/gegl/gimpoperationscreenmode.c
new file mode 100644
index 0000000..2361236
--- /dev/null
+++ b/app/gegl/gimpoperationscreenmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationscreenmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationscreenmode.h"
+
+
+static gboolean gimp_operation_screen_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationScreenMode, gimp_operation_screen_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_screen_mode_class_init (GimpOperationScreenModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:screen-mode";
+ operation_class->description = "GIMP screen mode operation";
+
+ point_class->process = gimp_operation_screen_mode_process;
+}
+
+static void
+gimp_operation_screen_mode_init (GimpOperationScreenMode *self)
+{
+}
+
+static gboolean
+gimp_operation_screen_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationscreenmode.h b/app/gegl/gimpoperationscreenmode.h
new file mode 100644
index 0000000..6b918bf
--- /dev/null
+++ b/app/gegl/gimpoperationscreenmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationscreenmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_SCREEN_MODE_H__
+#define __GIMP_OPERATION_SCREEN_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_SCREEN_MODE (gimp_operation_screen_mode_get_type ())
+#define GIMP_OPERATION_SCREEN_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_SCREEN_MODE, GimpOperationScreenMode))
+#define GIMP_OPERATION_SCREEN_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_SCREEN_MODE, GimpOperationScreenModeClass))
+#define GIMP_IS_OPERATION_SCREEN_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_SCREEN_MODE))
+#define GIMP_IS_OPERATION_SCREEN_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_SCREEN_MODE))
+#define GIMP_OPERATION_SCREEN_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_SCREEN_MODE, GimpOperationScreenModeClass))
+
+
+typedef struct _GimpOperationScreenModeClass GimpOperationScreenModeClass;
+
+struct _GimpOperationScreenMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationScreenModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_screen_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_SCREEN_MODE_H__ */
diff --git a/app/gegl/gimpoperationsoftlightmode.c b/app/gegl/gimpoperationsoftlightmode.c
new file mode 100644
index 0000000..ea024b4
--- /dev/null
+++ b/app/gegl/gimpoperationsoftlightmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationsoftlightmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationsoftlightmode.h"
+
+
+static gboolean gimp_operation_softlight_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationSoftlightMode, gimp_operation_softlight_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_softlight_mode_class_init (GimpOperationSoftlightModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:softlight-mode";
+ operation_class->description = "GIMP softlight mode operation";
+
+ point_class->process = gimp_operation_softlight_mode_process;
+}
+
+static void
+gimp_operation_softlight_mode_init (GimpOperationSoftlightMode *self)
+{
+}
+
+static gboolean
+gimp_operation_softlight_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationsoftlightmode.h b/app/gegl/gimpoperationsoftlightmode.h
new file mode 100644
index 0000000..4e409f6
--- /dev/null
+++ b/app/gegl/gimpoperationsoftlightmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationsoftlightmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_SOFTLIGHT_MODE_H__
+#define __GIMP_OPERATION_SOFTLIGHT_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_SOFTLIGHT_MODE (gimp_operation_softlight_mode_get_type ())
+#define GIMP_OPERATION_SOFTLIGHT_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_SOFTLIGHT_MODE, GimpOperationSoftlightMode))
+#define GIMP_OPERATION_SOFTLIGHT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_SOFTLIGHT_MODE, GimpOperationSoftlightModeClass))
+#define GIMP_IS_OPERATION_SOFTLIGHT_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_SOFTLIGHT_MODE))
+#define GIMP_IS_OPERATION_SOFTLIGHT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_SOFTLIGHT_MODE))
+#define GIMP_OPERATION_SOFTLIGHT_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_SOFTLIGHT_MODE, GimpOperationSoftlightModeClass))
+
+
+typedef struct _GimpOperationSoftlightModeClass GimpOperationSoftlightModeClass;
+
+struct _GimpOperationSoftlightMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationSoftlightModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_softlight_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_SOFTLIGHT_MODE_H__ */
diff --git a/app/gegl/gimpoperationsubtractmode.c b/app/gegl/gimpoperationsubtractmode.c
new file mode 100644
index 0000000..c465c81
--- /dev/null
+++ b/app/gegl/gimpoperationsubtractmode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationsubtractmode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationsubtractmode.h"
+
+
+static gboolean gimp_operation_subtract_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationSubtractMode, gimp_operation_subtract_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_subtract_mode_class_init (GimpOperationSubtractModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:subtract-mode";
+ operation_class->description = "GIMP subtract mode operation";
+
+ point_class->process = gimp_operation_subtract_mode_process;
+}
+
+static void
+gimp_operation_subtract_mode_init (GimpOperationSubtractMode *self)
+{
+}
+
+static gboolean
+gimp_operation_subtract_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationsubtractmode.h b/app/gegl/gimpoperationsubtractmode.h
new file mode 100644
index 0000000..42d38ad
--- /dev/null
+++ b/app/gegl/gimpoperationsubtractmode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationsubtractmode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_SUBTRACT_MODE_H__
+#define __GIMP_OPERATION_SUBTRACT_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_SUBTRACT_MODE (gimp_operation_subtract_mode_get_type ())
+#define GIMP_OPERATION_SUBTRACT_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_SUBTRACT_MODE, GimpOperationSubtractMode))
+#define GIMP_OPERATION_SUBTRACT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_SUBTRACT_MODE, GimpOperationSubtractModeClass))
+#define GIMP_IS_OPERATION_SUBTRACT_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_SUBTRACT_MODE))
+#define GIMP_IS_OPERATION_SUBTRACT_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_SUBTRACT_MODE))
+#define GIMP_OPERATION_SUBTRACT_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_SUBTRACT_MODE, GimpOperationSubtractModeClass))
+
+
+typedef struct _GimpOperationSubtractModeClass GimpOperationSubtractModeClass;
+
+struct _GimpOperationSubtractMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationSubtractModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_subtract_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_SUBTRACT_MODE_H__ */
diff --git a/app/gegl/gimpoperationvaluemode.c b/app/gegl/gimpoperationvaluemode.c
new file mode 100644
index 0000000..77eb63c
--- /dev/null
+++ b/app/gegl/gimpoperationvaluemode.c
@@ -0,0 +1,88 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationvaluemode.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "gimp-gegl-types.h"
+
+#include "gimpoperationvaluemode.h"
+
+
+static gboolean gimp_operation_value_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi);
+
+
+G_DEFINE_TYPE (GimpOperationValueMode, gimp_operation_value_mode,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_value_mode_class_init (GimpOperationValueModeClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposerClass *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER_CLASS (klass);
+
+ operation_class->name = "gimp:value-mode";
+ operation_class->description = "GIMP value mode operation";
+
+ point_class->process = gimp_operation_value_mode_process;
+}
+
+static void
+gimp_operation_value_mode_init (GimpOperationValueMode *self)
+{
+}
+
+static gboolean
+gimp_operation_value_mode_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi)
+{
+ gfloat *in = in_buf;
+ gfloat *layer = aux_buf;
+ gfloat *out = out_buf;
+
+ while (samples--)
+ {
+ out[RED] = in[RED];
+ out[GREEN] = in[GREEN];
+ out[BLUE] = in[BLUE];
+ out[ALPHA] = in[ALPHA];
+
+ in += 4;
+ layer += 4;
+ out += 4;
+ }
+
+ return TRUE;
+}
diff --git a/app/gegl/gimpoperationvaluemode.h b/app/gegl/gimpoperationvaluemode.h
new file mode 100644
index 0000000..c81ae87
--- /dev/null
+++ b/app/gegl/gimpoperationvaluemode.h
@@ -0,0 +1,53 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationvaluemode.h
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GIMP_OPERATION_VALUE_MODE_H__
+#define __GIMP_OPERATION_VALUE_MODE_H__
+
+
+#include "gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_VALUE_MODE (gimp_operation_value_mode_get_type ())
+#define GIMP_OPERATION_VALUE_MODE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_VALUE_MODE, GimpOperationValueMode))
+#define GIMP_OPERATION_VALUE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_VALUE_MODE, GimpOperationValueModeClass))
+#define GIMP_IS_OPERATION_VALUE_MODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_VALUE_MODE))
+#define GIMP_IS_OPERATION_VALUE_MODE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_VALUE_MODE))
+#define GIMP_OPERATION_VALUE_MODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_VALUE_MODE, GimpOperationValueModeClass))
+
+
+typedef struct _GimpOperationValueModeClass GimpOperationValueModeClass;
+
+struct _GimpOperationValueMode
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationValueModeClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_value_mode_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __GIMP_OPERATION_VALUE_MODE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]