app: add virtual function GimpFilterTool::config_notify()
and call it from GimpFilterTool's "notify" callback. Remove signal connections from all subblasses and instead implement ::config_notify(). The config object belongs to GimpFilterTool, and only GimpFilterTool should know when it's created and can be connected to.
This commit is contained in:
parent
9e55fb8ecf
commit
00a9659c28
5 changed files with 119 additions and 125 deletions
|
|
@ -62,8 +62,6 @@
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_curves_tool_constructed (GObject *object);
|
||||
|
||||
static gboolean gimp_curves_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
GError **error);
|
||||
|
|
@ -93,6 +91,9 @@ static gchar * gimp_curves_tool_get_operation (GimpFilterTool *filter
|
|||
gchar **export_dialog_title);
|
||||
static void gimp_curves_tool_dialog (GimpFilterTool *filter_tool);
|
||||
static void gimp_curves_tool_reset (GimpFilterTool *filter_tool);
|
||||
static void gimp_curves_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec);
|
||||
static gboolean gimp_curves_tool_settings_import (GimpFilterTool *filter_tool,
|
||||
GInputStream *input,
|
||||
GError **error);
|
||||
|
|
@ -111,9 +112,6 @@ static void gimp_curves_tool_export_setup (GimpSettingsBox *settin
|
|||
gboolean export,
|
||||
GimpCurvesTool *tool);
|
||||
static void gimp_curves_tool_update_channel (GimpCurvesTool *tool);
|
||||
static void gimp_curves_tool_config_notify (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GimpCurvesTool *tool);
|
||||
|
||||
static void curves_channel_callback (GtkWidget *widget,
|
||||
GimpCurvesTool *tool);
|
||||
|
|
@ -161,12 +159,9 @@ gimp_curves_tool_register (GimpToolRegisterCallback callback,
|
|||
static void
|
||||
gimp_curves_tool_class_init (GimpCurvesToolClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
|
||||
|
||||
object_class->constructed = gimp_curves_tool_constructed;
|
||||
|
||||
tool_class->initialize = gimp_curves_tool_initialize;
|
||||
tool_class->button_release = gimp_curves_tool_button_release;
|
||||
tool_class->key_press = gimp_curves_tool_key_press;
|
||||
|
|
@ -175,6 +170,7 @@ gimp_curves_tool_class_init (GimpCurvesToolClass *klass)
|
|||
filter_tool_class->get_operation = gimp_curves_tool_get_operation;
|
||||
filter_tool_class->dialog = gimp_curves_tool_dialog;
|
||||
filter_tool_class->reset = gimp_curves_tool_reset;
|
||||
filter_tool_class->config_notify = gimp_curves_tool_config_notify;
|
||||
filter_tool_class->settings_import = gimp_curves_tool_settings_import;
|
||||
filter_tool_class->settings_export = gimp_curves_tool_settings_export;
|
||||
filter_tool_class->color_picked = gimp_curves_tool_color_picked;
|
||||
|
|
@ -189,16 +185,6 @@ gimp_curves_tool_init (GimpCurvesTool *tool)
|
|||
tool->picked_color[i] = -1.0;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_curves_tool_constructed (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_FILTER_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (gimp_curves_tool_config_notify),
|
||||
object, 0);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_curves_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
|
|
@ -600,6 +586,32 @@ gimp_curves_tool_reset (GimpFilterTool *filter_tool)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_curves_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec)
|
||||
{
|
||||
GimpCurvesTool *curves_tool = GIMP_CURVES_TOOL (filter_tool);
|
||||
GimpCurvesConfig *curves_config = GIMP_CURVES_CONFIG (config);
|
||||
GimpCurve *curve = curves_config->curve[curves_config->channel];
|
||||
|
||||
GIMP_FILTER_TOOL_CLASS (parent_class)->config_notify (filter_tool,
|
||||
config, pspec);
|
||||
|
||||
if (! curves_tool->xrange)
|
||||
return;
|
||||
|
||||
if (! strcmp (pspec->name, "channel"))
|
||||
{
|
||||
gimp_curves_tool_update_channel (GIMP_CURVES_TOOL (filter_tool));
|
||||
}
|
||||
else if (! strcmp (pspec->name, "curve"))
|
||||
{
|
||||
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (curves_tool->curve_type),
|
||||
curve->curve_type);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_curves_tool_settings_import (GimpFilterTool *filter_tool,
|
||||
GInputStream *input,
|
||||
|
|
@ -773,28 +785,6 @@ gimp_curves_tool_update_channel (GimpCurvesTool *tool)
|
|||
curve->curve_type);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_curves_tool_config_notify (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GimpCurvesTool *tool)
|
||||
{
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (object);
|
||||
GimpCurve *curve = config->curve[config->channel];
|
||||
|
||||
if (! tool->xrange)
|
||||
return;
|
||||
|
||||
if (! strcmp (pspec->name, "channel"))
|
||||
{
|
||||
gimp_curves_tool_update_channel (GIMP_CURVES_TOOL (tool));
|
||||
}
|
||||
else if (! strcmp (pspec->name, "curve"))
|
||||
{
|
||||
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (tool->curve_type),
|
||||
curve->curve_type);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
curves_channel_callback (GtkWidget *widget,
|
||||
GimpCurvesTool *tool)
|
||||
|
|
|
|||
|
|
@ -137,8 +137,12 @@ static void gimp_filter_tool_color_picked (GimpColorTool *color_too
|
|||
const GimpRGB *color);
|
||||
|
||||
static void gimp_filter_tool_real_reset (GimpFilterTool *filter_tool);
|
||||
static void gimp_filter_tool_real_set_config (GimpFilterTool *filter_tool,
|
||||
static void gimp_filter_tool_real_set_config(GimpFilterTool *filter_tool,
|
||||
GimpConfig *config);
|
||||
static void gimp_filter_tool_real_config_notify
|
||||
(GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec);
|
||||
|
||||
static void gimp_filter_tool_halt (GimpFilterTool *filter_tool);
|
||||
static void gimp_filter_tool_commit (GimpFilterTool *filter_tool);
|
||||
|
|
@ -202,6 +206,7 @@ gimp_filter_tool_class_init (GimpFilterToolClass *klass)
|
|||
klass->dialog = NULL;
|
||||
klass->reset = gimp_filter_tool_real_reset;
|
||||
klass->set_config = gimp_filter_tool_real_set_config;
|
||||
klass->config_notify = gimp_filter_tool_real_config_notify;
|
||||
klass->settings_import = gimp_filter_tool_real_settings_import;
|
||||
klass->settings_export = gimp_filter_tool_real_settings_export;
|
||||
}
|
||||
|
|
@ -949,6 +954,17 @@ gimp_filter_tool_real_set_config (GimpFilterTool *filter_tool,
|
|||
g_object_set (filter_tool->config, "time", 0, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_filter_tool_real_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec)
|
||||
{
|
||||
GimpFilterOptions *options = GIMP_FILTER_TOOL_GET_OPTIONS (filter_tool);
|
||||
|
||||
if (filter_tool->filter && options->preview)
|
||||
gimp_drawable_filter_apply (filter_tool->filter, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_filter_tool_halt (GimpFilterTool *filter_tool)
|
||||
{
|
||||
|
|
@ -1129,10 +1145,9 @@ gimp_filter_tool_config_notify (GObject *object,
|
|||
const GParamSpec *pspec,
|
||||
GimpFilterTool *filter_tool)
|
||||
{
|
||||
GimpFilterOptions *options = GIMP_FILTER_TOOL_GET_OPTIONS (filter_tool);
|
||||
|
||||
if (filter_tool->filter && options->preview)
|
||||
gimp_drawable_filter_apply (filter_tool->filter, NULL);
|
||||
GIMP_FILTER_TOOL_GET_CLASS (filter_tool)->config_notify (filter_tool,
|
||||
GIMP_CONFIG (object),
|
||||
pspec);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
|
|
@ -92,6 +92,9 @@ struct _GimpFilterToolClass
|
|||
void (* reset) (GimpFilterTool *filter_tool);
|
||||
void (* set_config) (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config);
|
||||
void (* config_notify) (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec);
|
||||
|
||||
gboolean (* settings_import) (GimpFilterTool *filter_tool,
|
||||
GInputStream *input,
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_levels_tool_constructed (GObject *object);
|
||||
static void gimp_levels_tool_finalize (GObject *object);
|
||||
|
||||
static gboolean gimp_levels_tool_initialize (GimpTool *tool,
|
||||
|
|
@ -83,6 +82,9 @@ static gchar * gimp_levels_tool_get_operation (GimpFilterTool *filter_tool
|
|||
gchar **export_dialog_title);
|
||||
static void gimp_levels_tool_dialog (GimpFilterTool *filter_tool);
|
||||
static void gimp_levels_tool_reset (GimpFilterTool *filter_tool);
|
||||
static void gimp_levels_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec);
|
||||
static gboolean gimp_levels_tool_settings_import(GimpFilterTool *filter_tool,
|
||||
GInputStream *input,
|
||||
GError **error);
|
||||
|
|
@ -100,9 +102,6 @@ static void gimp_levels_tool_export_setup (GimpSettingsBox *settings_bo
|
|||
GtkFileChooserDialog *dialog,
|
||||
gboolean export,
|
||||
GimpLevelsTool *tool);
|
||||
static void gimp_levels_tool_config_notify (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GimpLevelsTool *tool);
|
||||
|
||||
static void levels_update_input_bar (GimpLevelsTool *tool);
|
||||
|
||||
|
|
@ -152,7 +151,6 @@ gimp_levels_tool_class_init (GimpLevelsToolClass *klass)
|
|||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
|
||||
|
||||
object_class->constructed = gimp_levels_tool_constructed;
|
||||
object_class->finalize = gimp_levels_tool_finalize;
|
||||
|
||||
tool_class->initialize = gimp_levels_tool_initialize;
|
||||
|
|
@ -160,6 +158,7 @@ gimp_levels_tool_class_init (GimpLevelsToolClass *klass)
|
|||
filter_tool_class->get_operation = gimp_levels_tool_get_operation;
|
||||
filter_tool_class->dialog = gimp_levels_tool_dialog;
|
||||
filter_tool_class->reset = gimp_levels_tool_reset;
|
||||
filter_tool_class->config_notify = gimp_levels_tool_config_notify;
|
||||
filter_tool_class->settings_import = gimp_levels_tool_settings_import;
|
||||
filter_tool_class->settings_export = gimp_levels_tool_settings_export;
|
||||
filter_tool_class->color_picked = gimp_levels_tool_color_picked;
|
||||
|
|
@ -171,16 +170,6 @@ gimp_levels_tool_init (GimpLevelsTool *tool)
|
|||
tool->histogram = gimp_histogram_new (FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_constructed (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_FILTER_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (gimp_levels_tool_config_notify),
|
||||
object, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_finalize (GObject *object)
|
||||
{
|
||||
|
|
@ -653,6 +642,54 @@ gimp_levels_tool_reset (GimpFilterTool *filter_tool)
|
|||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec)
|
||||
{
|
||||
GimpLevelsTool *levels_tool = GIMP_LEVELS_TOOL (filter_tool);
|
||||
GimpLevelsConfig *levels_config = GIMP_LEVELS_CONFIG (config);
|
||||
|
||||
GIMP_FILTER_TOOL_CLASS (parent_class)->config_notify (filter_tool,
|
||||
config, pspec);
|
||||
|
||||
if (! levels_tool->low_input)
|
||||
return;
|
||||
|
||||
if (! strcmp (pspec->name, "channel"))
|
||||
{
|
||||
gimp_histogram_view_set_channel (GIMP_HISTOGRAM_VIEW (levels_tool->histogram_view),
|
||||
levels_config->channel);
|
||||
gimp_color_bar_set_channel (GIMP_COLOR_BAR (levels_tool->output_bar),
|
||||
levels_config->channel);
|
||||
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (levels_tool->channel_menu),
|
||||
levels_config->channel);
|
||||
}
|
||||
else if (! strcmp (pspec->name, "gamma") ||
|
||||
! strcmp (pspec->name, "low-input") ||
|
||||
! strcmp (pspec->name, "high-input"))
|
||||
{
|
||||
gdouble low = gtk_adjustment_get_value (levels_tool->low_input);
|
||||
gdouble high = gtk_adjustment_get_value (levels_tool->high_input);
|
||||
gdouble delta, mid, tmp, value;
|
||||
|
||||
gtk_adjustment_set_lower (levels_tool->high_input, low);
|
||||
gtk_adjustment_set_lower (levels_tool->gamma_linear, low);
|
||||
|
||||
gtk_adjustment_set_upper (levels_tool->low_input, high);
|
||||
gtk_adjustment_set_upper (levels_tool->gamma_linear, high);
|
||||
|
||||
levels_update_input_bar (levels_tool);
|
||||
|
||||
delta = (high - low) / 2.0;
|
||||
mid = low + delta;
|
||||
tmp = log10 (1.0 / levels_config->gamma[levels_config->channel]);
|
||||
value = mid + delta * tmp;
|
||||
|
||||
gtk_adjustment_set_value (levels_tool->gamma_linear, value);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_levels_tool_settings_import (GimpFilterTool *filter_tool,
|
||||
GInputStream *input,
|
||||
|
|
@ -787,50 +824,6 @@ gimp_levels_tool_export_setup (GimpSettingsBox *settings_box,
|
|||
&tool->export_old_format);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_config_notify (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GimpLevelsTool *tool)
|
||||
{
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (object);
|
||||
|
||||
if (! tool->low_input)
|
||||
return;
|
||||
|
||||
if (! strcmp (pspec->name, "channel"))
|
||||
{
|
||||
gimp_histogram_view_set_channel (GIMP_HISTOGRAM_VIEW (tool->histogram_view),
|
||||
config->channel);
|
||||
gimp_color_bar_set_channel (GIMP_COLOR_BAR (tool->output_bar),
|
||||
config->channel);
|
||||
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (tool->channel_menu),
|
||||
config->channel);
|
||||
}
|
||||
else if (! strcmp (pspec->name, "gamma") ||
|
||||
! strcmp (pspec->name, "low-input") ||
|
||||
! strcmp (pspec->name, "high-input"))
|
||||
{
|
||||
gdouble low = gtk_adjustment_get_value (tool->low_input);
|
||||
gdouble high = gtk_adjustment_get_value (tool->high_input);
|
||||
gdouble delta, mid, tmp, value;
|
||||
|
||||
gtk_adjustment_set_lower (tool->high_input, low);
|
||||
gtk_adjustment_set_lower (tool->gamma_linear, low);
|
||||
|
||||
gtk_adjustment_set_upper (tool->low_input, high);
|
||||
gtk_adjustment_set_upper (tool->gamma_linear, high);
|
||||
|
||||
levels_update_input_bar (tool);
|
||||
|
||||
delta = (high - low) / 2.0;
|
||||
mid = low + delta;
|
||||
tmp = log10 (1.0 / config->gamma[config->channel]);
|
||||
value = mid + delta * tmp;
|
||||
|
||||
gtk_adjustment_set_value (tool->gamma_linear, value);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
levels_update_input_bar (GimpLevelsTool *tool)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -45,7 +45,6 @@
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_threshold_tool_constructed (GObject *object);
|
||||
static void gimp_threshold_tool_finalize (GObject *object);
|
||||
|
||||
static gboolean gimp_threshold_tool_initialize (GimpTool *tool,
|
||||
|
|
@ -62,10 +61,9 @@ static gchar * gimp_threshold_tool_get_operation (GimpFilterTool *filter
|
|||
gchar **import_dialog_title,
|
||||
gchar **export_dialog_title);
|
||||
static void gimp_threshold_tool_dialog (GimpFilterTool *filter_tool);
|
||||
|
||||
static void gimp_threshold_tool_config_notify (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GimpThresholdTool *t_tool);
|
||||
static void gimp_threshold_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec);
|
||||
|
||||
static gboolean gimp_threshold_tool_channel_sensitive
|
||||
(gint value,
|
||||
|
|
@ -108,13 +106,13 @@ gimp_threshold_tool_class_init (GimpThresholdToolClass *klass)
|
|||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpFilterToolClass *filter_tool_class = GIMP_FILTER_TOOL_CLASS (klass);
|
||||
|
||||
object_class->constructed = gimp_threshold_tool_constructed;
|
||||
object_class->finalize = gimp_threshold_tool_finalize;
|
||||
|
||||
tool_class->initialize = gimp_threshold_tool_initialize;
|
||||
|
||||
filter_tool_class->get_operation = gimp_threshold_tool_get_operation;
|
||||
filter_tool_class->dialog = gimp_threshold_tool_dialog;
|
||||
filter_tool_class->config_notify = gimp_threshold_tool_config_notify;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -123,16 +121,6 @@ gimp_threshold_tool_init (GimpThresholdTool *t_tool)
|
|||
t_tool->histogram = gimp_histogram_new (FALSE);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_threshold_tool_constructed (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_FILTER_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (gimp_threshold_tool_config_notify),
|
||||
object, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_threshold_tool_finalize (GObject *object)
|
||||
{
|
||||
|
|
@ -295,10 +283,15 @@ gimp_threshold_tool_dialog (GimpFilterTool *filter_tool)
|
|||
}
|
||||
|
||||
static void
|
||||
gimp_threshold_tool_config_notify (GObject *object,
|
||||
GParamSpec *pspec,
|
||||
GimpThresholdTool *t_tool)
|
||||
gimp_threshold_tool_config_notify (GimpFilterTool *filter_tool,
|
||||
GimpConfig *config,
|
||||
const GParamSpec *pspec)
|
||||
{
|
||||
GimpThresholdTool *t_tool = GIMP_THRESHOLD_TOOL (filter_tool);
|
||||
|
||||
GIMP_FILTER_TOOL_CLASS (parent_class)->config_notify (filter_tool,
|
||||
config, pspec);
|
||||
|
||||
if (! t_tool->histogram_box)
|
||||
return;
|
||||
|
||||
|
|
@ -306,7 +299,7 @@ gimp_threshold_tool_config_notify (GObject *object,
|
|||
{
|
||||
GimpHistogramChannel channel;
|
||||
|
||||
g_object_get (object,
|
||||
g_object_get (config,
|
||||
"channel", &channel,
|
||||
NULL);
|
||||
|
||||
|
|
@ -320,7 +313,7 @@ gimp_threshold_tool_config_notify (GObject *object,
|
|||
gdouble high;
|
||||
gint n_bins;
|
||||
|
||||
g_object_get (object,
|
||||
g_object_get (config,
|
||||
"low", &low,
|
||||
"high", &high,
|
||||
NULL);
|
||||
|
|
|
|||
Loading…
Reference in a new issue