diff --git a/ChangeLog b/ChangeLog index 29f877d5b4..1f6fb2662c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2004-06-21 Bill Skaggs + + * plug-ins/common/noisify.c: changed handling of alpha + channel in an attempt to deal with bug #72853. + Changed menu entry from "Noisify" to "Scatter RGB". + 2004-06-21 Bill Skaggs * app/pdb/fileops_cmds.c: fixed incorrect documentation for diff --git a/plug-ins/common/noisify.c b/plug-ins/common/noisify.c index 609a831d76..ac72b05122 100644 --- a/plug-ins/common/noisify.c +++ b/plug-ins/common/noisify.c @@ -91,7 +91,7 @@ GimpPlugInInfo PLUG_IN_INFO = static NoisifyVals nvals = { TRUE, - { 0.20, 0.20, 0.20, 0.20 } + { 0.20, 0.20, 0.20, 0.0 } }; static NoisifyInterface noise_int = @@ -126,7 +126,7 @@ query (void) "Torsten Martinsen", "Torsten Martinsen", "May 2000", - N_("_Noisify..."), + N_("_Scatter RGB..."), "RGB*, GRAY*", GIMP_PLUGIN, G_N_ELEMENTS (args), 0, @@ -160,6 +160,9 @@ run (const gchar *name, /* Get the specified drawable */ drawable = gimp_drawable_get (param[2].data.d_drawable); + if (gimp_drawable_is_gray (drawable->drawable_id)) + nvals.noise[1] = 0.; + switch (run_mode) { case GIMP_RUN_INTERACTIVE: @@ -246,7 +249,7 @@ noisify_func (const guchar *src, { gint p; - if (nvals.independent) + if (nvals.independent || (b == 1 && bpp == 2) || (b == 3 && bpp == 4)) noise = (gint) (nvals.noise[b] * gauss (gr) * 127); p = src[b] + noise; @@ -294,6 +297,27 @@ noisify_add_channel (GtkWidget *table, gint channel, gchar *name, noise_int.channel_adj[channel] = adj; } +static void +noisify_add_alpha_channel (GtkWidget *table, gint channel, gchar *name, + GimpDrawable *drawable) +{ + GtkObject *adj; + + adj = gimp_scale_entry_new (GTK_TABLE (table), 0, channel + 1, + name, SCALE_WIDTH, 0, + nvals.noise[channel], 0.0, 1.0, 0.01, 0.1, 2, + TRUE, 0, 0, + NULL, NULL); + + g_object_set_data (G_OBJECT (adj), "drawable", drawable); + + g_signal_connect (adj, "value_changed", + G_CALLBACK (gimp_double_adjustment_update), + &nvals.noise[channel]); + + noise_int.channel_adj[channel] = adj; +} + static gint noisify_dialog (GimpDrawable *drawable, gint channels) @@ -307,7 +331,7 @@ noisify_dialog (GimpDrawable *drawable, gimp_ui_init ("noisify", FALSE); - dlg = gimp_dialog_new (_("Noisify"), "noisify", + dlg = gimp_dialog_new (_("Scatter RGB"), "noisify", NULL, 0, gimp_standard_help_func, "plug-in-noisify", @@ -333,14 +357,17 @@ noisify_dialog (GimpDrawable *drawable, noisify (drawable, TRUE); /* preview noisify */ - toggle = gtk_check_button_new_with_mnemonic (_("_Independent")); - gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), nvals.independent); - gtk_widget_show (toggle); - - g_signal_connect (toggle, "toggled", - G_CALLBACK (gimp_toggle_button_update), - &nvals.independent); + if (gimp_drawable_is_rgb (drawable->drawable_id)) + { + toggle = gtk_check_button_new_with_mnemonic (_("_Independent RGB")); + gtk_box_pack_start (GTK_BOX (vbox), toggle, FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), nvals.independent); + gtk_widget_show (toggle); + + g_signal_connect (toggle, "toggled", + G_CALLBACK (gimp_toggle_button_update), + &nvals.independent); + } table = gtk_table_new (channels, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); @@ -357,7 +384,8 @@ noisify_dialog (GimpDrawable *drawable, else if (channels == 2) { noisify_add_channel (table, 0, _("_Gray:"), drawable); - noisify_add_channel (table, 1, _("_Alpha:"), drawable); + noisify_add_alpha_channel (table, 1, _("_Alpha:"), drawable); + gtk_table_set_row_spacing (GTK_TABLE (table), 1, 15); } else if (channels == 3) { @@ -371,7 +399,8 @@ noisify_dialog (GimpDrawable *drawable, noisify_add_channel (table, 0, _("_Red:"), drawable); noisify_add_channel (table, 1, _("_Green:"), drawable); noisify_add_channel (table, 2, _("_Blue:"), drawable); - noisify_add_channel (table, 3, _("_Alpha:"), drawable); + noisify_add_alpha_channel (table, 3, _("_Alpha:"), drawable); + gtk_table_set_row_spacing (GTK_TABLE (table), 3, 15); } else { @@ -425,6 +454,7 @@ noisify_double_adjustment_update (GtkAdjustment *adjustment, gpointer data) { GimpDrawable *drawable; + gint n; gimp_double_adjustment_update (adjustment, data); @@ -435,8 +465,23 @@ noisify_double_adjustment_update (GtkAdjustment *adjustment, if (! nvals.independent) { gint i; + switch (noise_int.channels) + { + case 1: + n = 1; + break; + case 2: + n = 1; + break; + case 3: + n = 3; + break; + default: + n = 3; + break; + } - for (i = 0; i < noise_int.channels; i++) + for (i = 0; i < n; i++) if (adjustment != GTK_ADJUSTMENT (noise_int.channel_adj[i])) gtk_adjustment_set_value (GTK_ADJUSTMENT (noise_int.channel_adj[i]), adjustment->value);