[gimp] app: move erase and anti-erase to layer-modes/
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: move erase and anti-erase to layer-modes/
- Date: Tue, 10 Jan 2017 23:24:58 +0000 (UTC)
commit 9142bb1805057384cafcfdedf3354bc6f2f12150
Author: Michael Natterer <mitch gimp org>
Date: Wed Jan 11 00:21:43 2017 +0100
app: move erase and anti-erase to layer-modes/
app/gegl/gimp-gegl-nodes.c | 4 +-
app/operations/Makefile.am | 4 -
app/operations/gimp-operations.c | 8 +-
app/operations/gimplayermodefunctions.c | 8 +-
app/operations/gimpoperationantierasemode.c | 131 --------------------
app/operations/gimpoperationantierasemode.h | 62 ---------
app/operations/layer-modes/Makefile.am | 6 +-
.../gimpoperationantierase.c} | 40 +++---
.../gimpoperationantierase.h} | 35 +++---
app/operations/layer-modes/gimpoperationerase.c | 131 ++++++++++++++++++++
app/operations/layer-modes/gimpoperationerase.h | 62 +++++++++
11 files changed, 246 insertions(+), 245 deletions(-)
---
diff --git a/app/gegl/gimp-gegl-nodes.c b/app/gegl/gimp-gegl-nodes.c
index 998b4cb..d16156d 100644
--- a/app/gegl/gimp-gegl-nodes.c
+++ b/app/gegl/gimp-gegl-nodes.c
@@ -312,7 +312,7 @@ gimp_gegl_mode_node_set_mode (GeglNode *node,
break;
case GIMP_LAYER_MODE_ERASE:
- operation = "gimp:erase-mode";
+ operation = "gimp:erase";
break;
case GIMP_LAYER_MODE_REPLACE:
@@ -320,7 +320,7 @@ gimp_gegl_mode_node_set_mode (GeglNode *node,
break;
case GIMP_LAYER_MODE_ANTI_ERASE:
- operation = "gimp:anti-erase-mode";
+ operation = "gimp:anti-erase";
break;
default:
diff --git a/app/operations/Makefile.am b/app/operations/Makefile.am
index fe36a51..919e447 100644
--- a/app/operations/Makefile.am
+++ b/app/operations/Makefile.am
@@ -113,12 +113,8 @@ libappoperations_a_SOURCES = \
gimpoperationgrainmergemode.h \
gimpoperationcolorerasemode.c \
gimpoperationcolorerasemode.h \
- gimpoperationerasemode.c \
- gimpoperationerasemode.h \
gimpoperationreplacemode.c \
gimpoperationreplacemode.h \
- gimpoperationantierasemode.c \
- gimpoperationantierasemode.h \
\
gimplayermodefunctions.c \
gimplayermodefunctions.h
diff --git a/app/operations/gimp-operations.c b/app/operations/gimp-operations.c
index be5207d..883e69f 100644
--- a/app/operations/gimp-operations.c
+++ b/app/operations/gimp-operations.c
@@ -105,9 +105,9 @@
#include "layer-modes/gimpoperationlchchroma.h"
#include "layer-modes/gimpoperationlchcolor.h"
#include "layer-modes/gimpoperationlchlightness.h"
-#include "gimpoperationerasemode.h"
+#include "layer-modes/gimpoperationerase.h"
#include "gimpoperationreplacemode.h"
-#include "gimpoperationantierasemode.h"
+#include "layer-modes/gimpoperationantierase.h"
void
@@ -181,9 +181,9 @@ gimp_operations_init (void)
g_type_class_ref (GIMP_TYPE_OPERATION_LCH_CHROMA);
g_type_class_ref (GIMP_TYPE_OPERATION_LCH_COLOR);
g_type_class_ref (GIMP_TYPE_OPERATION_LCH_LIGHTNESS);
- g_type_class_ref (GIMP_TYPE_OPERATION_ERASE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_ERASE);
g_type_class_ref (GIMP_TYPE_OPERATION_REPLACE_MODE);
- g_type_class_ref (GIMP_TYPE_OPERATION_ANTI_ERASE_MODE);
+ g_type_class_ref (GIMP_TYPE_OPERATION_ANTI_ERASE);
gimp_gegl_config_register ("gimp:brightness-contrast",
GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG);
diff --git a/app/operations/gimplayermodefunctions.c b/app/operations/gimplayermodefunctions.c
index 4a9f2a2..fec77cc 100644
--- a/app/operations/gimplayermodefunctions.c
+++ b/app/operations/gimplayermodefunctions.c
@@ -65,9 +65,9 @@
#include "layer-modes/gimpoperationlchchroma.h"
#include "layer-modes/gimpoperationlchcolor.h"
#include "layer-modes/gimpoperationlchlightness.h"
-#include "gimpoperationerasemode.h"
+#include "layer-modes/gimpoperationerase.h"
#include "gimpoperationreplacemode.h"
-#include "gimpoperationantierasemode.h"
+#include "layer-modes/gimpoperationantierase.h"
GimpLayerModeFunction
@@ -247,7 +247,7 @@ get_layer_mode_function (GimpLayerMode paint_mode,
break;
case GIMP_LAYER_MODE_ERASE:
- func = gimp_operation_erase_mode_process_pixels;
+ func = gimp_operation_erase_process_pixels;
break;
case GIMP_LAYER_MODE_REPLACE:
@@ -255,7 +255,7 @@ get_layer_mode_function (GimpLayerMode paint_mode,
break;
case GIMP_LAYER_MODE_ANTI_ERASE:
- func = gimp_operation_anti_erase_mode_process_pixels;
+ func = gimp_operation_anti_erase_process_pixels;
break;
default:
diff --git a/app/operations/layer-modes/Makefile.am b/app/operations/layer-modes/Makefile.am
index 4acc7ee..272d2e7 100644
--- a/app/operations/layer-modes/Makefile.am
+++ b/app/operations/layer-modes/Makefile.am
@@ -55,7 +55,11 @@ libapplayermodes_generic_a_sources = \
gimpoperationhsvcolor.c \
gimpoperationhsvcolor.h \
gimpoperationhsvvalue.c \
- gimpoperationhsvvalue.h
+ gimpoperationhsvvalue.h \
+ gimpoperationerase.c \
+ gimpoperationerase.h \
+ gimpoperationantierase.c \
+ gimpoperationantierase.h
libapplayermodes_sse2_a_sources = \
gimpoperationnormal-sse2.c
diff --git a/app/operations/gimpoperationerasemode.c b/app/operations/layer-modes/gimpoperationantierase.c
similarity index 77%
rename from app/operations/gimpoperationerasemode.c
rename to app/operations/layer-modes/gimpoperationantierase.c
index 8452954..fff71b1 100644
--- a/app/operations/gimpoperationerasemode.c
+++ b/app/operations/layer-modes/gimpoperationantierase.c
@@ -1,7 +1,7 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
- * gimpoperationerasemode.c
+ * gimpoperationantierase.c
* Copyright (C) 2008 Michael Natterer <mitch gimp org>
* 2012 Ville Sokk <ville sokk gmail com>
*
@@ -23,13 +23,13 @@
#include <gegl-plugin.h>
-#include "operations-types.h"
+#include "../operations-types.h"
-#include "gimpoperationerasemode.h"
+#include "gimpoperationantierase.h"
-static void prepare (GeglOperation *operation);
-static gboolean gimp_operation_erase_mode_process (GeglOperation *operation,
+static void gimp_operation_anti_erase_prepare (GeglOperation *operation);
+static gboolean gimp_operation_anti_erase_process (GeglOperation *operation,
void *in_buf,
void *aux_buf,
void *aux2_buf,
@@ -39,12 +39,12 @@ static gboolean gimp_operation_erase_mode_process (GeglOperation *operatio
gint level);
-G_DEFINE_TYPE (GimpOperationEraseMode, gimp_operation_erase_mode,
+G_DEFINE_TYPE (GimpOperationAntiErase, gimp_operation_anti_erase,
GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
static void
-gimp_operation_erase_mode_class_init (GimpOperationEraseModeClass *klass)
+gimp_operation_anti_erase_class_init (GimpOperationAntiEraseClass *klass)
{
GeglOperationClass *operation_class;
GeglOperationPointComposer3Class *point_class;
@@ -53,21 +53,21 @@ gimp_operation_erase_mode_class_init (GimpOperationEraseModeClass *klass)
point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass);
gegl_operation_class_set_keys (operation_class,
- "name", "gimp:erase-mode",
- "description", "GIMP erase mode operation",
+ "name", "gimp:anti-erase",
+ "description", "GIMP anti erase mode operation",
NULL);
- operation_class->prepare = prepare;
- point_class->process = gimp_operation_erase_mode_process;
+ operation_class->prepare = gimp_operation_anti_erase_prepare;
+ point_class->process = gimp_operation_anti_erase_process;
}
static void
-gimp_operation_erase_mode_init (GimpOperationEraseMode *self)
+gimp_operation_anti_erase_init (GimpOperationAntiErase *self)
{
}
static void
-prepare (GeglOperation *operation)
+gimp_operation_anti_erase_prepare (GeglOperation *operation)
{
const Babl *format = babl_format ("RGBA float");
@@ -78,7 +78,7 @@ prepare (GeglOperation *operation)
}
static gboolean
-gimp_operation_erase_mode_process (GeglOperation *operation,
+gimp_operation_anti_erase_process (GeglOperation *operation,
void *in_buf,
void *aux_buf,
void *aux2_buf,
@@ -89,11 +89,11 @@ gimp_operation_erase_mode_process (GeglOperation *operation,
{
gfloat opacity = GIMP_OPERATION_POINT_LAYER_MODE (operation)->opacity;
- return gimp_operation_erase_mode_process_pixels (in_buf, aux_buf, aux2_buf, out_buf, opacity, samples,
roi, level);
+ return gimp_operation_anti_erase_process_pixels (in_buf, aux_buf, aux2_buf, out_buf, opacity, samples,
roi, level);
}
gboolean
-gimp_operation_erase_mode_process_pixels (gfloat *in,
+gimp_operation_anti_erase_process_pixels (gfloat *in,
gfloat *layer,
gfloat *mask,
gfloat *out,
@@ -110,21 +110,21 @@ gimp_operation_erase_mode_process_pixels (gfloat *in,
gint b;
if (has_mask)
- value *= (*mask);
+ value *= *mask;
+
+ out[ALPHA] = in[ALPHA] + (1.0 - in[ALPHA]) * layer[ALPHA] * value;
for (b = RED; b < ALPHA; b++)
{
out[b] = in[b];
}
- out[ALPHA] = in[ALPHA] - in[ALPHA] * layer[ALPHA] * value;
-
in += 4;
layer += 4;
out += 4;
if (has_mask)
- mask ++;
+ mask++;
}
return TRUE;
diff --git a/app/operations/gimpoperationerasemode.h b/app/operations/layer-modes/gimpoperationantierase.h
similarity index 53%
rename from app/operations/gimpoperationerasemode.h
rename to app/operations/layer-modes/gimpoperationantierase.h
index de94703..0b4d3ba 100644
--- a/app/operations/gimpoperationerasemode.h
+++ b/app/operations/layer-modes/gimpoperationantierase.h
@@ -1,7 +1,7 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
- * gimpoperationerasemode.h
+ * gimpoperationantierase.h
* Copyright (C) 2008 Michael Natterer <mitch gimp org>
*
* This program is free software: you can redistribute it and/or modify
@@ -18,38 +18,38 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __GIMP_OPERATION_ERASE_MODE_H__
-#define __GIMP_OPERATION_ERASE_MODE_H__
+#ifndef __GIMP_OPERATION_ANTI_ERASE_H__
+#define __GIMP_OPERATION_ANTI_ERASE_H__
-#include "gimpoperationpointlayermode.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))
+#define GIMP_TYPE_OPERATION_ANTI_ERASE (gimp_operation_anti_erase_get_type ())
+#define GIMP_OPERATION_ANTI_ERASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj),
GIMP_TYPE_OPERATION_ANTI_ERASE, GimpOperationAntiErase))
+#define GIMP_OPERATION_ANTI_ERASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass),
GIMP_TYPE_OPERATION_ANTI_ERASE, GimpOperationAntiEraseClass))
+#define GIMP_IS_OPERATION_ANTI_ERASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj),
GIMP_TYPE_OPERATION_ANTI_ERASE))
+#define GIMP_IS_OPERATION_ANTI_ERASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),
GIMP_TYPE_OPERATION_ANTI_ERASE))
+#define GIMP_OPERATION_ANTI_ERASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj),
GIMP_TYPE_OPERATION_ANTI_ERASE, GimpOperationAntiEraseClass))
-typedef struct _GimpOperationEraseMode GimpOperationEraseMode;
-typedef struct _GimpOperationEraseModeClass GimpOperationEraseModeClass;
+typedef struct _GimpOperationAntiErase GimpOperationAntiErase;
+typedef struct _GimpOperationAntiEraseClass GimpOperationAntiEraseClass;
-struct _GimpOperationEraseMode
+struct _GimpOperationAntiErase
{
GimpOperationPointLayerMode parent_instance;
};
-struct _GimpOperationEraseModeClass
+struct _GimpOperationAntiEraseClass
{
GimpOperationPointLayerModeClass parent_class;
};
-GType gimp_operation_erase_mode_get_type (void) G_GNUC_CONST;
+GType gimp_operation_anti_erase_get_type (void) G_GNUC_CONST;
-gboolean gimp_operation_erase_mode_process_pixels (gfloat *in,
+gboolean gimp_operation_anti_erase_process_pixels (gfloat *in,
gfloat *layer,
gfloat *mask,
gfloat *out,
@@ -58,4 +58,5 @@ gboolean gimp_operation_erase_mode_process_pixels (gfloat *in,
const GeglRectangle *roi,
gint level);
-#endif /* __GIMP_OPERATION_ERASE_MODE_H__ */
+
+#endif /* __GIMP_OPERATION_ANTI_ERASE_H__ */
diff --git a/app/operations/layer-modes/gimpoperationerase.c b/app/operations/layer-modes/gimpoperationerase.c
new file mode 100644
index 0000000..138c2df
--- /dev/null
+++ b/app/operations/layer-modes/gimpoperationerase.c
@@ -0,0 +1,131 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationerase.c
+ * Copyright (C) 2008 Michael Natterer <mitch gimp org>
+ * 2012 Ville Sokk <ville sokk gmail com>
+ *
+ * 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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <gegl-plugin.h>
+
+#include "../operations-types.h"
+
+#include "gimpoperationerase.h"
+
+
+static void gimp_operation_erase_prepare (GeglOperation *operation);
+static gboolean gimp_operation_erase_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *aux2_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi,
+ gint level);
+
+
+G_DEFINE_TYPE (GimpOperationErase, gimp_operation_erase,
+ GIMP_TYPE_OPERATION_POINT_LAYER_MODE)
+
+
+static void
+gimp_operation_erase_class_init (GimpOperationEraseClass *klass)
+{
+ GeglOperationClass *operation_class;
+ GeglOperationPointComposer3Class *point_class;
+
+ operation_class = GEGL_OPERATION_CLASS (klass);
+ point_class = GEGL_OPERATION_POINT_COMPOSER3_CLASS (klass);
+
+ gegl_operation_class_set_keys (operation_class,
+ "name", "gimp:erase",
+ "description", "GIMP erase mode operation",
+ NULL);
+
+ operation_class->prepare = gimp_operation_erase_prepare;
+ point_class->process = gimp_operation_erase_process;
+}
+
+static void
+gimp_operation_erase_init (GimpOperationErase *self)
+{
+}
+
+static void
+gimp_operation_erase_prepare (GeglOperation *operation)
+{
+ const Babl *format = babl_format ("RGBA float");
+
+ gegl_operation_set_format (operation, "input", format);
+ gegl_operation_set_format (operation, "aux", format);
+ gegl_operation_set_format (operation, "aux2", babl_format ("Y float"));
+ gegl_operation_set_format (operation, "output", format);
+}
+
+static gboolean
+gimp_operation_erase_process (GeglOperation *operation,
+ void *in_buf,
+ void *aux_buf,
+ void *aux2_buf,
+ void *out_buf,
+ glong samples,
+ const GeglRectangle *roi,
+ gint level)
+{
+ gfloat opacity = GIMP_OPERATION_POINT_LAYER_MODE (operation)->opacity;
+
+ return gimp_operation_erase_process_pixels (in_buf, aux_buf, aux2_buf, out_buf, opacity, samples, roi,
level);
+}
+
+gboolean
+gimp_operation_erase_process_pixels (gfloat *in,
+ gfloat *layer,
+ gfloat *mask,
+ gfloat *out,
+ gfloat opacity,
+ glong samples,
+ const GeglRectangle *roi,
+ gint level)
+{
+ const gboolean has_mask = mask != NULL;
+
+ while (samples--)
+ {
+ gfloat value = opacity;
+ gint b;
+
+ if (has_mask)
+ value *= (*mask);
+
+ for (b = RED; b < ALPHA; b++)
+ {
+ out[b] = in[b];
+ }
+
+ out[ALPHA] = in[ALPHA] - in[ALPHA] * layer[ALPHA] * value;
+
+ in += 4;
+ layer += 4;
+ out += 4;
+
+ if (has_mask)
+ mask ++;
+ }
+
+ return TRUE;
+}
diff --git a/app/operations/layer-modes/gimpoperationerase.h b/app/operations/layer-modes/gimpoperationerase.h
new file mode 100644
index 0000000..19ac0ac
--- /dev/null
+++ b/app/operations/layer-modes/gimpoperationerase.h
@@ -0,0 +1,62 @@
+/* GIMP - The GNU Image Manipulation Program
+ * Copyright (C) 1995 Spencer Kimball and Peter Mattis
+ *
+ * gimpoperationerase.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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIMP_OPERATION_ERASE_H__
+#define __GIMP_OPERATION_ERASE_H__
+
+
+#include "../gimpoperationpointlayermode.h"
+
+
+#define GIMP_TYPE_OPERATION_ERASE (gimp_operation_erase_get_type ())
+#define GIMP_OPERATION_ERASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_OPERATION_ERASE,
GimpOperationErase))
+#define GIMP_OPERATION_ERASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_OPERATION_ERASE,
GimpOperationEraseClass))
+#define GIMP_IS_OPERATION_ERASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_OPERATION_ERASE))
+#define GIMP_IS_OPERATION_ERASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_OPERATION_ERASE))
+#define GIMP_OPERATION_ERASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_OPERATION_ERASE,
GimpOperationEraseClass))
+
+
+typedef struct _GimpOperationErase GimpOperationErase;
+typedef struct _GimpOperationEraseClass GimpOperationEraseClass;
+
+struct _GimpOperationErase
+{
+ GimpOperationPointLayerMode parent_instance;
+};
+
+struct _GimpOperationEraseClass
+{
+ GimpOperationPointLayerModeClass parent_class;
+};
+
+
+GType gimp_operation_erase_get_type (void) G_GNUC_CONST;
+
+gboolean gimp_operation_erase_process_pixels (gfloat *in,
+ gfloat *layer,
+ gfloat *mask,
+ gfloat *out,
+ gfloat opacity,
+ glong samples,
+ const GeglRectangle *roi,
+ gint level);
+
+
+#endif /* __GIMP_OPERATION_ERASE_MODE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]