added a float adjustment callback.

2000-01-15  Michael Natterer  <mitch@gimp.org>

	* libgimp/gimpwidgets.[ch]: added a float adjustment callback.

	* plug-ins/common/bumpmap.c
	* plug-ins/common/depthmerge.c
	* plug-ins/common/despeckle.c
	* plug-ins/common/destripe.c
	* plug-ins/common/gpb.c
	* plug-ins/common/iwarp.c
	* plug-ins/common/polar.c
	* plug-ins/common/sharpen.c
	* plug-ins/common/tileit.c
	* plug-ins/common/whirlpinch.c
	* plug-ins/common/wind.c:

	- Some more hscale+spinbutton instead of hscale+entry widgets.
	- Get the CHECK_SIZE constants from libgimp in some plugins.
This commit is contained in:
Michael Natterer 2000-01-15 15:32:28 +00:00 committed by Michael Natterer
parent 868ffd98fc
commit 6e83e1ba0a
16 changed files with 1771 additions and 2420 deletions

View File

@ -1,3 +1,22 @@
2000-01-15 Michael Natterer <mitch@gimp.org>
* libgimp/gimpwidgets.[ch]: added a float adjustment callback.
* plug-ins/common/bumpmap.c
* plug-ins/common/depthmerge.c
* plug-ins/common/despeckle.c
* plug-ins/common/destripe.c
* plug-ins/common/gpb.c
* plug-ins/common/iwarp.c
* plug-ins/common/polar.c
* plug-ins/common/sharpen.c
* plug-ins/common/tileit.c
* plug-ins/common/whirlpinch.c
* plug-ins/common/wind.c:
- Some more hscale+spinbutton instead of hscale+entry widgets.
- Get the CHECK_SIZE constants from libgimp in some plugins.
Sat Jan 15 15:40:26 CET 2000 Stanislav Brabec <utx@penguin.cz>
* plug-ins/webbrowser/webbrowser.c: Small i18n fix.

View File

