gimp r24566 - in trunk: . app/gegl app/tools
- From: mitch svn gnome org
- To: svn-commits-list gnome org
- Subject: gimp r24566 - in trunk: . app/gegl app/tools
- Date: Mon, 7 Jan 2008 21:39:05 +0000 (GMT)
Author: mitch
Date: Mon Jan 7 21:39:05 2008
New Revision: 24566
URL: http://svn.gnome.org/viewvc/gimp?rev=24566&view=rev
Log:
2008-01-07 Michael Natterer <mitch gimp org>
* app/gegl/gimpoperationlevels.[ch]: add properties, some cleanup.
* app/tools/gimplevelstool.c: use gegl_node_set() instead of
accessing the operation directly.
Modified:
trunk/ChangeLog
trunk/app/gegl/gimpoperationlevels.c
trunk/app/gegl/gimpoperationlevels.h
trunk/app/tools/gimplevelstool.c
Modified: trunk/app/gegl/gimpoperationlevels.c
==============================================================================
--- trunk/app/gegl/gimpoperationlevels.c (original)
+++ trunk/app/gegl/gimpoperationlevels.c Mon Jan 7 21:39:05 2008
@@ -37,9 +37,12 @@
enum
{
PROP_0,
- PROP_HUE,
- PROP_SATURATION,
- PROP_LIGHTNESS
+ PROP_CHANNEL,
+ PROP_GAMMA,
+ PROP_LOW_INPUT,
+ PROP_HIGH_INPUT,
+ PROP_LOW_OUTPUT,
+ PROP_HIGH_OUTPUT
};
@@ -77,11 +80,74 @@
point_class->process = gimp_operation_levels_process;
gegl_operation_class_set_name (operation_class, "gimp-levels");
+
+ g_object_class_install_property (object_class, PROP_CHANNEL,
+ g_param_spec_enum ("channel",
+ "Channel",
+ "The affected channel",
+ GIMP_TYPE_HISTOGRAM_CHANNEL,
+ GIMP_HISTOGRAM_VALUE,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_GAMMA,
+ g_param_spec_float ("gamma",
+ "Gamma",
+ "Gamma",
+ 0.1, 10.0, 1.0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_LOW_INPUT,
+ g_param_spec_float ("low-input",
+ "Low Input",
+ "Low Input",
+ 0.0, 1.0, 0.0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_HIGH_INPUT,
+ g_param_spec_float ("high-input",
+ "High Input",
+ "High Input",
+ 0.0, 1.0, 1.0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_LOW_OUTPUT,
+ g_param_spec_float ("low-output",
+ "Low Output",
+ "Low Output",
+ 0.0, 1.0, 0.0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_HIGH_OUTPUT,
+ g_param_spec_float ("high-output",
+ "High Output",
+ "High Output",
+ 0.0, 1.0, 1.0,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
}
static void
gimp_operation_levels_init (GimpOperationLevels *self)
{
+ GimpHistogramChannel channel;
+
+ self->channel = GIMP_HISTOGRAM_VALUE;
+
+ for (channel = GIMP_HISTOGRAM_VALUE;
+ channel <= GIMP_HISTOGRAM_ALPHA;
+ channel++)
+ {
+ self->gamma[channel] = 1.0;
+ self->low_input[channel] = 0.0;
+ self->high_input[channel] = 1.0;
+ self->low_output[channel] = 0.0;
+ self->high_output[channel] = 1.0;
+ }
}
static void
@@ -90,10 +156,34 @@
GValue *value,
GParamSpec *pspec)
{
- /* GimpOperationLevels *self = GIMP_OPERATION_LEVELS (object); */
+ GimpOperationLevels *self = GIMP_OPERATION_LEVELS (object);
switch (property_id)
{
+ case PROP_CHANNEL:
+ g_value_set_enum (value, self->channel);
+ break;
+
+ case PROP_GAMMA:
+ g_value_set_float (value, self->gamma[self->channel]);
+ break;
+
+ case PROP_LOW_INPUT:
+ g_value_set_float (value, self->low_input[self->channel]);
+ break;
+
+ case PROP_HIGH_INPUT:
+ g_value_set_float (value, self->high_input[self->channel]);
+ break;
+
+ case PROP_LOW_OUTPUT:
+ g_value_set_float (value, self->low_output[self->channel]);
+ break;
+
+ case PROP_HIGH_OUTPUT:
+ g_value_set_float (value, self->high_output[self->channel]);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -106,10 +196,34 @@
const GValue *value,
GParamSpec *pspec)
{
- /* GimpOperationLevels *self = GIMP_OPERATION_LEVELS (object); */
+ GimpOperationLevels *self = GIMP_OPERATION_LEVELS (object);
switch (property_id)
{
+ case PROP_CHANNEL:
+ self->channel = g_value_get_enum (value);
+ break;
+
+ case PROP_GAMMA:
+ self->gamma[self->channel] = g_value_get_float (value);
+ break;
+
+ case PROP_LOW_INPUT:
+ self->low_input[self->channel] = g_value_get_float (value);
+ break;
+
+ case PROP_HIGH_INPUT:
+ self->high_input[self->channel] = g_value_get_float (value);
+ break;
+
+ case PROP_LOW_OUTPUT:
+ self->low_output[self->channel] = g_value_get_float (value);
+ break;
+
+ case PROP_HIGH_OUTPUT:
+ self->high_output[self->channel] = g_value_get_float (value);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
@@ -118,21 +232,17 @@
static inline gfloat
gimp_operation_levels_map (gfloat value,
+ gfloat gamma,
gfloat low_input,
gfloat high_input,
- gfloat gamma,
gfloat low_output,
gfloat high_output)
{
/* determine input intensity */
if (high_input != low_input)
- {
- value = (value - low_input) / (high_input - low_input);
- }
+ value = (value - low_input) / (high_input - low_input);
else
- {
- value = (value - low_input);
- }
+ value = (value - low_input);
if (gamma != 0.0)
{
@@ -171,18 +281,18 @@
gfloat value;
value = gimp_operation_levels_map (src[channel],
+ self->gamma[channel + 1],
self->low_input[channel + 1],
self->high_input[channel + 1],
- self->gamma[channel + 1],
self->low_output[channel + 1],
self->high_output[channel + 1]);
/* don't apply the overall curve to the alpha channel */
if (channel != 3)
value = gimp_operation_levels_map (value,
+ self->gamma[0],
self->low_input[0],
self->high_input[0],
- self->gamma[0],
self->low_output[0],
self->high_output[0]);
Modified: trunk/app/gegl/gimpoperationlevels.h
==============================================================================
--- trunk/app/gegl/gimpoperationlevels.h (original)
+++ trunk/app/gegl/gimpoperationlevels.h Mon Jan 7 21:39:05 2008
@@ -40,6 +40,8 @@
{
GeglOperationPointFilter parent_instance;
+ GimpHistogramChannel channel;
+
gfloat gamma[5];
gfloat low_input[5];
Modified: trunk/app/tools/gimplevelstool.c
==============================================================================
--- trunk/app/tools/gimplevelstool.c (original)
+++ trunk/app/tools/gimplevelstool.c Mon Jan 7 21:39:05 2008
@@ -37,8 +37,6 @@
#include "base/gimplut.h"
#include "base/levels.h"
-#include "gegl/gimpoperationlevels.h"
-
#include "core/gimpdrawable.h"
#include "core/gimpdrawable-histogram.h"
#include "core/gimpimage.h"
@@ -270,28 +268,25 @@
if (image_map_tool->operation)
{
- GimpOperationLevels *levels;
- Levels *l;
+ Levels *levels = tool->levels;
GimpHistogramChannel channel;
- g_object_get (image_map_tool->operation, "gegl-operation", &levels, NULL);
-
- l = tool->levels;
-
for (channel = GIMP_HISTOGRAM_VALUE;
channel <= GIMP_HISTOGRAM_ALPHA;
channel++)
{
- levels->gamma[channel] = l->gamma[channel];
-
- levels->low_input[channel] = l->low_input[channel] / 255.0;
- levels->high_input[channel] = l->high_input[channel] / 255.0;
+ gegl_node_set (image_map_tool->operation,
+ "channel", channel,
+ NULL);
- levels->low_output[channel] = l->low_output[channel] / 255.0;
- levels->high_output[channel] = l->high_output[channel] / 255.0;
+ gegl_node_set (image_map_tool->operation,
+ "gamma", levels->gamma[channel],
+ "low-input", levels->low_input[channel] / 255.0,
+ "high-input", levels->high_input[channel] / 255.0,
+ "low-output", levels->low_output[channel] / 255.0,
+ "high-output", levels->high_output[channel] / 255.0,
+ NULL);
}
-
- g_object_unref (levels);
}
gimp_lut_setup (tool->lut,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]