app: replace the color balance tool by a generic filter action

Move the color balance GUI to a custom gimppropgui function.
This commit is contained in:
Michael Natterer 2017-06-05 01:16:50 +02:00
parent 34d302e6e4
commit 757ca64e58
11 changed files with 191 additions and 335 deletions

View File

@ -208,6 +208,11 @@ static const GimpStringActionEntry filters_interactive_actions[] =
"gegl:checkerboard",
GIMP_HELP_FILTER_CHECKERBOARD },
{ "filters-color-balance", GIMP_ICON_TOOL_COLOR_BALANCE,
NC_("filters-action", "Color _Balance..."), NULL, NULL,
"gimp:color-balance",
GIMP_HELP_TOOL_COLOR_BALANCE },
{ "filters-color-exchange", GIMP_ICON_GEGL,
NC_("filters-action", "_Color Exchange..."), NULL, NULL,
"gegl:color-exchange",
@ -788,6 +793,7 @@ filters_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("filters-cartoon", writable);
SET_SENSITIVE ("filters-channel-mixer", writable);
SET_SENSITIVE ("filters-checkerboard", writable);
SET_SENSITIVE ("filters-color-balance", writable && !gray);
SET_SENSITIVE ("filters-color-enhance", writable && !gray);
SET_SENSITIVE ("filters-color-exchange", writable);
SET_SENSITIVE ("filters-colorize", writable && !gray);

View File

@ -52,8 +52,6 @@ libapptools_a_sources = \
gimpcoloroptions.h \
gimpcolortool.c \
gimpcolortool.h \
gimpcolorbalancetool.c \
gimpcolorbalancetool.h \
gimpcolorpickeroptions.c \
gimpcolorpickeroptions.h \
gimpcolorpickertool.c \

View File

@ -46,7 +46,6 @@
#include "gimpbycolorselecttool.h"
#include "gimpcagetool.h"
#include "gimpclonetool.h"
#include "gimpcolorbalancetool.h"
#include "gimpcolorpickertool.h"
#include "gimpconvolvetool.h"
#include "gimpcroptool.h"
@ -176,7 +175,6 @@ gimp_tools_init (Gimp *gimp)
/* color tools */
gimp_color_balance_tool_register,
gimp_hue_saturation_tool_register,
gimp_brightness_contrast_tool_register,
gimp_threshold_tool_register,

View File

@ -1,275 +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 <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include <string.h>
#include <gegl.h>
#include <gtk/gtk.h>
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "tools-types.h"
#include "operations/gimpcolorbalanceconfig.h"
#include "core/gimpdrawable.h"
#include "core/gimperror.h"
#include "core/gimpimage.h"
#include "widgets/gimphelp-ids.h"
#include "widgets/gimppropwidgets.h"
#include "widgets/gimpspinscale.h"
#include "display/gimpdisplay.h"
#include "gimpcolorbalancetool.h"
#include "gimpfilteroptions.h"
#include "gimp-intl.h"
/* local function prototypes */
static gboolean gimp_color_balance_tool_initialize (GimpTool *tool,
GimpDisplay *display,
GError **error);
static gchar * gimp_color_balance_tool_get_operation (GimpFilterTool *filter_tool,
gchar **title,
gchar **description,
gchar **undo_desc,
gchar **icon_name,
gchar **help_id,
gboolean *has_settings,
gchar **settings_folder,
gchar **import_dialog_title,
gchar **export_dialog_title);
static void gimp_color_balance_tool_dialog (GimpFilterTool *filter_tool);
static void gimp_color_balance_tool_reset (GimpFilterTool *filter_tool);
static void color_balance_range_reset_callback (GtkWidget *widget,
GimpFilterTool *filter_tool);
G_DEFINE_TYPE (GimpColorBalanceTool, gimp_color_balance_tool,
GIMP_TYPE_FILTER_TOOL)
#define parent_class gimp_color_balance_tool_parent_class
void
gimp_color_balance_tool_register (GimpToolRegisterCallback callback,
gpointer data)
{
(* callback) (GIMP_TYPE_COLOR_BALANCE_TOOL,
GIMP_TYPE_FILTER_OPTIONS, NULL,
0,
"gimp-color-balance-tool",
_("Color Balance"),
_("Color Balance Tool: Adjust color distribution"),
N_("Color _Balance..."), NULL,
NULL, GIMP_HELP_TOOL_COLOR_BALANCE,
GIMP_ICON_TOOL_COLOR_BALANCE,
data);
}
static void
gimp_color_balance_tool_class_init (GimpColorBalanceToolClass *klass)
{
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
tool_class->initialize = gimp_color_balance_tool_initialize;
filter_tool_class->get_operation = gimp_color_balance_tool_get_operation;
filter_tool_class->dialog = gimp_color_balance_tool_dialog;
filter_tool_class->reset = gimp_color_balance_tool_reset;
}
static void
gimp_color_balance_tool_init (GimpColorBalanceTool *cb_tool)
{
}
static gboolean
gimp_color_balance_tool_initialize (GimpTool *tool,
GimpDisplay *display,
GError **error)
{
GimpImage *image = gimp_display_get_image (display);
GimpDrawable *drawable = gimp_image_get_active_drawable (image);
if (! drawable)
return FALSE;
if (! gimp_drawable_is_rgb (drawable))
{
g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
_("Color Balance operates only on RGB color layers."));
return FALSE;
}
return GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error);
}
static gchar *
gimp_color_balance_tool_get_operation (GimpFilterTool *filter_tool,
gchar **title,
gchar **description,
gchar **undo_desc,
gchar **icon_name,
gchar **help_id,
gboolean *has_settings,
gchar **settings_folder,
gchar **import_dialog_title,
gchar **export_dialog_title)
{
*description = g_strdup (_("Adjust Color Balance"));
*has_settings = TRUE;
*settings_folder = g_strdup ("color-balance");
*import_dialog_title = g_strdup (_("Import Color Balance Settings"));
*export_dialog_title = g_strdup (_("Export Color Balance Settings"));
return g_strdup ("gimp:color-balance");
}
/**************************/
/* Color Balance dialog */
/**************************/
static void
create_levels_scale (GObject *config,
const gchar *property_name,
const gchar *left,
const gchar *right,
GtkWidget *table,
gint col)
{
GtkWidget *label;
GtkWidget *scale;
label = gtk_label_new (left);
gtk_label_set_xalign (GTK_LABEL (label), 1.0);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, col, col + 1,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
gtk_widget_show (label);
scale = gimp_prop_spin_scale_new (config, property_name,
NULL, 0.01, 0.1, 0);
gimp_spin_scale_set_label (GIMP_SPIN_SCALE (scale), NULL);
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
gtk_table_attach_defaults (GTK_TABLE (table), scale, 1, 2, col, col + 1);
gtk_widget_show (scale);
label = gtk_label_new (right);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_table_attach (GTK_TABLE (table), label, 2, 3, col, col + 1,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
gtk_widget_show (label);
}
static void
gimp_color_balance_tool_dialog (GimpFilterTool *filter_tool)
{
GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (filter_tool);
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *table;
GtkWidget *button;
GtkWidget *frame;
main_vbox = gimp_filter_tool_dialog_get_vbox (filter_tool);
frame = gimp_prop_enum_radio_frame_new (filter_tool->config, "range",
_("Select Range to Adjust"),
0, 0);
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
frame = gimp_frame_new (_("Adjust Color Levels"));
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
gtk_widget_show (vbox);
/* The table containing sliders */
table = gtk_table_new (3, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
gtk_widget_show (table);
create_levels_scale (filter_tool->config, "cyan-red",
_("Cyan"), _("Red"),
table, 0);
create_levels_scale (filter_tool->config, "magenta-green",
_("Magenta"), _("Green"),
table, 1);
create_levels_scale (filter_tool->config, "yellow-blue",
_("Yellow"), _("Blue"),
table, 2);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
button = gtk_button_new_with_mnemonic (_("R_eset Range"));
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
g_signal_connect (button, "clicked",
G_CALLBACK (color_balance_range_reset_callback),
cb_tool);
button = gimp_prop_check_button_new (filter_tool->config,
"preserve-luminosity",
_("Preserve _luminosity"));
gtk_box_pack_end (GTK_BOX (main_vbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
}
static void
gimp_color_balance_tool_reset (GimpFilterTool *filter_tool)
{
GimpTransferMode range;
g_object_get (filter_tool->config,
"range", &range,
NULL);
GIMP_FILTER_TOOL_CLASS (parent_class)->reset (filter_tool);
g_object_set (filter_tool->config,
"range", range,
NULL);
}
static void
color_balance_range_reset_callback (GtkWidget *widget,
GimpFilterTool *filter_tool)
{
gimp_color_balance_config_reset_range (GIMP_COLOR_BALANCE_CONFIG (filter_tool->config));
}

View File

@ -1,54 +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 <http://www.gnu.org/licenses/>.
*/
#ifndef __GIMP_COLOR_BALANCE_TOOL_H__
#define __GIMP_COLOR_BALANCE_TOOL_H__
#include "gimpfiltertool.h"
#define GIMP_TYPE_COLOR_BALANCE_TOOL (gimp_color_balance_tool_get_type ())
#define GIMP_COLOR_BALANCE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_BALANCE_TOOL, GimpColorBalanceTool))
#define GIMP_COLOR_BALANCE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_BALANCE_TOOL, GimpColorBalanceToolClass))
#define GIMP_IS_COLOR_BALANCE_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_BALANCE_TOOL))
#define GIMP_COLOR_BALANCE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_COLOR_BALANCE_TOOL, GimpColorBalanceToolClass))
#define GIMP_IS_COLOR_BALANCE_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_COLOR_BALANCE_TOOL))
#define GIMP_COLOR_BALANCE_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_COLOR_BALANCE_TOOL, GimpColorBalanceToolClass))
typedef struct _GimpColorBalanceTool GimpColorBalanceTool;
typedef struct _GimpColorBalanceToolClass GimpColorBalanceToolClass;
struct _GimpColorBalanceTool
{
GimpFilterTool parent_instance;
};
struct _GimpColorBalanceToolClass
{
GimpFilterToolClass parent_class;
};
void gimp_color_balance_tool_register (GimpToolRegisterCallback callback,
gpointer data);
GType gimp_color_balance_tool_get_type (void) G_GNUC_CONST;
#endif /* __GIMP_COLOR_BALANCE_TOOL_H__ */

View File

@ -301,6 +301,8 @@ libappwidgets_a_sources = \
gimpprogressdialog.h \
gimppropgui.c \
gimppropgui.h \
gimppropgui-color-balance.c \
gimppropgui-color-balance.h \
gimppropgui-constructors.c \
gimppropgui-constructors.h \
gimppropgui-eval.c \

View File

@ -0,0 +1,144 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* gimppropgui-color-balance.c
*
* 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.h>
#include <gegl-paramspecs.h>
#include <gtk/gtk.h>
#include "libgimpcolor/gimpcolor.h"
#include "libgimpbase/gimpbase.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "widgets-types.h"
#include "operations/gimpcolorbalanceconfig.h"
#include "gimppropgui.h"
#include "gimppropgui-color-balance.h"
#include "gimppropwidgets.h"
#include "gimpspinscale.h"
#include "gimp-intl.h"
static void
create_levels_scale (GObject *config,
const gchar *property_name,
const gchar *left,
const gchar *right,
GtkWidget *table,
gint col)
{
GtkWidget *label;
GtkWidget *scale;
label = gtk_label_new (left);
gtk_label_set_xalign (GTK_LABEL (label), 1.0);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, col, col + 1,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
gtk_widget_show (label);
scale = gimp_prop_spin_scale_new (config, property_name,
NULL, 0.01, 0.1, 0);
gimp_spin_scale_set_label (GIMP_SPIN_SCALE (scale), NULL);
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
gtk_table_attach_defaults (GTK_TABLE (table), scale, 1, 2, col, col + 1);
gtk_widget_show (scale);
label = gtk_label_new (right);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_table_attach (GTK_TABLE (table), label, 2, 3, col, col + 1,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
gtk_widget_show (label);
}
GtkWidget *
_gimp_prop_gui_new_color_balance (GObject *config,
GParamSpec **param_specs,
guint n_param_specs,
GeglRectangle *area,
GimpContext *context,
GimpCreatePickerFunc create_picker_func,
gpointer picker_creator)
{
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *table;
GtkWidget *button;
GtkWidget *frame;
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
frame = gimp_prop_enum_radio_frame_new (config, "range",
_("Select Range to Adjust"),
0, 0);
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
frame = gimp_frame_new (_("Adjust Color Levels"));
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
gtk_widget_show (vbox);
/* The table containing sliders */
table = gtk_table_new (3, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
gtk_widget_show (table);
create_levels_scale (config, "cyan-red",
_("Cyan"), _("Red"),
table, 0);
create_levels_scale (config, "magenta-green",
_("Magenta"), _("Green"),
table, 1);
create_levels_scale (config, "yellow-blue",
_("Yellow"), _("Blue"),
table, 2);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
button = gtk_button_new_with_mnemonic (_("R_eset Range"));
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gimp_color_balance_config_reset_range),
config);
button = gimp_prop_check_button_new (config,
"preserve-luminosity",
_("Preserve _luminosity"));
gtk_box_pack_end (GTK_BOX (main_vbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
return main_vbox;
}

View File

@ -0,0 +1,34 @@
/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis
*
* gimppropgui-color-balance.h
*
* 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_PROP_GUI_COLOR_BALANCE_H__
#define __GIMP_PROP_GUI_COLOR_BALANCE_H__
GtkWidget *
_gimp_prop_gui_new_color_balance (GObject *config,
GParamSpec **param_specs,
guint n_param_specs,
GeglRectangle *area,
GimpContext *context,
GimpCreatePickerFunc create_picker_func,
gpointer picker_creator);
#endif /* __GIMP_PROP_GUI_COLOR_BALANCE_H__ */

View File

@ -43,6 +43,7 @@
#include "gimpmessagebox.h"
#include "gimpspinscale.h"
#include "gimppropgui.h"
#include "gimppropgui-color-balance.h"
#include "gimppropgui-constructors.h"
#include "gimppropgui-eval.h"
#include "gimppropwidgets.h"
@ -431,6 +432,8 @@ static const struct
gui_new_funcs[] =
{
{ "GimpColorBalanceConfig",
_gimp_prop_gui_new_color_balance },
{ "GimpGegl-gegl-color-rotate-config",
_gimp_prop_gui_new_color_rotate },
{ "GimpGegl-gegl-convolution-matrix-config",

View File

@ -556,7 +556,7 @@
</menu>
<menu action="colors-menu" name="Colors">
<menuitem action="tools-color-balance" />
<menuitem action="filters-color-balance" />
<menuitem action="filters-color-temperature" />
<menuitem action="filters-hue-chroma" />
<menuitem action="tools-hue-saturation" />

View File

@ -381,7 +381,6 @@ app/tools/gimpcageoptions.c
app/tools/gimpcagetool.c
app/tools/gimpcloneoptions-gui.c
app/tools/gimpclonetool.c
app/tools/gimpcolorbalancetool.c
app/tools/gimpcoloroptions.c
app/tools/gimpcolorpickeroptions.c
app/tools/gimpcolorpickertool.c
@ -537,6 +536,7 @@ app/widgets/gimppdbdialog.c
app/widgets/gimppickablepopup.c
app/widgets/gimppluginview.c
app/widgets/gimpprogressdialog.c
app/widgets/gimppropgui-color-balance.c
app/widgets/gimppropgui-constructors.c
app/widgets/gimppropgui.c
app/widgets/gimppropwidgets.c