@ -152,9 +152,6 @@ gimp_radio_group_new (gboolean in_frame,
button = gtk_radio_button_new_with_label (group, label);
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
if (user_data)
gtk_object_set_user_data (GTK_OBJECT (button), user_data);
@ -162,10 +159,13 @@ gimp_radio_group_new (gboolean in_frame,
if (widget_ptr)
*widget_ptr = button;
/* press the initially active radio button */
if (active)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
gtk_widget_show (button);
label = va_arg (args, gchar*);
@ -228,9 +228,6 @@ gimp_radio_group_new2 (gboolean in_frame,
button = gtk_radio_button_new_with_label (group, label);
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
if (user_data)
gtk_object_set_user_data (GTK_OBJECT (button), user_data);
@ -238,10 +235,13 @@ gimp_radio_group_new2 (gboolean in_frame,
if (widget_ptr)
*widget_ptr = button;
/* press the initially active radio button */
if (initial == user_data)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
gtk_widget_show (button);
label = va_arg (args, gchar*);
@ -410,6 +410,16 @@ gimp_int_adjustment_update (GtkAdjustment *adjustment,
*val = (gint) (adjustment->value + 0.5);
}
void
gimp_float_adjustment_update (GtkAdjustment *adjustment,
gpointer data)
{
gfloat *val;
val = (gfloat *) data;
*val = adjustment->value;
}
void
gimp_double_adjustment_update (GtkAdjustment *adjustment,
gpointer data)

View File

@ -115,6 +115,9 @@ void gimp_radio_button_update (GtkWidget *widget,
void gimp_int_adjustment_update (GtkAdjustment *adjustment,
gpointer data);
void gimp_float_adjustment_update (GtkAdjustment *adjustment,
gpointer data);
void gimp_double_adjustment_update (GtkAdjustment *adjustment,
gpointer data);

View File

@ -152,9 +152,6 @@ gimp_radio_group_new (gboolean in_frame,
button = gtk_radio_button_new_with_label (group, label);
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
if (user_data)
gtk_object_set_user_data (GTK_OBJECT (button), user_data);
@ -162,10 +159,13 @@ gimp_radio_group_new (gboolean in_frame,
if (widget_ptr)
*widget_ptr = button;
/* press the initially active radio button */
if (active)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
gtk_widget_show (button);
label = va_arg (args, gchar*);
@ -228,9 +228,6 @@ gimp_radio_group_new2 (gboolean in_frame,
button = gtk_radio_button_new_with_label (group, label);
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
if (user_data)
gtk_object_set_user_data (GTK_OBJECT (button), user_data);
@ -238,10 +235,13 @@ gimp_radio_group_new2 (gboolean in_frame,
if (widget_ptr)
*widget_ptr = button;
/* press the initially active radio button */
if (initial == user_data)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (callback),
data);
gtk_widget_show (button);
label = va_arg (args, gchar*);
@ -410,6 +410,16 @@ gimp_int_adjustment_update (GtkAdjustment *adjustment,
*val = (gint) (adjustment->value + 0.5);
}
void
gimp_float_adjustment_update (GtkAdjustment *adjustment,
gpointer data)
{
gfloat *val;
val = (gfloat *) data;
*val = adjustment->value;
}
void
gimp_double_adjustment_update (GtkAdjustment *adjustment,
gpointer data)

View File

@ -115,6 +115,9 @@ void gimp_radio_button_update (GtkWidget *widget,
void gimp_int_adjustment_update (GtkAdjustment *adjustment,
gpointer data);
void gimp_float_adjustment_update (GtkAdjustment *adjustment,
gpointer data);
void gimp_double_adjustment_update (GtkAdjustment *adjustment,
gpointer data);

View File

@ -107,9 +107,8 @@
#define PLUG_IN_NAME "plug_in_bump_map"
#define PLUG_IN_VERSION "August 1997, 2.04"
#define PREVIEW_SIZE 128
#define SCALE_WIDTH 200
#define ENTRY_WIDTH 60
#define PREVIEW_SIZE 128
#define SCALE_WIDTH 200
/***** Types *****/
@ -211,33 +210,29 @@ static void bumpmap_row (guchar *src_row,
static void bumpmap_convert_row (guchar *row, int width, int bpp,
int has_alpha, guchar *lut);
static gint bumpmap_dialog(void);
static void dialog_init_preview(void);
static void dialog_new_bumpmap(void);
static void dialog_update_preview(void);
static gint dialog_preview_events(GtkWidget *widget, GdkEvent *event);
static void dialog_scroll_src(void);
static void dialog_scroll_bumpmap(void);
static void dialog_get_rows(GPixelRgn *pr, guchar **rows, int x, int y, int width, int height);
static void dialog_fill_src_rows(int start, int how_many, int yofs);
static void dialog_fill_bumpmap_rows(int start, int how_many, int yofs);
static gint bumpmap_dialog (void);
static void dialog_init_preview (void);
static void dialog_new_bumpmap (void);
static void dialog_update_preview (void);
static gint dialog_preview_events (GtkWidget *widget, GdkEvent *event);
static void dialog_scroll_src (void);
static void dialog_scroll_bumpmap (void);
static void dialog_get_rows (GPixelRgn *pr, guchar **rows,
int x, int y, int width, int height);
static void dialog_fill_src_rows (int start, int how_many, int yofs);
static void dialog_fill_bumpmap_rows (int start, int how_many, int yofs);
static void dialog_compensate_callback(GtkWidget *widget, gpointer data);
static void dialog_invert_callback(GtkWidget *widget, gpointer data);
static void dialog_map_type_callback(GtkWidget *widget, gpointer data);
static gint dialog_constrain(gint32 image_id, gint32 drawable_id, gpointer data);
static void dialog_bumpmap_callback(gint32 id, gpointer data);
static void dialog_create_dvalue(char *title, GtkTable *table, int row, gdouble *value,
double left, double right);
static void dialog_dscale_update(GtkAdjustment *adjustment, gdouble *value);
static void dialog_dentry_update(GtkWidget *widget, gdouble *value);
static void dialog_create_ivalue(char *title, GtkTable *table, int row, gint *value,
int left, int right, int full_update);
static void dialog_iscale_update_normal(GtkAdjustment *adjustment, gint *value);
static void dialog_iscale_update_full(GtkAdjustment *adjustment, gint *value);
static void dialog_ientry_update_normal(GtkWidget *widget, gint *value);
static void dialog_ientry_update_full(GtkWidget *widget, gint *value);
static void dialog_ok_callback(GtkWidget *widget, gpointer data);
static void dialog_compensate_callback (GtkWidget *widget, gpointer data);
static void dialog_invert_callback (GtkWidget *widget, gpointer data);
static void dialog_map_type_callback (GtkWidget *widget, gpointer data);
static gint dialog_constrain (gint32 image_id, gint32 drawable_id,
gpointer data);
static void dialog_bumpmap_callback (gint32 id, gpointer data);
static void dialog_dscale_update (GtkAdjustment *adjustment,
gdouble *value);
static void dialog_iscale_update_normal (GtkAdjustment *adjustment, gint *value);
static void dialog_iscale_update_full (GtkAdjustment *adjustment, gint *value);
static void dialog_ok_callback (GtkWidget *widget, gpointer data);
/***** Variables *****/
@ -291,18 +286,11 @@ static bumpmap_interface_t bmint =
FALSE /* run */
};
static char *map_types[] =
{
N_("Linear map"),
N_("Spherical map"),
N_("Sinusoidal map")
};
GDrawable *drawable = NULL;
int sel_x1, sel_y1, sel_x2, sel_y2;
int sel_width, sel_height;
int img_bpp, img_has_alpha;
gint sel_x1, sel_y1, sel_x2, sel_y2;
gint sel_width, sel_height;
gint img_bpp, img_has_alpha;
/***** Functions *****/
@ -768,21 +756,20 @@ bumpmap_convert_row (guchar *row,
static gint
bumpmap_dialog (void)
{
GtkWidget *dialog;
GtkWidget *top_table;
GtkWidget *frame;
GtkWidget *table;
GtkWidget *right_vbox;
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *option_menu;
GtkWidget *menu;
GtkWidget *button;
GSList *group;
gint argc;
gchar **argv;
guchar *color_cube;
gint i;
GtkWidget *dialog;
GtkWidget *top_table;
GtkWidget *frame;
GtkWidget *table;
GtkWidget *right_vbox;
GtkWidget *label;
GtkWidget *option_menu;
GtkWidget *menu;
GtkWidget *button;
GtkObject *adj;
gint argc;
gchar **argv;
guchar *color_cube;
gint i;
#if 0
g_print ("bumpmap: waiting... (pid %d)\n", getpid ());
@ -887,31 +874,20 @@ bumpmap_dialog (void)
/* Type of map */
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
frame =
gimp_radio_group_new2 (TRUE, NULL,
dialog_map_type_callback,
&bmvals.type, (gpointer) bmvals.type,
_("Linear Map"), (gpointer) LINEAR, NULL,
_("Spherical Map"), (gpointer) SPHERICAL, NULL,
_("Sinuosidal Map"), (gpointer) SINUOSIDAL, NULL,
NULL);
gtk_box_pack_start (GTK_BOX (right_vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
gtk_widget_show (vbox);
group = NULL;
for (i = 0; i < (sizeof(map_types) / sizeof(map_types[0])); i++)
{
button = gtk_radio_button_new_with_label (group, gettext (map_types[i]));
group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
if (i == bmvals.type)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
(GtkSignalFunc) dialog_map_type_callback,
(gpointer) ((long) i));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
}
/* Table for bottom controls */
table = gtk_table_new (8, 3, FALSE);
@ -943,20 +919,61 @@ bumpmap_dialog (void)
/* Controls */
dialog_create_dvalue(_("Azimuth:"), GTK_TABLE (table), 1,
&bmvals.azimuth, 0.0, 360.0);
dialog_create_dvalue (_("Elevation:"), GTK_TABLE (table), 2,
&bmvals.elevation, 0.5, 90.0);
dialog_create_ivalue (_("Depth:"), GTK_TABLE (table), 3,
&bmvals.depth, 1, 65, FALSE);
dialog_create_ivalue (_("X Offset:"), GTK_TABLE (table), 4,
&bmvals.xofs, -1000, 1001, FALSE);
dialog_create_ivalue (_("Y Offset:"), GTK_TABLE (table), 5,
&bmvals.yofs, -1000, 1001, FALSE);
dialog_create_ivalue (_("Waterlevel:"), GTK_TABLE (table), 6,
&bmvals.waterlevel, 0, 256, TRUE);
dialog_create_ivalue (_("Ambient:"), GTK_TABLE (table), 7,
&bmvals.ambient, 0, 256, FALSE);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Azimuth:"), SCALE_WIDTH, 0,
bmvals.azimuth, 0.0, 360.0, 1.0, 15.0, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_dscale_update),
&bmvals.azimuth);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Elevation:"), SCALE_WIDTH, 0,
bmvals.elevation, 0.5, 90.0, 1.0, 5.0, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_dscale_update),
&bmvals.elevation);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
_("Depth:"), SCALE_WIDTH, 0,
bmvals.depth, 1.0, 65.0, 1.0, 5.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
&bmvals.depth);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 4,
_("X Offset:"), SCALE_WIDTH, 0,
bmvals.xofs, -1000.0, 1001.0, 1.0, 10.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
&bmvals.xofs);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 5,
_("Y Offset:"), SCALE_WIDTH, 0,
bmvals.yofs, -1000.0, 1001.0, 1.0, 10.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
&bmvals.yofs);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 6,
_("Waterlevel:"), SCALE_WIDTH, 0,
bmvals.waterlevel, 0.0, 256.0, 1.0, 8.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_iscale_update_full),
&bmvals.waterlevel);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 7,
_("Ambient:"), SCALE_WIDTH, 0,
bmvals.ambient, 0.0, 256.0, 1.0, 8.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_iscale_update_normal),
&bmvals.ambient);
/* Done */
@ -1520,10 +1537,10 @@ static void
dialog_map_type_callback (GtkWidget *widget,
gpointer data)
{
gimp_radio_button_update (widget, data);
if (GTK_TOGGLE_BUTTON (widget)->active)
{
bmvals.type = (long) data;
bumpmap_init_params (&bmint.params);
dialog_fill_bumpmap_rows (0, bmint.preview_height + 2, bmint.bm_yofs);
dialog_update_preview ();
@ -1551,258 +1568,33 @@ dialog_bumpmap_callback (gint32 id,
dialog_update_preview ();
}
static void
dialog_create_dvalue (char *title,
GtkTable *table,
int row,
gdouble *value,
double left,
double right)
{
GtkWidget *label;
GtkWidget *scale;
GtkWidget *entry;
GtkObject *scale_data;
gchar buf[256];
label = gtk_label_new (title);
gtk_misc_set_alignment (GTK_MISC(label), 1.0, 0.5);
gtk_table_attach (table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
scale_data = gtk_adjustment_new (*value, left, right, 1.0, 1.0, 0.0);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
(GtkSignalFunc) dialog_dscale_update,
value);
scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data));
gtk_widget_set_usize (scale, SCALE_WIDTH, 0);
gtk_table_attach (table, scale, 1, 2, row, row + 1,
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_CONTINUOUS);
gtk_widget_show (scale);
entry = gtk_entry_new ();
gtk_object_set_user_data (GTK_OBJECT (entry), scale_data);
gtk_object_set_user_data (scale_data, entry);
gtk_widget_set_usize (entry, ENTRY_WIDTH, 0);
g_snprintf (buf, sizeof (buf), "%0.2f", *value);
gtk_entry_set_text (GTK_ENTRY (entry), buf);
gtk_signal_connect (GTK_OBJECT (entry), "changed",
(GtkSignalFunc) dialog_dentry_update,
value);
gtk_table_attach (GTK_TABLE (table), entry, 2, 3, row, row + 1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (entry);
}
static void
dialog_dscale_update (GtkAdjustment *adjustment,
gdouble *value)
{
GtkWidget *entry;
gchar buf[256];
gimp_double_adjustment_update (adjustment, value);
if (*value != adjustment->value)
{
*value = adjustment->value;
entry = gtk_object_get_user_data (GTK_OBJECT (adjustment));
g_snprintf (buf, sizeof (buf), "%0.2f", *value);
gtk_signal_handler_block_by_data (GTK_OBJECT (entry), value);
gtk_entry_set_text (GTK_ENTRY (entry), buf);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (entry), value);
dialog_update_preview ();
}
}
static void
dialog_dentry_update (GtkWidget *widget,
gdouble *value)
{
GtkAdjustment *adjustment;
gdouble new_value;
new_value = atof (gtk_entry_get_text (GTK_ENTRY (widget)));
if (*value != new_value)
{
adjustment = gtk_object_get_user_data (GTK_OBJECT (widget));
if ((new_value >= adjustment->lower) &&
(new_value <= adjustment->upper))
{
*value = new_value;
adjustment->value = new_value;
gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "value_changed");
dialog_update_preview();
}
}
}
static void
dialog_create_ivalue (char *title,
GtkTable *table,
int row,
gint *value,
int left,
int right,
int full_update)
{
GtkWidget *label;
GtkWidget *scale;
GtkWidget *entry;
GtkObject *scale_data;
gchar buf[256];
label = gtk_label_new (title);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
scale_data = gtk_adjustment_new (*value, left, right, 1.0, 1.0, 1.0);
if (full_update)
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
(GtkSignalFunc) dialog_iscale_update_full,
value);
else
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
(GtkSignalFunc) dialog_iscale_update_normal,
value);
scale = gtk_hscale_new (GTK_ADJUSTMENT (scale_data));
gtk_widget_set_usize (scale, SCALE_WIDTH, 0);
gtk_table_attach (table, scale, 1, 2, row, row + 1,
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_CONTINUOUS);
gtk_widget_show (scale);
entry = gtk_entry_new ();
gtk_object_set_user_data (GTK_OBJECT (entry), scale_data);
gtk_object_set_user_data (scale_data, entry);
gtk_widget_set_usize (entry, ENTRY_WIDTH, 0);
g_snprintf(buf, sizeof (buf), "%d", *value);
gtk_entry_set_text (GTK_ENTRY (entry), buf);
if (full_update)
gtk_signal_connect(GTK_OBJECT (entry), "changed",
(GtkSignalFunc) dialog_ientry_update_full,
value);
else
gtk_signal_connect (GTK_OBJECT (entry), "changed",
(GtkSignalFunc) dialog_ientry_update_normal,
value);
gtk_table_attach (GTK_TABLE (table), entry, 2, 3, row, row + 1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (entry);
dialog_update_preview ();
}
static void
dialog_iscale_update_normal (GtkAdjustment *adjustment,
gint *value)
{
GtkWidget *entry;
gchar buf[256];
gimp_int_adjustment_update (adjustment, value);
if (*value != adjustment->value)
{
*value = adjustment->value;
entry = gtk_object_get_user_data (GTK_OBJECT (adjustment));
g_snprintf (buf, sizeof (buf), "%d", *value);
gtk_signal_handler_block_by_data (GTK_OBJECT (entry), value);
gtk_entry_set_text (GTK_ENTRY (entry), buf);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (entry), value);
dialog_update_preview ();
}
dialog_update_preview ();
}
static void
dialog_iscale_update_full (GtkAdjustment *adjustment,
gint *value)
{
GtkWidget *entry;
gchar buf[256];
gimp_int_adjustment_update (adjustment, value);
if (*value != adjustment->value)
{
*value = adjustment->value;
entry = gtk_object_get_user_data (GTK_OBJECT (adjustment));
g_snprintf (buf, sizeof (buf), "%d", *value);
gtk_signal_handler_block_by_data (GTK_OBJECT (entry), value);
gtk_entry_set_text (GTK_ENTRY (entry), buf);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (entry), value);
bumpmap_init_params (&bmint.params);
dialog_fill_bumpmap_rows (0, bmint.preview_height + 2, bmint.bm_yofs);
dialog_update_preview ();
}
}
static void
dialog_ientry_update_normal (GtkWidget *widget,
gint *value)
{
GtkAdjustment *adjustment;
gdouble new_value;
new_value = atoi (gtk_entry_get_text (GTK_ENTRY (widget)));
if (*value != new_value)
{
adjustment = gtk_object_get_user_data (GTK_OBJECT (widget));
if ((new_value >= adjustment->lower) &&
(new_value <= adjustment->upper))
{
*value = new_value;
adjustment->value = new_value;
gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "value_changed");
dialog_update_preview();
}
}
}
static void
dialog_ientry_update_full (GtkWidget *widget,
gint *value)
{
GtkAdjustment *adjustment;
gdouble new_value;
new_value = atoi (gtk_entry_get_text (GTK_ENTRY (widget)));
if (*value != new_value)
{
adjustment = gtk_object_get_user_data (GTK_OBJECT (widget));
if ((new_value >= adjustment->lower) &&
(new_value <= adjustment->upper))
{
*value = new_value;
adjustment->value = new_value;
gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "value_changed");
bumpmap_init_params (&bmint.params);
dialog_fill_bumpmap_rows (0, bmint.preview_height + 2, bmint.bm_yofs);
dialog_update_preview();
}
}
bumpmap_init_params (&bmint.params);
dialog_fill_bumpmap_rows (0, bmint.preview_height + 2, bmint.bm_yofs);
dialog_update_preview ();
}
static void

