diff --git a/app/base/Makefile.am b/app/base/Makefile.am index 59d31f6f5f..2c749fdfa4 100644 --- a/app/base/Makefile.am +++ b/app/base/Makefile.am @@ -22,8 +22,6 @@ libappbase_a_SOURCES = \ base-types.h \ base-utils.c \ base-utils.h \ - color-balance.c \ - color-balance.h \ cpercep.c \ cpercep.h \ gimplut.c \ diff --git a/app/base/base-types.h b/app/base/base-types.h index 881e8a37e0..2599e1ce16 100644 --- a/app/base/base-types.h +++ b/app/base/base-types.h @@ -49,7 +49,6 @@ typedef struct _GimpLut GimpLut; -typedef struct _ColorBalance ColorBalance; typedef struct _HueSaturation HueSaturation; typedef struct _PixelRegionIterator PixelRegionIterator; diff --git a/app/base/color-balance.c b/app/base/color-balance.c deleted file mode 100644 index 4a9fbcbf15..0000000000 --- a/app/base/color-balance.c +++ /dev/null @@ -1,181 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * 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 . - */ - -#include "config.h" - -#include -#include - -#include "libgimpcolor/gimpcolor.h" -#include "libgimpmath/gimpmath.h" - -#include "base-types.h" - -#include "color-balance.h" -#include "pixel-region.h" - - -/* local function prototypes */ - -static void color_balance_transfer_init (void); - - -/* private variables */ - -static gboolean transfer_initialized = FALSE; - -static gdouble highlights[256] = { 0 }; -static gdouble midtones[256] = { 0 }; -static gdouble shadows[256] = { 0 }; - - -/* public functions */ - -void -color_balance_init (ColorBalance *cb) -{ - GimpTransferMode range; - - g_return_if_fail (cb != NULL); - - for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++) - { - cb->cyan_red[range] = 0.0; - cb->magenta_green[range] = 0.0; - cb->yellow_blue[range] = 0.0; - } - - cb->preserve_luminosity = TRUE; -} - -void -color_balance_create_lookup_tables (ColorBalance *cb) -{ - gint i; - gint32 r_n, g_n, b_n; - - g_return_if_fail (cb != NULL); - - if (! transfer_initialized) - { - color_balance_transfer_init (); - transfer_initialized = TRUE; - } - - for (i = 0; i < 256; i++) - { - r_n = i; - g_n = i; - b_n = i; - - r_n += cb->cyan_red[GIMP_SHADOWS] * shadows[i]; - r_n += cb->cyan_red[GIMP_MIDTONES] * midtones[i]; - r_n += cb->cyan_red[GIMP_HIGHLIGHTS] * highlights[i]; - r_n = CLAMP0255 (r_n); - - g_n += cb->magenta_green[GIMP_SHADOWS] * shadows[i]; - g_n += cb->magenta_green[GIMP_MIDTONES] * midtones[i]; - g_n += cb->magenta_green[GIMP_HIGHLIGHTS] * highlights[i]; - g_n = CLAMP0255 (g_n); - - b_n += cb->yellow_blue[GIMP_SHADOWS] * shadows[i]; - b_n += cb->yellow_blue[GIMP_MIDTONES] * midtones[i]; - b_n += cb->yellow_blue[GIMP_HIGHLIGHTS] * highlights[i]; - b_n = CLAMP0255 (b_n); - - cb->r_lookup[i] = r_n; - cb->g_lookup[i] = g_n; - cb->b_lookup[i] = b_n; - } -} - -void -color_balance (ColorBalance *cb, - PixelRegion *srcPR, - PixelRegion *destPR) -{ - const guchar *src, *s; - guchar *dest, *d; - gboolean alpha; - gint r, g, b; - gint r_n, g_n, b_n; - gint w, h; - - h = srcPR->h; - src = srcPR->data; - dest = destPR->data; - alpha = pixel_region_has_alpha (srcPR); - - while (h--) - { - w = srcPR->w; - s = src; - d = dest; - - while (w--) - { - r = s[RED]; - g = s[GREEN]; - b = s[BLUE]; - - r_n = cb->r_lookup[r]; - g_n = cb->g_lookup[g]; - b_n = cb->b_lookup[b]; - - if (cb->preserve_luminosity) - { - gimp_rgb_to_hsl_int (&r_n, &g_n, &b_n); - b_n = gimp_rgb_to_l_int (r, g, b); - gimp_hsl_to_rgb_int (&r_n, &g_n, &b_n); - } - - d[RED] = r_n; - d[GREEN] = g_n; - d[BLUE] = b_n; - - if (alpha) - d[ALPHA] = s[ALPHA]; - - s += srcPR->bytes; - d += destPR->bytes; - } - - src += srcPR->rowstride; - dest += destPR->rowstride; - } -} - - -/* private functions */ - -static void -color_balance_transfer_init (void) -{ - gint i; - - for (i = 0; i < 256; i++) - { - static const gdouble a = 64, b = 85, scale = 1.785; - gdouble low = CLAMP ((i - b) / -a + .5, 0, 1) * scale; - gdouble mid = CLAMP ((i - b) / a + .5, 0, 1) * - CLAMP ((i + b - 255) / -a + .5, 0, 1) * scale; - - shadows[i] = low; - midtones[i] = mid; - highlights[255 - i] = low; - } -} diff --git a/app/base/color-balance.h b/app/base/color-balance.h deleted file mode 100644 index 5d462cfe78..0000000000 --- a/app/base/color-balance.h +++ /dev/null @@ -1,43 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * 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 . - */ - -#ifndef __COLOR_BALANCE_H__ -#define __COLOR_BALANCE_H__ - - -struct _ColorBalance -{ - gboolean preserve_luminosity; - - gdouble cyan_red[3]; - gdouble magenta_green[3]; - gdouble yellow_blue[3]; - - guchar r_lookup[256]; - guchar g_lookup[256]; - guchar b_lookup[256]; -}; - - -void color_balance_init (ColorBalance *cb); -void color_balance_create_lookup_tables (ColorBalance *cb); -void color_balance (ColorBalance *cb, - PixelRegion *srcPR, - PixelRegion *destPR); - - -#endif /* __COLOR_BALANCE_H__ */ diff --git a/app/core/Makefile.am b/app/core/Makefile.am index 81165acb92..a4ad4b204f 100644 --- a/app/core/Makefile.am +++ b/app/core/Makefile.am @@ -126,8 +126,6 @@ libappcore_a_sources = \ gimpdrawable-blend.h \ gimpdrawable-bucket-fill.c \ gimpdrawable-bucket-fill.h \ - gimpdrawable-color-balance.c \ - gimpdrawable-color-balance.h \ gimpdrawable-combine.c \ gimpdrawable-combine.h \ gimpdrawable-convert.c \ diff --git a/app/core/gimpdrawable-color-balance.c b/app/core/gimpdrawable-color-balance.c deleted file mode 100644 index 4342c68438..0000000000 --- a/app/core/gimpdrawable-color-balance.c +++ /dev/null @@ -1,95 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * 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 . - */ - -#include "config.h" - -#include - -#include "core-types.h" - -#include "base/color-balance.h" - -#include "gegl/gimpcolorbalanceconfig.h" - -/* temp */ -#include "gimp.h" -#include "gimpimage.h" - -#include "gimpdrawable.h" -#include "gimpdrawable-color-balance.h" -#include "gimpdrawable-operation.h" -#include "gimpdrawable-process.h" - -#include "gimp-intl.h" - - -/* public functions */ - -void -gimp_drawable_color_balance (GimpDrawable *drawable, - GimpProgress *progress, - GimpTransferMode range, - gdouble cyan_red, - gdouble magenta_green, - gdouble yellow_blue, - gboolean preserve_luminosity) -{ - GimpColorBalanceConfig *config; - - g_return_if_fail (GIMP_IS_DRAWABLE (drawable)); - g_return_if_fail (! gimp_drawable_is_indexed (drawable)); - g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (drawable))); - - config = g_object_new (GIMP_TYPE_COLOR_BALANCE_CONFIG, - "range", range, - "preserve-luminosity", preserve_luminosity, - NULL); - - g_object_set (config, - "cyan-red", cyan_red / 100.0, - "magenta-green", magenta_green / 100.0, - "yellow-blue", yellow_blue / 100.0, - NULL); - - if (gimp_use_gegl (gimp_item_get_image (GIMP_ITEM (drawable))->gimp)) - { - GeglNode *node; - - node = g_object_new (GEGL_TYPE_NODE, - "operation", "gimp:color-balance", - NULL); - gegl_node_set (node, - "config", config, - NULL); - - gimp_drawable_apply_operation (drawable, progress, - C_("undo-type", "Color Balance"), - node); - g_object_unref (node); - } - else - { - ColorBalance cruft; - - gimp_color_balance_config_to_cruft (config, &cruft); - - gimp_drawable_process (drawable, progress, C_("undo-type", "Color Balance"), - (PixelProcessorFunc) color_balance, &cruft); - } - - g_object_unref (config); -} diff --git a/app/core/gimpdrawable-color-balance.h b/app/core/gimpdrawable-color-balance.h deleted file mode 100644 index e4225ef937..0000000000 --- a/app/core/gimpdrawable-color-balance.h +++ /dev/null @@ -1,31 +0,0 @@ -/* GIMP - The GNU Image Manipulation Program - * Copyright (C) 1995 Spencer Kimball and Peter Mattis - * - * 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 . - */ - -#ifndef __GIMP_DRAWABLE_COLOR_BALANCE_H__ -#define __GIMP_DRAWABLE_COLOR_BALANCE_H__ - - -void gimp_drawable_color_balance (GimpDrawable *drawable, - GimpProgress *progress, - GimpTransferMode range, - gdouble cyan_red, - gdouble magenta_green, - gdouble yellow_blue, - gboolean preserve_luminosity); - - -#endif /* __GIMP_DRAWABLE_COLOR_BALANCE_H__ */ diff --git a/app/gegl/gimpcolorbalanceconfig.c b/app/gegl/gimpcolorbalanceconfig.c index 141bfa2b51..16b38170a8 100644 --- a/app/gegl/gimpcolorbalanceconfig.c +++ b/app/gegl/gimpcolorbalanceconfig.c @@ -29,9 +29,6 @@ #include "gimp-gegl-types.h" -/* temp cruft */ -#include "base/color-balance.h" - #include "gimpcolorbalanceconfig.h" @@ -359,27 +356,3 @@ gimp_color_balance_config_reset_range (GimpColorBalanceConfig *config) g_object_thaw_notify (G_OBJECT (config)); } - - -/* temp cruft */ - -void -gimp_color_balance_config_to_cruft (GimpColorBalanceConfig *config, - ColorBalance *cruft) -{ - GimpTransferMode range; - - g_return_if_fail (GIMP_IS_COLOR_BALANCE_CONFIG (config)); - g_return_if_fail (cruft != NULL); - - for (range = GIMP_SHADOWS; range <= GIMP_HIGHLIGHTS; range++) - { - cruft->cyan_red[range] = config->cyan_red[range] * 100.0; - cruft->magenta_green[range] = config->magenta_green[range] * 100.0; - cruft->yellow_blue[range] = config->yellow_blue[range] * 100.0; - } - - cruft->preserve_luminosity = config->preserve_luminosity; - - color_balance_create_lookup_tables (cruft); -} diff --git a/app/gegl/gimpcolorbalanceconfig.h b/app/gegl/gimpcolorbalanceconfig.h index 778a7769c1..d207db0278 100644 --- a/app/gegl/gimpcolorbalanceconfig.h +++ b/app/gegl/gimpcolorbalanceconfig.h @@ -58,9 +58,5 @@ GType gimp_color_balance_config_get_type (void) G_GNUC_CONST; void gimp_color_balance_config_reset_range (GimpColorBalanceConfig *config); -/* temp cruft */ -void gimp_color_balance_config_to_cruft (GimpColorBalanceConfig *config, - ColorBalance *cruft); - #endif /* __GIMP_COLOR_BALANCE_CONFIG_H__ */ diff --git a/app/pdb/color-cmds.c b/app/pdb/color-cmds.c index df08f81276..d6f1fbf792 100644 --- a/app/pdb/color-cmds.c +++ b/app/pdb/color-cmds.c @@ -23,7 +23,6 @@ #include "pdb-types.h" -#include "core/gimpdrawable-color-balance.h" #include "core/gimpdrawable-equalize.h" #include "core/gimpdrawable-histogram.h" #include "core/gimpdrawable-hue-saturation.h" @@ -33,6 +32,7 @@ #include "core/gimphistogram.h" #include "core/gimpparamspecs.h" #include "gegl/gimpbrightnesscontrastconfig.h" +#include "gegl/gimpcolorbalanceconfig.h" #include "gegl/gimpcolorizeconfig.h" #include "gegl/gimpcurvesconfig.h" #include "gegl/gimpdesaturateconfig.h" @@ -504,16 +504,29 @@ color_balance_invoker (GimpProcedure *procedure, if (success) { - if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) || - ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) || - gimp_drawable_is_indexed (drawable)) - success = FALSE; + if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && + gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)) + { + GObject *config = g_object_new (GIMP_TYPE_COLORIZE_CONFIG, + "range", transfer_mode, + "preserve-luminosity", preserve_lum, + NULL); - if (success) - gimp_drawable_color_balance (drawable, progress, - transfer_mode, - cyan_red, magenta_green, yellow_blue, - preserve_lum); + g_object_set (config, + "cyan-red", cyan_red / 100.0, + "magenta-green", magenta_green / 100.0, + "yellow-blue", yellow_blue / 100.0, + NULL); + + gimp_drawable_apply_operation_by_name (drawable, progress, + C_("undo-type", "Color Balance"), + "gimp:color-balance", + config); + + g_object_unref (config); + } + else + success = FALSE; } return gimp_procedure_get_return_values (procedure, success, diff --git a/app/tools/gimpcolorbalancetool.c b/app/tools/gimpcolorbalancetool.c index 8b701f65e1..5351842cb0 100644 --- a/app/tools/gimpcolorbalancetool.c +++ b/app/tools/gimpcolorbalancetool.c @@ -27,8 +27,6 @@ #include "tools-types.h" -#include "base/color-balance.h" - #include "gegl/gimpcolorbalanceconfig.h" #include "core/gimpdrawable.h" @@ -47,15 +45,12 @@ /* local function prototypes */ -static void gimp_color_balance_tool_finalize (GObject *object); - static gboolean gimp_color_balance_tool_initialize (GimpTool *tool, GimpDisplay *display, GError **error); static GeglNode * gimp_color_balance_tool_get_operation (GimpImageMapTool *im_tool, GObject **config); -static void gimp_color_balance_tool_map (GimpImageMapTool *im_tool); static void gimp_color_balance_tool_dialog (GimpImageMapTool *im_tool); static void gimp_color_balance_tool_reset (GimpImageMapTool *im_tool); @@ -102,12 +97,9 @@ gimp_color_balance_tool_register (GimpToolRegisterCallback callback, static void gimp_color_balance_tool_class_init (GimpColorBalanceToolClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass); GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass); - object_class->finalize = gimp_color_balance_tool_finalize; - tool_class->initialize = gimp_color_balance_tool_initialize; im_tool_class->dialog_desc = _("Adjust Color Balance"); @@ -116,7 +108,6 @@ gimp_color_balance_tool_class_init (GimpColorBalanceToolClass *klass) im_tool_class->export_dialog_title = _("Export Color Balance Settings"); im_tool_class->get_operation = gimp_color_balance_tool_get_operation; - im_tool_class->map = gimp_color_balance_tool_map; im_tool_class->dialog = gimp_color_balance_tool_dialog; im_tool_class->reset = gimp_color_balance_tool_reset; } @@ -124,24 +115,6 @@ gimp_color_balance_tool_class_init (GimpColorBalanceToolClass *klass) static void gimp_color_balance_tool_init (GimpColorBalanceTool *cb_tool) { - GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (cb_tool); - - cb_tool->color_balance = g_slice_new0 (ColorBalance); - - color_balance_init (cb_tool->color_balance); - - im_tool->apply_func = (GimpImageMapApplyFunc) color_balance; - im_tool->apply_data = cb_tool->color_balance; -} - -static void -gimp_color_balance_tool_finalize (GObject *object) -{ - GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (object); - - g_slice_free (ColorBalance, cb_tool->color_balance); - - G_OBJECT_CLASS (parent_class)->finalize (object); } static gboolean @@ -194,14 +167,6 @@ gimp_color_balance_tool_get_operation (GimpImageMapTool *im_tool, return node; } -static void -gimp_color_balance_tool_map (GimpImageMapTool *image_map_tool) -{ - GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (image_map_tool); - - gimp_color_balance_config_to_cruft (cb_tool->config, cb_tool->color_balance); -} - /**************************/ /* Color Balance dialog */ diff --git a/app/tools/gimpcolorbalancetool.h b/app/tools/gimpcolorbalancetool.h index 8974750aec..3f6d89102d 100644 --- a/app/tools/gimpcolorbalancetool.h +++ b/app/tools/gimpcolorbalancetool.h @@ -39,7 +39,6 @@ struct _GimpColorBalanceTool GimpImageMapTool parent_instance; GimpColorBalanceConfig *config; - ColorBalance *color_balance; /* dialog */ GtkWidget *range_radio; diff --git a/tools/pdbgen/pdb/color.pdb b/tools/pdbgen/pdb/color.pdb index 66c1f05402..b1a0422314 100644 --- a/tools/pdbgen/pdb/color.pdb +++ b/tools/pdbgen/pdb/color.pdb @@ -540,19 +540,32 @@ HELP ); %invoke = ( - headers => [ qw("core/gimpdrawable-color-balance.h") ], + headers => [ qw("gegl/gimpcolorbalanceconfig.h") ], code => <<'CODE' { - if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) || - ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) || - gimp_drawable_is_indexed (drawable)) - success = FALSE; + if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && + gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)) + { + GObject *config = g_object_new (GIMP_TYPE_COLORIZE_CONFIG, + "range", transfer_mode, + "preserve-luminosity", preserve_lum, + NULL); - if (success) - gimp_drawable_color_balance (drawable, progress, - transfer_mode, - cyan_red, magenta_green, yellow_blue, - preserve_lum); + g_object_set (config, + "cyan-red", cyan_red / 100.0, + "magenta-green", magenta_green / 100.0, + "yellow-blue", yellow_blue / 100.0, + NULL); + + gimp_drawable_apply_operation_by_name (drawable, progress, + C_("undo-type", "Color Balance"), + "gimp:color-balance", + config); + + g_object_unref (config); + } + else + success = FALSE; } CODE );