File diff suppressed because it is too large Load Diff

View File

@ -31,9 +31,7 @@
* preview_scroll_callback() - Update the preview when a scrollbar is moved.
* preview_update() - Update the preview window.
* preview_exit() - Free all memory used by the preview window...
* dialog_create_ivalue() - Create an integer value control...
* dialog_iscale_update() - Update the value field using the scale.
* dialog_ientry_update() - Update the value field using the text entry.
* dialog_adaptive_callback() - Update the filter type...
* dialog_recursive_callback() - Update the filter type...
* dialog_ok_callback() - Start the filter...
@ -41,6 +39,26 @@
* Revision History:
*
* $Log$
* Revision 1.25 2000/01/15 15:32:28 mitch
* 2000-01-15 Michael Natterer <mitch@gimp.org>
*
* * libgimp/gimpwidgets.[ch]: added a float adjustment callback.
*
* * plug-ins/common/bumpmap.c
* * plug-ins/common/depthmerge.c
* * plug-ins/common/despeckle.c
* * plug-ins/common/destripe.c
* * plug-ins/common/gpb.c
* * plug-ins/common/iwarp.c
* * plug-ins/common/polar.c
* * plug-ins/common/sharpen.c
* * plug-ins/common/tileit.c
* * plug-ins/common/whirlpinch.c
* * plug-ins/common/wind.c:
*
* - Some more hscale+spinbutton instead of hscale+entry widgets.
* - Get the CHECK_SIZE constants from libgimp in some plugins.
*
* Revision 1.24 2000/01/14 12:40:59 mitch
* 2000-01-14 Michael Natterer <mitch@gimp.org>
*

View File

@ -30,9 +30,7 @@
* preview_scroll_callback() - Update the preview when a scrollbar is moved.
* preview_update() - Update the preview window.
* preview_exit() - Free all memory used by the preview window...
* dialog_create_ivalue() - Create an integer value control...
* dialog_iscale_update() - Update the value field using the scale.
* dialog_ientry_update() - Update the value field using the text entry.
* dialog_histogram_callback()
* dialog_ok_callback() - Start the filter...
*
@ -60,31 +58,29 @@
* Constants...
*/
#define PLUG_IN_NAME "plug_in_destripe"
#define PLUG_IN_VERSION "0.2"
#define PREVIEW_SIZE 200
#define SCALE_WIDTH 140
#define ENTRY_WIDTH 40
#define MAX_AVG 100
#define PLUG_IN_NAME "plug_in_destripe"
#define PLUG_IN_VERSION "0.2"
#define PREVIEW_SIZE 200
#define SCALE_WIDTH 140
#define MAX_AVG 100
/*
* Local functions...
*/
static void query (void);
static void run (char *,
int,
GParam *,
int *,
GParam **);
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals);
static void destripe (void);
static gint destripe_dialog (void);
static void dialog_create_ivalue (char *, GtkTable *, int, gint *, int, int);
static void dialog_iscale_update (GtkAdjustment *, gint *);
static void dialog_ientry_update (GtkWidget *, gint *);
static void dialog_ok_callback (GtkWidget *, gpointer);
static gint destripe_dialog (void);
static void dialog_histogram_callback (GtkWidget *, gpointer);
static void dialog_iscale_update (GtkAdjustment *, gint *);
static void dialog_ok_callback (GtkWidget *, gpointer);
static void preview_init (void);
static void preview_exit (void);
@ -96,48 +92,40 @@ static void preview_scroll_callback (void);
* Globals...
*/
GPlugInInfo PLUG_IN_INFO =
{
NULL, /* init_proc */
NULL, /* quit_proc */
query, /* query_proc */
run /* run_proc */
};
GPlugInInfo PLUG_IN_INFO =
{
NULL, /* init_proc */
NULL, /* quit_proc */
query, /* query_proc */
run /* run_proc */
};
GtkWidget *preview; /* Preview widget */
int preview_width, /* Width of preview widget */
GtkWidget *preview; /* Preview widget */
gint preview_width, /* Width of preview widget */
preview_height, /* Height of preview widget */
preview_x1, /* Upper-left X of preview */
preview_y1, /* Upper-left Y of preview */
preview_x2, /* Lower-right X of preview */
preview_y2; /* Lower-right Y of preview */
GtkObject *hscroll_data, /* Horizontal scrollbar data */
*vscroll_data; /* Vertical scrollbar data */
GtkObject *hscroll_data, /* Horizontal scrollbar data */
*vscroll_data; /* Vertical scrollbar data */
GDrawable *drawable = NULL; /* Current image */
int sel_x1, /* Selection bounds */
GDrawable *drawable = NULL; /* Current image */
gint sel_x1, /* Selection bounds */
sel_y1,
sel_x2,
sel_y2;
int histogram = FALSE;
int img_bpp; /* Bytes-per-pixel in image */
gint histogram = FALSE;
gint img_bpp; /* Bytes-per-pixel in image */
gint run_filter = FALSE; /* True if we should run the filter */
int avg_width = 36;
gint avg_width = 36;
/*
* 'main()' - Main entry - just call gimp_main()...
*/
MAIN()
/*
* 'query()' - Respond to a plug-in query...
*/
MAIN ()
static void
query(void)
query (void)
{
static GParamDef args[] =
{
@ -152,38 +140,34 @@ query(void)
INIT_I18N();
gimp_install_procedure(PLUG_IN_NAME,
_("Destripe filter, used to remove vertical stripes caused by cheap scanners."),
_("This plug-in tries to remove vertical stripes from an image."),
"Marc Lehmann <pcg@goof.com>", "Marc Lehmann <pcg@goof.com>",
PLUG_IN_VERSION,
N_("<Image>/Filters/Enhance/Destripe..."),
"RGB*, GRAY*",
PROC_PLUG_IN, nargs, nreturn_vals, args, return_vals);
gimp_install_procedure (PLUG_IN_NAME,
_("Destripe filter, used to remove vertical stripes caused by cheap scanners."),
_("This plug-in tries to remove vertical stripes from an image."),
"Marc Lehmann <pcg@goof.com>", "Marc Lehmann <pcg@goof.com>",
PLUG_IN_VERSION,
N_("<Image>/Filters/Enhance/Destripe..."),
"RGB*, GRAY*",
PROC_PLUG_IN,
nargs, nreturn_vals,
args, return_vals);
}
/*
* 'run()' - Run the filter...
*/
static void
run(char *name, /* I - Name of filter program. */
int nparams, /* I - Number of parameters passed in */
GParam *param, /* I - Parameter values */
int *nreturn_vals, /* O - Number of return values */
GParam **return_vals) /* O - Return values */
run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
{
GRunModeType run_mode; /* Current run mode */
GStatusType status; /* Return status */
static GParam values[1]; /* Return values */
INIT_I18N_UI();
/*
* Initialize parameter data...
*/
/*
* Initialize parameter data...
*/
status = STATUS_SUCCESS;
run_mode = param[0].data.d_int32;
@ -194,145 +178,140 @@ run(char *name, /* I - Name of filter program. */
*nreturn_vals = 1;
*return_vals = values;
/*
* Get drawable information...
*/
/*
* Get drawable information...
*/
drawable = gimp_drawable_get(param[2].data.d_drawable);
drawable = gimp_drawable_get (param[2].data.d_drawable);
gimp_drawable_mask_bounds(drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2);
gimp_drawable_mask_bounds (drawable->id, &sel_x1, &sel_y1, &sel_x2, &sel_y2);
img_bpp = gimp_drawable_bpp(drawable->id);
img_bpp = gimp_drawable_bpp (drawable->id);
/*
* See how we will run
*/
/*
* See how we will run
*/
switch (run_mode)
{
case RUN_INTERACTIVE :
/*
* Possibly retrieve data...
*/
{
case RUN_INTERACTIVE:
/*
* Possibly retrieve data...
*/
gimp_get_data (PLUG_IN_NAME, &avg_width);
gimp_get_data(PLUG_IN_NAME, &avg_width);
/*
* Get information from the dialog...
*/
if (!destripe_dialog ())
return;
break;
/*
* Get information from the dialog...
*/
if (!destripe_dialog())
return;
break;
case RUN_NONINTERACTIVE :
/*
* Make sure all the arguments are present...
*/
if (nparams != 4)
status = STATUS_CALLING_ERROR;
else
avg_width = param[3].data.d_int32;
break;
case RUN_NONINTERACTIVE:
/*
* Make sure all the arguments are present...
*/
if (nparams != 4)
status = STATUS_CALLING_ERROR;
else
avg_width = param[3].data.d_int32;
break;
case RUN_WITH_LAST_VALS :
/*
* Possibly retrieve data...
*/
gimp_get_data(PLUG_IN_NAME, &avg_width);
break;
/*
* Possibly retrieve data...
*/
gimp_get_data (PLUG_IN_NAME, &avg_width);
break;
default :
status = STATUS_CALLING_ERROR;
break;
};
status = STATUS_CALLING_ERROR;
break;
};
/*
* Destripe the image...
*/
/*
* Destripe the image...
*/
if (status == STATUS_SUCCESS)
{
if ((gimp_drawable_is_rgb(drawable->id) ||
gimp_drawable_is_gray(drawable->id)))
{
/*
* Set the tile cache size...
*/
if ((gimp_drawable_is_rgb (drawable->id) ||
gimp_drawable_is_gray (drawable->id)))
{
/*
* Set the tile cache size...
*/
gimp_tile_cache_ntiles ((drawable->width + gimp_tile_width() - 1) /
gimp_tile_width());
gimp_tile_cache_ntiles((drawable->width + gimp_tile_width() - 1) /
gimp_tile_width());
/*
* Run!
*/
destripe ();
/*
* Run!
*/
/*
* If run mode is interactive, flush displays...
*/
if (run_mode != RUN_NONINTERACTIVE)
gimp_displays_flush();
destripe();
/*
* If run mode is interactive, flush displays...
*/
if (run_mode != RUN_NONINTERACTIVE)
gimp_displays_flush();
/*
* Store data...
*/
if (run_mode == RUN_INTERACTIVE)
gimp_set_data(PLUG_IN_NAME, &avg_width, sizeof(avg_width));
}
else
status = STATUS_EXECUTION_ERROR;
};
/*
* Reset the current run status...
*/
/*
* Store data...
*/
if (run_mode == RUN_INTERACTIVE)
gimp_set_data (PLUG_IN_NAME, &avg_width, sizeof(avg_width));
}
else
status = STATUS_EXECUTION_ERROR;
};
/*
* Reset the current run status...
*/
values[0].data.d_status = status;
/*
* Detach from the drawable...
*/
gimp_drawable_detach(drawable);
/*
* Detach from the drawable...
*/
gimp_drawable_detach (drawable);
}
static inline void
preview_draw_row (int x, int y, int w, guchar *row)
preview_draw_row (gint x,
gint y,
gint w,
guchar *row)
{
guchar *rgb = g_new(guchar, w * 3);
guchar *rgb = g_new (guchar, w * 3);
guchar *rgb_ptr;
int i;
gint i;
switch (img_bpp)
{
{
case 1:
case 2:
for (i = 0, rgb_ptr = rgb; i < w; i++, row += img_bpp, rgb_ptr += 3)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = *row;
for (i = 0, rgb_ptr = rgb; i < w; i++, row += img_bpp, rgb_ptr += 3)
rgb_ptr[0] = rgb_ptr[1] = rgb_ptr[2] = *row;
gtk_preview_draw_row(GTK_PREVIEW(preview), rgb, x, y, w);
break;
gtk_preview_draw_row (GTK_PREVIEW (preview), rgb, x, y, w);
break;
case 3:
gtk_preview_draw_row(GTK_PREVIEW(preview), row, x, y, w);
break;
gtk_preview_draw_row (GTK_PREVIEW (preview), row, x, y, w);
break;
case 4:
for (i = 0, rgb_ptr = rgb; i < w; i++, row += 4, rgb_ptr += 3)
rgb_ptr[0] = row[0],
rgb_ptr[1] = row[1],
for (i = 0, rgb_ptr = rgb; i < w; i++, row += 4, rgb_ptr += 3)
{
rgb_ptr[0] = row[0];
rgb_ptr[1] = row[1];
rgb_ptr[2] = row[2];
}
gtk_preview_draw_row(GTK_PREVIEW(preview), rgb, x, y, w);
break;
}
g_free(rgb);
gtk_preview_draw_row (GTK_PREVIEW (preview), rgb, x, y, w);
break;
}
g_free (rgb);
}
@ -549,35 +528,20 @@ destripe (void)
destripe_rect (sel_x1, sel_y1, sel_x2, sel_y2, FALSE);
}
static void
dialog_histogram_callback (GtkWidget *widget, /* I - Toggle button */
gpointer data) /* I - Data */
{
histogram = !histogram;
preview_update ();
}
/*
* 'destripe_dialog()' - Popup a dialog window for the filter box size...
*/
static gint
destripe_dialog (void)
{
GtkWidget *dialog; /* Dialog window */
GtkWidget *table; /* Table "container" for controls */
GtkWidget *ptable; /* Preview table */
GtkWidget *ftable; /* Filter table */
GtkWidget *frame; /* Frame for preview */
GtkWidget *scrollbar; /* Horizontal + vertical scroller */
GtkWidget *dialog;
GtkWidget *table;
GtkWidget *ptable;
GtkWidget *ftable;
GtkWidget *frame;
GtkWidget *scrollbar;
GtkWidget *button;
gint argc; /* Fake argc for GUI */
gchar **argv; /* Fake argv for GUI */
guchar *color_cube; /* Preview color cube... */
/*
* Initialize the program's display...
*/
GtkObject *adj;
gint argc;
gchar **argv;
guchar *color_cube;
argc = 1;
argv = g_new (gchar *, 1);
@ -601,10 +565,6 @@ destripe_dialog (void)
gtk_widget_set_default_visual (gtk_preview_get_visual ());
gtk_widget_set_default_colormap (gtk_preview_get_cmap ());
/*
* Dialog window...
*/
dialog = gimp_dialog_new (_("Destripe"), "destripe",
gimp_plugin_help_func, "filters/destripe.html",
GTK_WIN_POS_MOUSE,
@ -626,9 +586,9 @@ destripe_dialog (void)
*/
table = gtk_table_new (3, 3, FALSE);
gtk_container_set_border_width (GTK_CONTAINER (table), 6);
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_container_set_border_width (GTK_CONTAINER (table), 6);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), table,
FALSE, FALSE, 0);
gtk_widget_show (table);
@ -719,12 +679,13 @@ destripe_dialog (void)
* Box size (radius) control...
*/
dialog_create_ivalue (_("Width:"), GTK_TABLE (table), 2,
&avg_width, 2, MAX_AVG);
/*
* Show it and wait for the user to do something...
*/
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Width:"), SCALE_WIDTH, 0,
avg_width, 2, MAX_AVG, 1, 10, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_iscale_update),
&avg_width);
gtk_widget_show (dialog);
@ -733,23 +694,12 @@ destripe_dialog (void)
gtk_main ();
gdk_flush ();
/*
* Free the preview data...
*/
preview_exit ();
/*
* Return ok/cancel...
*/
return run_filter;
}
/*
* 'preview_init()' - Initialize the preview window...
*/
/* preview functions */
static void
preview_init (void)
@ -759,7 +709,6 @@ preview_init (void)
/*
* Setup for preview filter...
*/
width = preview_width * img_bpp;
preview_x1 = sel_x1;
@ -768,11 +717,6 @@ preview_init (void)
preview_y2 = preview_y1 + MIN (preview_height, sel_y2 -sel_y1);
}
/*
* 'preview_scroll_callback()' - Update the preview when a scrollbar is moved.
*/
static void
preview_scroll_callback (void)
{
@ -784,158 +728,39 @@ preview_scroll_callback (void)
preview_update ();
}
/*
* 'preview_update()' - Update the preview window.
*/
static void
preview_update (void)
{
destripe_rect (preview_x1, preview_y1, preview_x2, preview_y2, TRUE);
}
/*
* 'preview_exit()' - Free all memory used by the preview window...
*/
static void
preview_exit (void)
{
}
/*
* 'dialog_create_ivalue()' - Create an integer value control...
*/
/* dialog callbacks */
static void
dialog_create_ivalue (char *title, /* I - Label for control */
GtkTable *table, /* I - Table container to use */
int row, /* I - Row # for container */
gint *value, /* I - Value holder */
int left, /* I - Minimum value for slider */
int right) /* I - Maximum value for slider */
dialog_histogram_callback (GtkWidget *widget,
gpointer data)
{
GtkWidget *label, /* Control label */
*scale, /* Scale widget */
*entry; /* Text widget */
GtkObject *scale_data; /* Scale data */
gchar buf[256]; /* String buffer */
/*
* Label...
*/
label = gtk_label_new(title);
gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5);
gtk_table_attach(table, label, 0, 1, row, row + 1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(label);
/*
* Scale...
*/
scale_data = gtk_adjustment_new(*value, left, right, 1.0, 1.0, 1.0);
gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed",
(GtkSignalFunc) dialog_iscale_update,
value);
scale = gtk_hscale_new(GTK_ADJUSTMENT(scale_data));
gtk_widget_set_usize(scale, SCALE_WIDTH, 0);
gtk_table_attach(table, scale, 1, 2, row, row + 1,
GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0);
gtk_scale_set_draw_value(GTK_SCALE(scale), FALSE);
gtk_range_set_update_policy(GTK_RANGE(scale), GTK_UPDATE_CONTINUOUS);
gtk_widget_show(scale);
/*
* Text entry...
*/
entry = gtk_entry_new();
gtk_object_set_user_data(GTK_OBJECT(entry), scale_data);
gtk_object_set_user_data(scale_data, entry);
gtk_widget_set_usize(entry, ENTRY_WIDTH, 0);
g_snprintf(buf, sizeof (buf), "%d", *value);
gtk_entry_set_text(GTK_ENTRY(entry), buf);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
(GtkSignalFunc) dialog_ientry_update,
value);
gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show(entry);
histogram = !histogram;
preview_update ();
}
/*
* 'dialog_iscale_update()' - Update the value field using the scale.
*/
static void
dialog_iscale_update (GtkAdjustment *adjustment, /* I - New value */
gint *value) /* I - Current value */
dialog_iscale_update (GtkAdjustment *adjustment,
gint *value)
{
GtkWidget *entry; /* Text entry widget */
gchar buf[256]; /* Text buffer */
gimp_int_adjustment_update (adjustment, value);
if (*value != adjustment->value)
{
*value = adjustment->value;
entry = gtk_object_get_user_data(GTK_OBJECT(adjustment));
g_snprintf(buf, sizeof (buf), "%d", *value);
gtk_signal_handler_block_by_data(GTK_OBJECT(entry), value);
gtk_entry_set_text(GTK_ENTRY(entry), buf);
gtk_signal_handler_unblock_by_data(GTK_OBJECT(entry), value);
preview_update();
};
preview_update ();
}
/*
* 'dialog_ientry_update()' - Update the value field using the text entry.
*/
static void
dialog_ientry_update(GtkWidget *widget, /* I - Entry widget */
gint *value) /* I - Current value */
{
GtkAdjustment *adjustment;
gint new_value;
new_value = atoi(gtk_entry_get_text(GTK_ENTRY(widget)));
if (*value != new_value)
{
adjustment = gtk_object_get_user_data(GTK_OBJECT(widget));
if ((new_value >= adjustment->lower) &&
(new_value <= adjustment->upper))
{
*value = new_value;
adjustment->value = new_value;
gtk_signal_emit_by_name(GTK_OBJECT(adjustment), "value_changed");
preview_update();
};
};
}
/*
* 'dialog_ok_callback()' - Start the filter...
*/
static void
dialog_ok_callback (GtkWidget *widget, /* I - OK button widget */
gpointer data) /* I - Dialog window */
dialog_ok_callback (GtkWidget *widget,
gpointer data)
{
run_filter = TRUE;

View File

@ -48,7 +48,8 @@
/* Parameters applicable each time we save a gpb or gih, saved
* in the main gimp application between invocations of this plug-in.
*/
static struct {
static struct
{
/* Use by both gpb and gih: */
guint spacing;
guchar description[MAXDESCLEN+1];
@ -86,10 +87,10 @@ typedef struct
/* Declare some local functions.
*/
static void query (void);
static void run (char *name,
int nparams,
static void run (gchar *name,
gint nparams,
GParam *param,
int *nreturn_vals,
gint *nreturn_vals,
GParam **return_vals);
static void init_gtk (void);
@ -97,16 +98,16 @@ static void init_gtk (void);
GPlugInInfo PLUG_IN_INFO =
{
NULL, /* init_proc */
NULL, /* quit_proc */
query, /* query_proc */
run, /* run_proc */
NULL, /* init_proc */
NULL, /* quit_proc */
query, /* query_proc */
run, /* run_proc */
};
MAIN ()
static void
query ()
query (void)
{
static GParamDef gpb_save_args[] =
{
@ -164,7 +165,7 @@ query ()
}
static void
init_gtk ()
init_gtk (void)
{
gchar **argv;
gint argc;
@ -177,7 +178,6 @@ init_gtk ()
gtk_rc_parse (gimp_gtkrc ());
}
static void
adjustment_callback (GtkWidget *widget,
gpointer data)
@ -293,35 +293,32 @@ common_save_dialog (GtkWidget *dlg,
NULL);
gtk_table_set_row_spacings (GTK_TABLE (table), 10);
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
/*
* Spacing: __
*/
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
GTK_TABLE (table)->nrows + 1,
GTK_TABLE (table)->ncols);
label = gtk_label_new (_("Spacing (percent):"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new (_("Spacing (Percent):"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
adjustment = gtk_adjustment_new (info.spacing, 1, 1000, 1, 10, 10);
spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 1, 0);
gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinbutton),
GTK_SHADOW_NONE);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
gtk_widget_set_usize (spinbutton, 75, 0);
spinbutton = gimp_spin_button_new (&adjustment,
info.spacing, 1, 1000, 1, 10, 10,
1, 0);
box = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0);
gtk_table_attach (GTK_TABLE (table), box, 1, 2,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) adjustment_callback, &info.spacing);
GTK_SIGNAL_FUNC (adjustment_callback),
&info.spacing);
gtk_widget_show (spinbutton);
gtk_widget_show (box);
@ -332,7 +329,7 @@ common_save_dialog (GtkWidget *dlg,
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new (_("Description:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
@ -345,7 +342,8 @@ common_save_dialog (GtkWidget *dlg,
gtk_widget_set_usize (entry, 200, 0);
gtk_entry_set_text (GTK_ENTRY (entry), info.description);
gtk_signal_connect (GTK_OBJECT (entry), "changed",
(GtkSignalFunc) entry_callback, info.description);
GTK_SIGNAL_FUNC (entry_callback),
info.description);
gtk_widget_show (entry);
}
@ -366,13 +364,16 @@ gpb_save_dialog (void)
NULL);
/* The main table */
table = gtk_table_new (2, 0, FALSE);
gtk_container_border_width (GTK_CONTAINER (table), 10);
table = gtk_table_new (2, 2, FALSE);
gtk_container_set_border_width (GTK_CONTAINER (table), 6);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0);
gtk_widget_show (table);
common_save_dialog (dlg, table);
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_widget_show (dlg);
gtk_main ();
@ -421,7 +422,7 @@ gih_save_dialog (gint32 image_ID)
NULL);
/* The main table */
table = gtk_table_new (2, 0, FALSE);
table = gtk_table_new (2, 2, FALSE);
gtk_container_border_width (GTK_CONTAINER (table), 10);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0);
gtk_widget_show (table);
@ -431,26 +432,23 @@ gih_save_dialog (gint32 image_ID)
/*
* Cell size: __ x __ pixels
*/
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new ( _("Cell size:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new ( _("Cell Size:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
box = gtk_hbox_new (FALSE, 0);
adjustment = gtk_adjustment_new (gihparms.cellwidth,
2, gimp_image_width (image_ID), 1, 1, 1);
spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 1, 0);
gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinbutton),
GTK_SHADOW_NONE);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
gtk_widget_set_usize (spinbutton, 75, 0);
box = gtk_hbox_new (FALSE, 4);
spinbutton = gimp_spin_button_new (&adjustment,
gihparms.cellwidth,
2, gimp_image_width (image_ID), 1, 1, 1,
1, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, FALSE, 0);
layer_ID = gimp_image_get_layers (image_ID, &nlayers);
@ -461,21 +459,18 @@ gih_save_dialog (gint32 image_ID)
cellw_adjust.guides = NULL;
cellw_adjust.value = &gihparms.cellwidth;
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) size_adjustment_callback,
GTK_SIGNAL_FUNC (size_adjustment_callback),
&cellw_adjust);
gtk_widget_show (spinbutton);
label = gtk_label_new (" x ");
label = gtk_label_new ("x");
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
gtk_widget_show (label);
adjustment = gtk_adjustment_new (gihparms.cellheight,
2, gimp_image_height (image_ID), 1, 1, 1);
spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 1, 0);
gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinbutton),
GTK_SHADOW_NONE);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
gtk_widget_set_usize (spinbutton, 75, 0);
spinbutton = gimp_spin_button_new (&adjustment,
gihparms.cellheight,
gimp_image_height (image_ID), 1, 1, 1, 1,
1, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, FALSE, 0);
cellh_adjust.orientation = ORIENTATION_HORIZONTAL;
cellh_adjust.image = image_ID;
@ -484,11 +479,11 @@ gih_save_dialog (gint32 image_ID)
cellh_adjust.guides = NULL;
cellh_adjust.value = &gihparms.cellheight;
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) size_adjustment_callback,
GTK_SIGNAL_FUNC (size_adjustment_callback),
&cellh_adjust);
gtk_widget_show (spinbutton);
label = gtk_label_new ( _(" pixels"));
label = gtk_label_new ( _("Pixels"));
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
gtk_widget_show (label);
@ -506,29 +501,28 @@ gih_save_dialog (gint32 image_ID)
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new ( _("Number of cells:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new (_("Number of Cells:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
adjustment = gtk_adjustment_new (gihparms.ncells, 1, 1000, 1, 10, 10);
spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 1, 0);
gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinbutton),
GTK_SHADOW_NONE);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
gtk_widget_set_usize (spinbutton, 75, 0);
box = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0);
gtk_table_attach (GTK_TABLE (table), box, 1, 2,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) adjustment_callback, &gihparms.ncells);
gtk_widget_show (spinbutton);
gtk_widget_show (box);
spinbutton = gimp_spin_button_new (&adjustment,
gihparms.ncells, 1, 1000, 1, 10, 10,
1, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
GTK_SIGNAL_FUNC (adjustment_callback),
&gihparms.ncells);
gtk_widget_show (spinbutton);
if (gihparms.dim == 1)
cellw_adjust.ncells = cellh_adjust.ncells = adjustment;
else
@ -540,16 +534,16 @@ gih_save_dialog (gint32 image_ID)
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new ( _("Display as:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new (_("Display as:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
box = gtk_hbox_new (FALSE, 0);
sprintf (buffer, "%2d", gihparms.rows);
g_snprintf (buffer, sizeof (buffer), "%2d", gihparms.rows);
label = gtk_label_new (buffer);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
cellh_adjust.count_label = label;
@ -557,11 +551,11 @@ gih_save_dialog (gint32 image_ID)
cellh_adjust.other_count = &gihparms.cols;
gtk_widget_show (label);
label = gtk_label_new ( _(" rows of "));
label = gtk_label_new (_(" Rows of "));
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
gtk_widget_show (label);
sprintf (buffer, "%2d", gihparms.cols);
g_snprintf (buffer, sizeof (buffer), "%2d", gihparms.cols);
label = gtk_label_new (buffer);
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
cellw_adjust.count_label = label;
@ -569,15 +563,15 @@ gih_save_dialog (gint32 image_ID)
cellw_adjust.other_count = &gihparms.rows;
gtk_widget_show (label);
label = gtk_label_new ( _(" columns on each layer"));
label = gtk_label_new (_(" Columns on each Layer"));
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
gtk_widget_show (label);
label = gtk_label_new ( _(" (width mismatch!) "));
label = gtk_label_new (_(" (Width Mismatch!) "));
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
cellw_adjust.warning_label = label;
label = gtk_label_new ( _(" (height mismatch!) "));
label = gtk_label_new (_(" (Height Mismatch!) "));
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
cellh_adjust.warning_label = label;
@ -593,8 +587,8 @@ gih_save_dialog (gint32 image_ID)
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new ( _("Dimension:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new (_("Dimension:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
@ -623,30 +617,30 @@ gih_save_dialog (gint32 image_ID)
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new ( _("Ranks:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new (_("Ranks:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
dimtable = gtk_table_new (PIXPIPE_MAXDIM, 1, FALSE);
dimtable = gtk_table_new (1, PIXPIPE_MAXDIM, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (dimtable), 4);
for (i = 0; i < PIXPIPE_MAXDIM; i++)
{
adjustment = gtk_adjustment_new (gihparms.rank[i], 0, 100, 1, 1, 1);
spinbutton = gtk_spin_button_new (GTK_ADJUSTMENT (adjustment), 1, 0);
gtk_spin_button_set_shadow_type (GTK_SPIN_BUTTON (spinbutton),
GTK_SHADOW_NONE);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
gtk_widget_set_usize (spinbutton, 75, 0);
box = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0);
gtk_table_attach (GTK_TABLE (dimtable), box, i, i + 1, 0, 1,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 3, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) adjustment_callback, &gihparms.rank[i]);
gtk_widget_show (spinbutton);
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (box);
spinbutton = gimp_spin_button_new (&adjustment,
gihparms.rank[i], 0, 100, 1, 1, 1,
1, 0);
gtk_box_pack_start (GTK_BOX (box), spinbutton, FALSE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
GTK_SIGNAL_FUNC (adjustment_callback),
&gihparms.rank[i]);
gtk_widget_show (spinbutton);
if (i == 0)
{
if (gihparms.dim == 1)
@ -663,12 +657,12 @@ gih_save_dialog (gint32 image_ID)
/*
* Selection: ______ ______ ______ ______ ______
*/
gtk_table_resize (GTK_TABLE (table),
GTK_TABLE (table)->nrows + 1, GTK_TABLE (table)->ncols);
label = gtk_label_new ( _("Selection:"));
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
label = gtk_label_new (_("Selection:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1,
GTK_TABLE (table)->nrows - 1, GTK_TABLE (table)->nrows,
GTK_FILL, GTK_FILL, 0, 0);
@ -682,20 +676,22 @@ gih_save_dialog (gint32 image_ID)
cbitems = g_list_append (cbitems, "xtilt");
cbitems = g_list_append (cbitems, "ytilt");
box = gtk_hbox_new (FALSE, 0);
box = gtk_hbox_new (FALSE, 4);
for (i = 0; i < PIXPIPE_MAXDIM; i++)
{
cb = gtk_combo_new ();
gtk_combo_set_popdown_strings (GTK_COMBO (cb), cbitems);
if (gihparms.selection[i])
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (cb)->entry), gihparms.selection[i]);
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (cb)->entry)
, gihparms.selection[i]);
else
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (cb)->entry), "random");
gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (cb)->entry), FALSE);
gtk_box_pack_start (GTK_BOX (box), cb, FALSE, TRUE, 2);
gtk_box_pack_start (GTK_BOX (box), cb, FALSE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (GTK_COMBO (cb)->entry), "changed",
(GtkSignalFunc) cb_callback, &gihparms.selection[i]);
GTK_SIGNAL_FUNC (cb_callback),
&gihparms.selection[i]);
gtk_widget_show (cb);
}
@ -704,6 +700,9 @@ gih_save_dialog (gint32 image_ID)
GTK_SHRINK, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (box);
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_widget_show (dlg);
gtk_main ();
@ -1046,11 +1045,14 @@ run (char *name,
values[0].type = PARAM_STATUS;
values[0].data.d_status = STATUS_CALLING_ERROR;
if (run_mode == RUN_INTERACTIVE) {
INIT_I18N_UI();
} else {
INIT_I18N();
}
if (run_mode == RUN_INTERACTIVE)
{
INIT_I18N_UI();
}
else
{
INIT_I18N();
}
if (strcmp (name, "file_gpb_save") == 0)
{
@ -1083,7 +1085,7 @@ run (char *name,
/* Possibly retrieve data */
gimp_get_data ("file_gpb_save", &info);
if (!gpb_save_dialog ())
return;
goto finish_gpb;
break;
case RUN_NONINTERACTIVE: /* FIXME - need a real RUN_NONINTERACTIVE */
@ -1110,6 +1112,8 @@ run (char *name,
else
status = STATUS_EXECUTION_ERROR;
finish_gpb:
if (export == EXPORT_EXPORT)
gimp_image_delete (image_ID);
}
@ -1165,7 +1169,7 @@ run (char *name,
pixpipeparams_parse (pipe_parasite->data, &gihparms);
if (!gih_save_dialog (image_ID))
return;
goto finish_gih;
break;
case RUN_NONINTERACTIVE: /* FIXME - need a real RUN_NONINTERACTIVE */
@ -1197,8 +1201,11 @@ run (char *name,
else
status = STATUS_EXECUTION_ERROR;
finish_gih:
if (export == EXPORT_EXPORT)
gimp_image_delete (image_ID);
}
values[0].data.d_status = status;
}

View File

@ -45,8 +45,9 @@
#include <gtk/gtk.h>
#include "libgimp/gimp.h"
#include "libgimp/gimpui.h"
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include <libgimp/gimplimits.h>
#include "libgimp/stdplugins-intl.h"
@ -56,9 +57,6 @@
#define SCALE_WIDTH 150
#define MAX_NUM_FRAMES 100
#define CHECK_SIZE 32
#define CHECK_LIGHT 170
#define CHECK_DARK 85
typedef struct
{
@ -660,48 +658,53 @@ static void iwarp()
}
}
static guchar
iwarp_transparent_color(int x, int y)
iwarp_transparent_color (gint x,
gint y)
{
if ((y % CHECK_SIZE) > (CHECK_SIZE / 2)) {
if ((x % CHECK_SIZE) > (CHECK_SIZE / 2)) return CHECK_DARK;
else return CHECK_LIGHT;
}
else
if ((x % CHECK_SIZE) < (CHECK_SIZE / 2)) return CHECK_DARK;
else return CHECK_LIGHT;
if ((y % (GIMP_CHECK_SIZE * 4)) > (GIMP_CHECK_SIZE * 2))
{
if ((x % (GIMP_CHECK_SIZE * 4)) > (GIMP_CHECK_SIZE * 2))
return GIMP_CHECK_DARK * 255;
else
return GIMP_CHECK_LIGHT * 255;
}
else
if ((x % (GIMP_CHECK_SIZE * 4)) < (GIMP_CHECK_SIZE * 2))
return GIMP_CHECK_DARK * 255;
else
return GIMP_CHECK_LIGHT * 255;
}
static void
iwarp_cpy_images()
iwarp_cpy_images (void)
{
int i,j,k,p;
gfloat alpha;
guchar *srccolor, *dstcolor;
int i,j,k,p;
gfloat alpha;
guchar *srccolor, *dstcolor;
if (image_bpp == 1 || image_bpp ==3)
memcpy(dstimage,srcimage,preview_width *preview_height*preview_bpp);
else {
for (i=0; i< preview_width; i++)
for (j=0; j< preview_height; j++) {
p = (j*preview_width+i) ;
srccolor = srcimage + p*image_bpp;
alpha = (gfloat)srccolor[image_bpp-1]/255;
dstcolor = dstimage + p*preview_bpp;
for (k=0; k <preview_bpp; k++) {
*dstcolor++ = (guchar)(alpha *srccolor[k]+(1.0-alpha)*iwarp_transparent_color(i,j));
if (image_bpp == 1 || image_bpp ==3)
memcpy(dstimage,srcimage,preview_width *preview_height*preview_bpp);
else
{
for (i=0; i< preview_width; i++)
for (j=0; j< preview_height; j++)
{
p = (j*preview_width+i) ;
srccolor = srcimage + p*image_bpp;
alpha = (gfloat)srccolor[image_bpp-1]/255;
dstcolor = dstimage + p*preview_bpp;
for (k=0; k <preview_bpp; k++)
{
*dstcolor++ = (guchar)
(alpha *srccolor[k]+(1.0-alpha)*iwarp_transparent_color(i,j));
}
}
}
}
}
}
static void
iwarp_init()
static void
iwarp_init (void)
{
int y,x,xi,i;
GPixelRgn srcrgn;

View File

@ -68,6 +68,7 @@
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include <libgimp/gimplimits.h>
#include "libgimp/stdplugins-intl.h"
@ -81,12 +82,7 @@
#define PREVIEW_SIZE 128
#define SCALE_WIDTH 200
#define ENTRY_WIDTH 60
#define CHECK_SIZE 8
#define CHECK_DARK ((int) (1.0 / 3.0 * 255))
#define CHECK_LIGHT ((int) (2.0 / 3.0 * 255))
#define ENTRY_WIDTH 60
/***** Types *****/
@ -860,15 +856,15 @@ build_preview_source_image (void)
{
/* Checks */
if ((x / CHECK_SIZE) & 1)
if ((x / GIMP_CHECK_SIZE) & 1)
{
pcint.check_row_0[x] = CHECK_DARK;
pcint.check_row_1[x] = CHECK_LIGHT;
pcint.check_row_0[x] = GIMP_CHECK_DARK * 255;
pcint.check_row_1[x] = GIMP_CHECK_LIGHT * 255;
}
else
{
pcint.check_row_0[x] = CHECK_LIGHT;
pcint.check_row_1[x] = CHECK_DARK;
pcint.check_row_0[x] = GIMP_CHECK_LIGHT * 255;
pcint.check_row_1[x] = GIMP_CHECK_DARK * 255;
}
/* Thumbnail image */
@ -1108,7 +1104,7 @@ dialog_update_preview (void)
{
px = left;
if ((y / CHECK_SIZE) & 1)
if ((y / GIMP_CHECK_SIZE) & 1)
check_ul = pcint.check_row_0;
else
check_ul = pcint.check_row_1;

File diff suppressed because it is too large Load Diff

View File

@ -36,16 +36,19 @@
* 0.1 First version released.
*/
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include "config.h"
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include <libgimp/gimplimits.h>
#include "libgimp/stdplugins-intl.h"
/***** Magic numbers *****/
@ -54,11 +57,6 @@
#define SCALE_WIDTH 80
#define ENTRY_WIDTH 25
/* Even more stuff from Quartics plugins */
#define CHECK_SIZE 8
#define CHECK_DARK ((int) (1.0 / 3.0 * 255))
#define CHECK_LIGHT ((int) (2.0 / 3.0 * 255))
#define MAX_SEGS 6
#define PREVIEW_MASK GDK_EXPOSURE_MASK | \
@ -1275,12 +1273,12 @@ dialog_update_preview(void)
for (y = 0; y < preview_height; y++) {
if ((y / CHECK_SIZE) & 1) {
check_0 = CHECK_DARK;
check_1 = CHECK_LIGHT;
if ((y / GIMP_CHECK_SIZE) & 1) {
check_0 = GIMP_CHECK_DARK * 255;
check_1 = GIMP_CHECK_LIGHT * 255;
} else {
check_0 = CHECK_LIGHT;
check_1 = CHECK_DARK;
check_0 = GIMP_CHECK_LIGHT * 255;
check_1 = GIMP_CHECK_DARK * 255;
}
do_tiles_preview(tint.preview_row,
@ -1296,7 +1294,7 @@ dialog_update_preview(void)
for (i = 0, j = 0 ; i < sizeof(tint.preview_row); i += 4, j += 3 )
{
gint alphaval;
if (((i/4) / CHECK_SIZE) & 1)
if (((i/4) / GIMP_CHECK_SIZE) & 1)
check = check_0;
else
check = check_1;

View File

@ -58,6 +58,7 @@
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include <libgimp/gimplimits.h>
#define PLUG_IN_NAME "plug_in_whirl_pinch"
#define PLUG_IN_VERSION "May 1997, 2.09"
@ -68,11 +69,6 @@
#define SCALE_WIDTH 200
#define ENTRY_WIDTH 60
#define CHECK_SIZE 8
#define CHECK_DARK ((int) (1.0 / 3.0 * 255))
#define CHECK_LIGHT ((int) (2.0 / 3.0 * 255))
/***** Types *****/
typedef struct
@ -747,15 +743,15 @@ build_preview_source_image (void)
{
/* Checks */
if ((x / CHECK_SIZE) & 1)
if ((x / GIMP_CHECK_SIZE) & 1)
{
wpint.check_row_0[x] = CHECK_DARK;
wpint.check_row_1[x] = CHECK_LIGHT;
wpint.check_row_0[x] = GIMP_CHECK_DARK * 255;
wpint.check_row_1[x] = GIMP_CHECK_LIGHT * 255;
}
else
{
wpint.check_row_0[x] = CHECK_LIGHT;
wpint.check_row_1[x] = CHECK_DARK;
wpint.check_row_0[x] = GIMP_CHECK_LIGHT * 255;
wpint.check_row_1[x] = GIMP_CHECK_DARK * 255;
}
/* Thumbnail image */
@ -959,12 +955,12 @@ dialog_update_preview (void)
{
px = left;
if ((y / CHECK_SIZE) & 1)
if ((y / GIMP_CHECK_SIZE) & 1)
check_ul = wpint.check_row_0;
else
check_ul = wpint.check_row_1;
if (((preview_height - y - 1) / CHECK_SIZE) & 1)
if (((preview_height - y - 1) / GIMP_CHECK_SIZE) & 1)
check_lr = wpint.check_row_0;
else
check_lr = wpint.check_row_1;

View File

@ -33,9 +33,8 @@
#define PLUG_IN_NAME "wind"
#define COMPARE_WIDTH 3
#define COMPARE_WIDTH 3
#define ENTRY_WIDTH 40
#define SCALE_WIDTH 200
#define MIN_THRESHOLD 0
#define MAX_THRESHOLD 50
@ -74,31 +73,34 @@ typedef enum
static void query (void);
static void run (char *name, int nparams, GParam *param,
int *nreturn_vals, GParam **return_vals);
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals);
static void dialog_box (void);
static gint render_effect (GDrawable *drawable);
static void render_wind (GDrawable *drawable, gint threshold, gint strength,
direction_t direction, edge_t edge);
static void render_blast (GDrawable *drawable, gint threshold, gint strength,
direction_t direction, edge_t edge);
static void render_wind (GDrawable *drawable, gint threshold, gint strength,
direction_t direction, edge_t edge);
static void render_blast (GDrawable *drawable, gint threshold, gint strength,
direction_t direction, edge_t edge);
static gint render_blast_row (guchar *buffer, gint bytes, gint lpi,
gint threshold,
gint strength, edge_t edge);
static void render_wind_row (guchar *sb, gint bytes, gint lpi, gint threshold,
gint strength, edge_t edge);
static void render_wind_row (guchar *sb, gint bytes, gint lpi, gint threshold,
gint strength, edge_t edge);
static void msg_ok_callback (GtkWidget *widget, gpointer data);
static void ok_callback (GtkWidget *widget, gpointer data);
static void entry_callback (GtkWidget *widget, gpointer data);
static void radio_button_alg_callback (GtkWidget *widget, gpointer data);
static void radio_button_direction_callback (GtkWidget *widget, gpointer data);
static void get_derivative (guchar *pixel_R1, guchar *pixel_R2,
edge_t edge, gint *derivative_R,
gint *derivative_G, gint *derivative_B);
static void get_derivative (guchar *pixel_R1, guchar *pixel_R2,
edge_t edge, gint *derivative_R,
gint *derivative_G, gint *derivative_B);
static gint threshold_exceeded (guchar *pixel_R1, guchar *pixel_R2,
edge_t edge, gint threshold);
static void reverse_buffer (guchar *buffer, gint length, gint bytes);
static void reverse_buffer (guchar *buffer, gint length, gint bytes);
static void modal_message_box (gchar *text);
GPlugInInfo PLUG_IN_INFO =
@ -120,11 +122,11 @@ gint dialog_result = -1;
struct config_tag
{
gint threshold; /* derivative comparison for edge detection */
gint threshold; /* derivative comparison for edge detection */
direction_t direction; /* of wind, LEFT or RIGHT */
gint strength; /* how many pixels to bleed */
gint strength; /* how many pixels to bleed */
algorithm_t alg; /* which algorithm */
edge_t edge; /* controls abs, negation of derivative */
edge_t edge; /* controls abs, negation of derivative */
};
typedef struct config_tag config_t;
@ -159,18 +161,17 @@ query (void)
static int nargs = sizeof(args) / sizeof(args[0]);
static int nreturn_vals = 0;
gimp_install_procedure("plug_in_wind",
"Renders a wind effect.",
"Renders a wind effect.",
"Nigel Wetten",
"Nigel Wetten",
"1998",
"<Image>/Filters/Distorts/Wind...",
"RGB*",
PROC_PLUG_IN,
nargs, nreturn_vals,
args, return_vals);
return;
gimp_install_procedure ("plug_in_wind",
"Renders a wind effect.",
"Renders a wind effect.",
"Nigel Wetten",
"Nigel Wetten",
"1998",
"<Image>/Filters/Distorts/Wind...",
"RGB*",
PROC_PLUG_IN,
nargs, nreturn_vals,
args, return_vals);
}
static void
@ -710,94 +711,14 @@ ok_callback (GtkWidget *widget,
}
}
static void
entry_callback (GtkWidget *widget,
gpointer data)
{
GtkAdjustment *adjustment;
gint new_value;
new_value = atoi (gtk_entry_get_text (GTK_ENTRY (widget)));
if (*(gint *) data != new_value)
{
*(gint *) data = new_value;
adjustment = gtk_object_get_user_data (GTK_OBJECT (widget));
if ((new_value >= adjustment-> lower)
&& (new_value <= adjustment->upper))
{
adjustment->value = new_value;
gtk_signal_handler_block_by_data (GTK_OBJECT (adjustment), data);
gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "value_changed");
gtk_signal_handler_unblock_by_data (GTK_OBJECT (adjustment), data);
}
}
}
static void
radio_button_alg_callback (GtkWidget *widget,
gpointer data)
{
if (GTK_TOGGLE_BUTTON (widget)->active)
{
config.alg = (algorithm_t) data;
}
}
static void
radio_button_direction_callback (GtkWidget *widget,
gpointer data)
{
if (GTK_TOGGLE_BUTTON (widget)->active)
{
config.direction = (direction_t) data;
}
}
static void
radio_button_edge_callback (GtkWidget *widget,
gpointer data)
{
if (GTK_TOGGLE_BUTTON (widget)->active)
{
config.edge = (edge_t) data;
}
}
static void
adjustment_callback (GtkAdjustment *adjustment,
gpointer data)
{
GtkWidget *entry;
gchar buffer[50];
if (*(gint *)data != adjustment->value)
{
*(gint *) data = adjustment->value;
entry = gtk_object_get_user_data (GTK_OBJECT (adjustment));
g_snprintf (buffer, sizeof (buffer), "%d", *(gint *) data);
gtk_signal_handler_block_by_data (GTK_OBJECT (entry), data);
gtk_entry_set_text (GTK_ENTRY (entry), buffer);
gtk_signal_handler_unblock_by_data (GTK_OBJECT (entry), data);
}
}
static void
dialog_box (void)
{
GtkWidget *main_vbox;
GtkWidget *vbox;
GtkWidget *table;
GtkObject *adjustment;
GtkWidget *scale;
GtkWidget *rbutton;
GtkObject *adj;
GtkWidget *frame;
GtkWidget *dlg;
GtkWidget *label;
GtkWidget *entry;
GSList *list;
gchar *text_label;
gchar buffer[12];
gchar **argv;
gint argc;
@ -839,7 +760,7 @@ dialog_box (void)
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX(main_vbox), frame, FALSE, FALSE, 0);
table = gtk_table_new (3, 2, FALSE);
table = gtk_table_new (2, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
gtk_container_set_border_width (GTK_CONTAINER(table), 4);
@ -849,71 +770,27 @@ dialog_box (void)
slider and entry for threshold
***************************************************/
label = gtk_label_new ("Threshold:");
gtk_misc_set_alignment (GTK_MISC(label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0);
gtk_widget_show (label);
adjustment = gtk_adjustment_new (config.threshold, MIN_THRESHOLD,
MAX_THRESHOLD, 1.0, 1.0, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) adjustment_callback,
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
"Threshold:", SCALE_WIDTH, 0,
config.threshold,
MIN_THRESHOLD, MAX_THRESHOLD, 1.0, 10, 0,
THRESHOLD_TEXT, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_int_adjustment_update),
&config.threshold);
scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
gtk_widget_set_usize (scale, SCALE_WIDTH, 0);
gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 0, 1, GTK_FILL, 0, 0, 0);
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_CONTINUOUS);
gtk_widget_show (scale);
gimp_help_set_help_data (scale, THRESHOLD_TEXT, NULL);
entry = gtk_entry_new ();
gtk_object_set_user_data (GTK_OBJECT (entry), adjustment);
gtk_object_set_user_data (GTK_OBJECT (adjustment), entry);
gtk_widget_set_usize (entry, ENTRY_WIDTH, 0);
g_snprintf (buffer, sizeof (buffer), "%i", config.threshold);
gtk_entry_set_text (GTK_ENTRY (entry), buffer);
gtk_signal_connect(GTK_OBJECT (entry), "changed",
GTK_SIGNAL_FUNC (entry_callback),
(gpointer) &config.threshold);
gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 0, 1, GTK_FILL, 0, 0, 0);
gtk_widget_show (entry);
gimp_help_set_help_data (entry, THRESHOLD_TEXT, NULL);
/*****************************************************
slider and entry for strength of wind
****************************************************/
label = gtk_label_new ("Strength:");
gtk_misc_set_alignment (GTK_MISC(label), 1.0, 0.5);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0);
gtk_widget_show (label);
adjustment = gtk_adjustment_new (config.strength, MIN_STRENGTH,
MAX_STRENGTH, 1.0, 1.0, 0);
gtk_signal_connect (GTK_OBJECT (adjustment), "value_changed",
(GtkSignalFunc) adjustment_callback,
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
"Strength:", SCALE_WIDTH, 0,
config.strength,
MIN_STRENGTH, MAX_STRENGTH, 1.0, 10.0, 0,
STRENGTH_TEXT, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_int_adjustment_update),
&config.strength);
scale = gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
gtk_widget_set_usize (scale, SCALE_WIDTH, 0);
gtk_table_attach (GTK_TABLE (table), scale, 1, 2, 1, 2, GTK_FILL, 0, 0, 0);
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_CONTINUOUS);
gtk_widget_show (scale);
gimp_help_set_help_data (scale, STRENGTH_TEXT, NULL);
entry = gtk_entry_new ();
gtk_object_set_user_data (GTK_OBJECT (entry), adjustment);
gtk_object_set_user_data (GTK_OBJECT (adjustment), entry);
gtk_widget_set_usize (entry, ENTRY_WIDTH, 0);
g_snprintf (buffer, sizeof (buffer), "%i", config.strength);
gtk_entry_set_text (GTK_ENTRY (entry), buffer);
gtk_signal_connect (GTK_OBJECT (entry), "changed",
GTK_SIGNAL_FUNC (entry_callback),
(gpointer) &config.strength);
gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 1, 2, GTK_FILL, 0, 0, 0);
gtk_widget_show (entry);
gimp_help_set_help_data (entry, STRENGTH_TEXT, NULL);
gtk_widget_show (table);
gtk_widget_show (frame);
@ -930,124 +807,52 @@ dialog_box (void)
radio buttons for choosing wind rendering algorithm
******************************************************/
frame = gtk_frame_new ("Style");
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_table_attach (GTK_TABLE(table), frame, 0, 1, 0, 1,
frame = gimp_radio_group_new2 (TRUE, "Style",
gimp_radio_button_update,
&config.alg, (gpointer) config.alg,
"Wind", (gpointer) RENDER_WIND, NULL,
"Blast", (gpointer) RENDER_BLAST, NULL,
NULL);
gtk_table_attach (GTK_TABLE (table), frame, 0, 1, 0, 1,
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
text_label = "Wind";
rbutton = gtk_radio_button_new_with_label (NULL, text_label);
list = gtk_radio_button_group (GTK_RADIO_BUTTON (rbutton));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rbutton),
config.alg == RENDER_WIND ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_alg_callback),
(gpointer) RENDER_WIND);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show (rbutton);
gimp_help_set_help_data (rbutton, WIND_TEXT, NULL);
text_label = "Blast";
rbutton = gtk_radio_button_new_with_label (list, text_label);
list = gtk_radio_button_group (GTK_RADIO_BUTTON (rbutton));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (rbutton),
config.alg == RENDER_BLAST ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_alg_callback),
(gpointer) RENDER_BLAST);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show (rbutton);
gimp_help_set_help_data (rbutton, BLAST_TEXT, NULL);
gtk_widget_show (vbox);
gtk_widget_show (frame);
/******************************************************
radio buttons for choosing LEFT or RIGHT
**************************************************/
frame = gtk_frame_new ("Direction");
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
frame = gimp_radio_group_new2 (TRUE, "Direction",
gimp_radio_button_update,
&config.direction, (gpointer) config.direction,
"Left", (gpointer) LEFT, NULL,
"Right", (gpointer) RIGHT, NULL,
NULL);
gtk_table_attach (GTK_TABLE (table), frame, 1, 2, 0, 1,
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
rbutton = gtk_radio_button_new_with_label (NULL, "Left");
list = gtk_radio_button_group (GTK_RADIO_BUTTON (rbutton));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rbutton),
config.direction == LEFT ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_direction_callback),
(gpointer) LEFT);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show (rbutton);
gimp_help_set_help_data (rbutton, LEFT_TEXT, NULL);
rbutton = gtk_radio_button_new_with_label (list, "Right");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rbutton),
config.direction == RIGHT ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_direction_callback),
(gpointer) RIGHT);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show(rbutton);
gimp_help_set_help_data (rbutton, RIGHT_TEXT, NULL);
gtk_widget_show (vbox);
gtk_widget_show (frame);
/*****************************************************
radio buttons for choosing BOTH, LEADING, TRAILING
***************************************************/
frame = gtk_frame_new ("Edge Affected");
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
frame = gimp_radio_group_new2 (TRUE, "Edge Affected",
gimp_radio_button_update,
&config.edge, (gpointer) config.edge,
"Leading", (gpointer) LEADING, NULL,
"Trailing", (gpointer) TRAILING, NULL,
"Both", (gpointer) BOTH, NULL,
NULL);
gtk_table_attach (GTK_TABLE (table), frame, 2, 3, 0, 1,
GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0);
vbox = gtk_vbox_new (FALSE, 2);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
rbutton = gtk_radio_button_new_with_label (NULL, "Leading");
list = gtk_radio_button_group (GTK_RADIO_BUTTON (rbutton));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rbutton),
config.edge == LEADING ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_edge_callback),
(gpointer) LEADING);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show (rbutton);
gimp_help_set_help_data (rbutton, LEADING_TEXT, NULL);
rbutton = gtk_radio_button_new_with_label (list, "Trailing");
list = gtk_radio_button_group (GTK_RADIO_BUTTON (rbutton));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rbutton),
config.edge == TRAILING ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_edge_callback),
(gpointer) TRAILING);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show (rbutton);
gimp_help_set_help_data (rbutton, TRAILING_TEXT, NULL);
rbutton = gtk_radio_button_new_with_label (list, "Both");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rbutton),
config.edge == BOTH ? TRUE : FALSE);
gtk_signal_connect (GTK_OBJECT (rbutton), "toggled",
GTK_SIGNAL_FUNC (radio_button_edge_callback),
(gpointer) BOTH);
gtk_box_pack_start (GTK_BOX (vbox), rbutton, FALSE, FALSE, 0);
gtk_widget_show (rbutton);
gimp_help_set_help_data (rbutton, BOTH_TEXT, NULL);
gtk_widget_show (vbox);
gtk_widget_show (frame);
gtk_widget_show (table);
@ -1055,6 +860,4 @@ dialog_box (void)
gtk_main ();
gdk_flush ();
return;
}