s/gtk_container_border_width/gtk_container_set_border_width/

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

	* app/info_window.c:
	s/gtk_container_border_width/gtk_container_set_border_width/

	* plug-ins/common/engrave.c
	* plug-ins/common/noisify.c
	* plug-ins/common/oilify.c
	* plug-ins/common/polar.c
	* plug-ins/common/whirlpinch.c
	* plug-ins/ifscompose/Makefile.am
	* plug-ins/ifscompose/ifscompose.c
	* plug-ins/maze/Makefile.am
	* plug-ins/maze/maze_face.c
	* plug-ins/pagecurl/Makefile.am
	* plug-ins/pagecurl/pagecurl.c
	* plug-ins/struc/Makefile.am
	* plug-ins/struc/struc.c: more spinbuttons instead of entries,
	dialog layout, stuff...
This commit is contained in:
Michael Natterer
2000-01-14 17:06:35 +00:00
committed by Michael Natterer
parent 234bfc723d
commit e88e3e4454
17 changed files with 3115 additions and 3331 deletions

View File

@ -1,3 +1,23 @@
2000-01-14 Michael Natterer <mitch@gimp.org>
* app/info_window.c:
s/gtk_container_border_width/gtk_container_set_border_width/
* plug-ins/common/engrave.c
* plug-ins/common/noisify.c
* plug-ins/common/oilify.c
* plug-ins/common/polar.c
* plug-ins/common/whirlpinch.c
* plug-ins/ifscompose/Makefile.am
* plug-ins/ifscompose/ifscompose.c
* plug-ins/maze/Makefile.am
* plug-ins/maze/maze_face.c
* plug-ins/pagecurl/Makefile.am
* plug-ins/pagecurl/pagecurl.c
* plug-ins/struc/Makefile.am
* plug-ins/struc/struc.c: more spinbuttons instead of entries,
dialog layout, stuff...
Fri Jan 14 16:10:38 CET 2000 Sven Neumann <sven@gimp.org>
* plug-ins/FractalExplorer/Dialogs.c

View File

@ -69,7 +69,7 @@ static gchar *visual_classes[] =
N_("Direct Color"),
};
static gchar * info_window_title(GDisplay *gdisp);
static gchar * info_window_title (GDisplay *gdisp);
static void
get_shades (GDisplay *gdisp,
@ -197,7 +197,7 @@ info_window_image_preview_book (InfoDialog *info_win)
gtk_box_pack_start (GTK_BOX (hbox1), alignment, TRUE, TRUE, 0);
table2 = gtk_table_new (5, 2, TRUE);
gtk_container_border_width (GTK_CONTAINER (table2), 2);
gtk_container_set_border_width (GTK_CONTAINER (table2), 2);
gtk_widget_show (table2);
gtk_container_add (GTK_CONTAINER (frame), table2);
gtk_container_add (GTK_CONTAINER (alignment), frame);
@ -366,10 +366,10 @@ info_window_create (GDisplay *gdisp)
static InfoDialog *info_window_auto = NULL;
static gchar *
info_window_title(GDisplay *gdisp)
info_window_title (GDisplay *gdisp)
{
char *title;
gchar *title_buf;
gchar *title;
gchar *title_buf;
title = g_basename (gimage_filename (gdisp->gimage));
@ -378,7 +378,7 @@ info_window_title(GDisplay *gdisp)
title,
pdb_image_to_id (gdisp->gimage),
gdisp->instance);
return title_buf;
}
@ -411,7 +411,7 @@ info_window_change_display (GimpContext *context, /* NOT USED */
}
void
info_window_follow_auto()
info_window_follow_auto (void)
{
GDisplay * gdisp;
@ -437,9 +437,9 @@ info_window_follow_auto()
}
void
info_window_update_RGB (GDisplay *gdisp,
gdouble tx,
gdouble ty)
info_window_update_RGB (GDisplay *gdisp,
gdouble tx,
gdouble ty)
{
InfoWinData *iwd;
gchar buff[5];
@ -449,7 +449,7 @@ info_window_update_RGB (GDisplay *gdisp,
InfoDialog *info_win = gdisp->window_info_dialog;
gboolean force_update = FALSE;
if(!info_win && info_window_auto != NULL)
if (!info_win && info_window_auto != NULL)
{
info_win = info_window_auto;
}

View File

@ -69,7 +69,7 @@ static gchar *visual_classes[] =
N_("Direct Color"),
};
static gchar * info_window_title(GDisplay *gdisp);
static gchar * info_window_title (GDisplay *gdisp);
static void
get_shades (GDisplay *gdisp,
@ -197,7 +197,7 @@ info_window_image_preview_book (InfoDialog *info_win)
gtk_box_pack_start (GTK_BOX (hbox1), alignment, TRUE, TRUE, 0);
table2 = gtk_table_new (5, 2, TRUE);
gtk_container_border_width (GTK_CONTAINER (table2), 2);
gtk_container_set_border_width (GTK_CONTAINER (table2), 2);
gtk_widget_show (table2);
gtk_container_add (GTK_CONTAINER (frame), table2);
gtk_container_add (GTK_CONTAINER (alignment), frame);
@ -366,10 +366,10 @@ info_window_create (GDisplay *gdisp)
static InfoDialog *info_window_auto = NULL;
static gchar *
info_window_title(GDisplay *gdisp)
info_window_title (GDisplay *gdisp)
{
char *title;
gchar *title_buf;
gchar *title;
gchar *title_buf;
title = g_basename (gimage_filename (gdisp->gimage));
@ -378,7 +378,7 @@ info_window_title(GDisplay *gdisp)
title,
pdb_image_to_id (gdisp->gimage),
gdisp->instance);
return title_buf;
}
@ -411,7 +411,7 @@ info_window_change_display (GimpContext *context, /* NOT USED */
}
void
info_window_follow_auto()
info_window_follow_auto (void)
{
GDisplay * gdisp;
@ -437,9 +437,9 @@ info_window_follow_auto()
}
void
info_window_update_RGB (GDisplay *gdisp,
gdouble tx,
gdouble ty)
info_window_update_RGB (GDisplay *gdisp,
gdouble tx,
gdouble ty)
{
InfoWinData *iwd;
gchar buff[5];
@ -449,7 +449,7 @@ info_window_update_RGB (GDisplay *gdisp,
InfoDialog *info_win = gdisp->window_info_dialog;
gboolean force_update = FALSE;
if(!info_win && info_window_auto != NULL)
if (!info_win && info_window_auto != NULL)
{
info_win = info_window_auto;
}

View File

@ -69,7 +69,7 @@ static gchar *visual_classes[] =
N_("Direct Color"),
};
static gchar * info_window_title(GDisplay *gdisp);
static gchar * info_window_title (GDisplay *gdisp);
static void
get_shades (GDisplay *gdisp,
@ -197,7 +197,7 @@ info_window_image_preview_book (InfoDialog *info_win)
gtk_box_pack_start (GTK_BOX (hbox1), alignment, TRUE, TRUE, 0);
table2 = gtk_table_new (5, 2, TRUE);
gtk_container_border_width (GTK_CONTAINER (table2), 2);
gtk_container_set_border_width (GTK_CONTAINER (table2), 2);
gtk_widget_show (table2);
gtk_container_add (GTK_CONTAINER (frame), table2);
gtk_container_add (GTK_CONTAINER (alignment), frame);
@ -366,10 +366,10 @@ info_window_create (GDisplay *gdisp)
static InfoDialog *info_window_auto = NULL;
static gchar *
info_window_title(GDisplay *gdisp)
info_window_title (GDisplay *gdisp)
{
char *title;
gchar *title_buf;
gchar *title;
gchar *title_buf;
title = g_basename (gimage_filename (gdisp->gimage));
@ -378,7 +378,7 @@ info_window_title(GDisplay *gdisp)
title,
pdb_image_to_id (gdisp->gimage),
gdisp->instance);
return title_buf;
}
@ -411,7 +411,7 @@ info_window_change_display (GimpContext *context, /* NOT USED */
}
void
info_window_follow_auto()
info_window_follow_auto (void)
{
GDisplay * gdisp;
@ -437,9 +437,9 @@ info_window_follow_auto()
}
void
info_window_update_RGB (GDisplay *gdisp,
gdouble tx,
gdouble ty)
info_window_update_RGB (GDisplay *gdisp,
gdouble tx,
gdouble ty)
{
InfoWinData *iwd;
gchar buff[5];
@ -449,7 +449,7 @@ info_window_update_RGB (GDisplay *gdisp,
InfoDialog *info_win = gdisp->window_info_dialog;
gboolean force_update = FALSE;
if(!info_win && info_window_auto != NULL)
if (!info_win && info_window_auto != NULL)
{
info_win = info_window_auto;
}

View File

@ -30,187 +30,186 @@
#include <gtk/gtk.h>
#include "libgimp/gimp.h"
#include "libgimp/gimpui.h"
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include "libgimp/stdplugins-intl.h"
/* Some useful macros */
#define ENTRY_WIDTH 60
#define SCALE_WIDTH 125
#define TILE_CACHE_SIZE 16
#define SCALE_WIDTH 125
#define TILE_CACHE_SIZE 16
#define INTENSITY(r,g,b) (r * 0.30 + g * 0.59 + b * 0.11)
typedef struct {
gint height;
gint limit;
typedef struct
{
gint height;
gint limit;
} EngraveValues;
typedef struct {
gint run;
typedef struct
{
gint run;
} EngraveInterface;
static void query(void);
static void run(gchar * name,
gint nparams,
GParam * param,
gint * nreturn_vals,
GParam ** return_vals);
static void query (void);
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals);
static gint engrave_dialog(void);
static void engrave_ok_callback(GtkWidget * widget,
gpointer data);
static gint engrave_dialog (void);
static void engrave_ok_callback (GtkWidget *widget,
gpointer data);
static void engrave(GDrawable * drawable);
static void engrave_large(GDrawable * drawable, gint height, gint limit);
static void engrave_small(GDrawable * drawable, gint height, gint limit, gint tile_width);
static void engrave_sub(gint height, gint limit, gint bpp, gint color_n);
static void engrave_toggle_update (GtkWidget *widget,
gpointer data);
static void engrave_scale_update (GtkAdjustment *adjustment,
int *scale_val);
static void engrave_entry_update (GtkWidget *widget,
gint *value);
static void dialog_create_value (char *title,
GtkTable *table,
int row,
gint *value,
int left,
int right);
static void engrave (GDrawable *drawable);
static void engrave_large (GDrawable *drawable,
gint height,
gint limit);
static void engrave_small (GDrawable *drawable,
gint height,
gint limit,
gint tile_width);
static void engrave_sub (gint height,
gint limit,
gint bpp,
gint color_n);
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 */
};
static EngraveValues pvals =
{
10
10
};
static EngraveInterface pint =
{
FALSE /* run */
FALSE /* run */
};
MAIN()
MAIN ()
static void
query()
query (void)
{
static GParamDef args[] =
{
{PARAM_INT32, "run_mode", "Interactive, non-interactive"},
{PARAM_IMAGE, "image", "Input image (unused)"},
{PARAM_DRAWABLE, "drawable", "Input drawable"},
{PARAM_INT32, "height", "Resolution in pixels"},
{PARAM_INT32, "limit", "If true, limit line width"}
};
static GParamDef *return_vals = NULL;
static gint nargs = sizeof(args) / sizeof(args[0]);
static gint nreturn_vals = 0;
static GParamDef args[] =
{
{ PARAM_INT32, "run_mode", "Interactive, non-interactive" },
{ PARAM_IMAGE, "image", "Input image (unused)" },
{ PARAM_DRAWABLE, "drawable", "Input drawable" },
{ PARAM_INT32, "height", "Resolution in pixels" },
{ PARAM_INT32, "limit", "If true, limit line width" }
};
static GParamDef *return_vals = NULL;
static gint nargs = sizeof(args) / sizeof(args[0]);
static gint nreturn_vals = 0;
INIT_I18N();
INIT_I18N();
gimp_install_procedure("plug_in_engrave",
_("Engrave the contents of the specified drawable"),
_("Creates a black-and-white 'engraved' version of an image as seen in old illustrations"),
"Spencer Kimball & Peter Mattis, Eiichi Takamori, Torsten Martinsen",
"Spencer Kimball & Peter Mattis, Eiichi Takamori, Torsten Martinsen",
"1995,1996,1997",
N_("<Image>/Filters/Distorts/Engrave..."),
"RGBA, GRAYA",
PROC_PLUG_IN,
nargs, nreturn_vals,
args, return_vals);
gimp_install_procedure ("plug_in_engrave",
_("Engrave the contents of the specified drawable"),
_("Creates a black-and-white 'engraved' version of an image as seen in old illustrations"),
"Spencer Kimball & Peter Mattis, Eiichi Takamori, Torsten Martinsen",
"Spencer Kimball & Peter Mattis, Eiichi Takamori, Torsten Martinsen",
"1995,1996,1997",
N_("<Image>/Filters/Distorts/Engrave..."),
"RGBA, GRAYA",
PROC_PLUG_IN,
nargs, nreturn_vals,
args, return_vals);
}
static void
run(gchar * name,
gint nparams,
GParam * param,
gint * nreturn_vals,
GParam ** return_vals)
run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
GDrawable *drawable;
GRunModeType run_mode;
GStatusType status = STATUS_SUCCESS;
static GParam values[1];
GDrawable *drawable;
GRunModeType run_mode;
GStatusType status = STATUS_SUCCESS;
run_mode = param[0].data.d_int32;
run_mode = param[0].data.d_int32;
*nreturn_vals = 1;
*return_vals = values;
*nreturn_vals = 1;
*return_vals = values;
values[0].type = PARAM_STATUS;
values[0].data.d_status = status;
values[0].type = PARAM_STATUS;
values[0].data.d_status = status;
/* Get the specified drawable */
drawable = gimp_drawable_get(param[2].data.d_drawable);
/* Get the specified drawable */
drawable = gimp_drawable_get(param[2].data.d_drawable);
switch (run_mode) {
switch (run_mode)
{
case RUN_INTERACTIVE:
INIT_I18N_UI();
/* Possibly retrieve data */
gimp_get_data("plug_in_engrave", &pvals);
INIT_I18N_UI();
/* Possibly retrieve data */
gimp_get_data("plug_in_engrave", &pvals);
/* First acquire information with a dialog */
if (!engrave_dialog()) {
gimp_drawable_detach(drawable);
return;
/* First acquire information with a dialog */
if (!engrave_dialog ())
{
gimp_drawable_detach (drawable);
return;
}
break;
break;
case RUN_NONINTERACTIVE:
INIT_I18N();
/* Make sure all the arguments are there! */
if (nparams != 5)
status = STATUS_CALLING_ERROR;
if (status == STATUS_SUCCESS) {
pvals.height = param[3].data.d_int32;
pvals.limit = (param[4].data.d_int32) ? TRUE : FALSE;
INIT_I18N();
/* Make sure all the arguments are there! */
if (nparams != 5)
status = STATUS_CALLING_ERROR;
if (status == STATUS_SUCCESS)
{
pvals.height = param[3].data.d_int32;
pvals.limit = (param[4].data.d_int32) ? TRUE : FALSE;
}
if ((status == STATUS_SUCCESS) &&
pvals.height < 0)
status = STATUS_CALLING_ERROR;
break;
if ((status == STATUS_SUCCESS) &&
pvals.height < 0)
status = STATUS_CALLING_ERROR;
break;
case RUN_WITH_LAST_VALS:
INIT_I18N();
/* Possibly retrieve data */
gimp_get_data("plug_in_engrave", &pvals);
break;
INIT_I18N();
/* Possibly retrieve data */
gimp_get_data ("plug_in_engrave", &pvals);
break;
default:
break;
break;
}
if (status == STATUS_SUCCESS) {
gimp_progress_init( _("Engraving..."));
gimp_tile_cache_ntiles(TILE_CACHE_SIZE);
if (status == STATUS_SUCCESS)
{
gimp_progress_init (_("Engraving..."));
gimp_tile_cache_ntiles (TILE_CACHE_SIZE);
engrave(drawable);
engrave (drawable);
if (run_mode != RUN_NONINTERACTIVE)
gimp_displays_flush();
if (run_mode != RUN_NONINTERACTIVE)
gimp_displays_flush ();
/* Store data */
if (run_mode == RUN_INTERACTIVE)
gimp_set_data("plug_in_engrave", &pvals, sizeof(EngraveValues));
/* Store data */
if (run_mode == RUN_INTERACTIVE)
gimp_set_data ("plug_in_engrave", &pvals, sizeof (EngraveValues));
}
values[0].data.d_status = status;
values[0].data.d_status = status;
gimp_drawable_detach(drawable);
gimp_drawable_detach (drawable);
}
static gint
engrave_dialog (void)
{
@ -218,6 +217,7 @@ engrave_dialog (void)
GtkWidget *frame;
GtkWidget *table;
GtkWidget *toggle;
GtkObject *adj;
gchar **argv;
gint argc;
@ -248,24 +248,29 @@ engrave_dialog (void)
frame = gtk_frame_new (_("Parameter Settings"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0);
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);
gtk_container_add (GTK_CONTAINER (frame), table);
toggle = gtk_check_button_new_with_label (_("Limit line width"));
toggle = gtk_check_button_new_with_label (_("Limit Line Width"));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 0, 1, GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (engrave_toggle_update),
GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&pvals.limit);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), pvals.limit);
gtk_widget_show (toggle);
dialog_create_value (_("Height:"), GTK_TABLE (table), 1,
&pvals.height, 2.0, 16.0);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Height:"), SCALE_WIDTH, 0,
pvals.height, 2.0, 16.0, 1.0, 4.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_int_adjustment_update),
&pvals.height);
gtk_widget_show (frame);
gtk_widget_show (table);
@ -284,6 +289,7 @@ engrave_ok_callback (GtkWidget *widget,
gpointer data)
{
pint.run = TRUE;
gtk_widget_destroy (GTK_WIDGET (data));
}
@ -308,341 +314,255 @@ engrave_large (GDrawable *drawable,
gint height,
gint limit)
{
GPixelRgn src_rgn, dest_rgn;
guchar *src_row, *dest_row;
guchar *src, *dest;
gulong *average;
gint row, col, b, bpp;
gint x, y, y_step, inten, v;
gulong count;
gint x1, y1, x2, y2;
gint progress, max_progress;
gpointer pr;
GPixelRgn src_rgn, dest_rgn;
guchar *src_row, *dest_row;
guchar *src, *dest;
gulong *average;
gint row, col, b, bpp;
gint x, y, y_step, inten, v;
gulong count;
gint x1, y1, x2, y2;
gint progress, max_progress;
gpointer pr;
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
if (gimp_drawable_is_rgb(drawable->id))
bpp = 3;
else
bpp = 1;
average = g_new(gulong, bpp);
if (gimp_drawable_is_rgb(drawable->id))
bpp = 3;
else
bpp = 1;
average = g_new(gulong, bpp);
/* Initialize progress */
progress = 0;
max_progress = 2 * (x2 - x1) * (y2 - y1);
/* Initialize progress */
progress = 0;
max_progress = 2 * (x2 - x1) * (y2 - y1);
for (y = y1; y < y2; y += height - (y % height)) {
for (x = x1; x < x2; ++x) {
y_step = height - (y % height);
y_step = MIN(y_step, x2 - x);
for (y = y1; y < y2; y += height - (y % height))
{
for (x = x1; x < x2; ++x)
{
y_step = height - (y % height);
y_step = MIN(y_step, x2 - x);
gimp_pixel_rgn_init(&src_rgn, drawable, x, y, 1, y_step, FALSE, FALSE);
for (b = 0; b < bpp; b++)
average[b] = 0;
count = 0;
gimp_pixel_rgn_init(&src_rgn, drawable, x, y, 1, y_step, FALSE, FALSE);
for (b = 0; b < bpp; b++)
average[b] = 0;
count = 0;
for (pr = gimp_pixel_rgns_register(1, &src_rgn);
pr != NULL;
pr = gimp_pixel_rgns_process(pr)) {
src_row = src_rgn.data;
for (row = 0; row < src_rgn.h; row++) {
src = src_row;
for (col = 0; col < src_rgn.w; col++) {
for (b = 0; b < bpp; b++)
average[b] += src[b];
src += src_rgn.bpp;
count += 1;
for (pr = gimp_pixel_rgns_register(1, &src_rgn);
pr != NULL;
pr = gimp_pixel_rgns_process(pr))
{
src_row = src_rgn.data;
for (row = 0; row < src_rgn.h; row++)
{
src = src_row;
for (col = 0; col < src_rgn.w; col++)
{
for (b = 0; b < bpp; b++)
average[b] += src[b];
src += src_rgn.bpp;
count += 1;
}
src_row += src_rgn.rowstride;
src_row += src_rgn.rowstride;
}
/* Update progress */
progress += src_rgn.w * src_rgn.h;
gimp_progress_update((double) progress / (double) max_progress);
/* Update progress */
progress += src_rgn.w * src_rgn.h;
gimp_progress_update((double) progress / (double) max_progress);
}
if (count > 0)
for (b = 0; b < bpp; b++)
average[b] = (guchar) (average[b] / count);
if (count > 0)
for (b = 0; b < bpp; b++)
average[b] = (guchar) (average[b] / count);
if (bpp < 3)
inten = average[0]/254.0*height;
else
inten = INTENSITY(average[0],
average[1],
average[2])/254.0*height;
if (bpp < 3)
inten = average[0]/254.0*height;
else
inten = INTENSITY(average[0],
average[1],
average[2])/254.0*height;
gimp_pixel_rgn_init(&dest_rgn, drawable, x, y, 1, y_step, TRUE, TRUE);
for (pr = gimp_pixel_rgns_register(1, &dest_rgn);
pr != NULL;
pr = gimp_pixel_rgns_process(pr)) {
dest_row = dest_rgn.data;
for (row = 0; row < dest_rgn.h; row++) {
dest = dest_row;
v = inten > row ? 255 : 0;
if (limit) {
if (row == 0)
v = 255;
else if (row == height-1)
v = 0;
gimp_pixel_rgn_init(&dest_rgn, drawable, x, y, 1, y_step, TRUE, TRUE);
for (pr = gimp_pixel_rgns_register(1, &dest_rgn);
pr != NULL;
pr = gimp_pixel_rgns_process(pr))
{
dest_row = dest_rgn.data;
for (row = 0; row < dest_rgn.h; row++)
{
dest = dest_row;
v = inten > row ? 255 : 0;
if (limit)
{
if (row == 0)
v = 255;
else if (row == height-1)
v = 0;
}
for (b = 0; b < bpp; b++)
dest[b] = v;
dest_row += dest_rgn.rowstride;
for (b = 0; b < bpp; b++)
dest[b] = v;
dest_row += dest_rgn.rowstride;
}
/* Update progress */
progress += dest_rgn.w * dest_rgn.h;
gimp_progress_update((double) progress / (double) max_progress);
/* Update progress */
progress += dest_rgn.w * dest_rgn.h;
gimp_progress_update((double) progress / (double) max_progress);
}
}
}
g_free(average);
g_free(average);
/* update the engraved region */
gimp_drawable_flush(drawable);
gimp_drawable_merge_shadow(drawable->id, TRUE);
gimp_drawable_update(drawable->id, x1, y1, (x2 - x1), (y2 - y1));
/* update the engraved region */
gimp_drawable_flush(drawable);
gimp_drawable_merge_shadow(drawable->id, TRUE);
gimp_drawable_update(drawable->id, x1, y1, (x2 - x1), (y2 - y1));
}
typedef struct {
gint x, y, h;
gint width;
guchar *data;
typedef struct
{
gint x, y, h;
gint width;
guchar *data;
} PixelArea;
PixelArea area;
static void
engrave_small(GDrawable * drawable, gint height, gint limit, gint tile_width)
engrave_small (GDrawable *drawable,
gint height,
gint limit,
gint tile_width)
{
GPixelRgn src_rgn, dest_rgn;
gint bpp, color_n;
gint x1, y1, x2, y2;
gint progress, max_progress;
GPixelRgn src_rgn, dest_rgn;
gint bpp, color_n;
gint x1, y1, x2, y2;
gint progress, max_progress;
/*
For speed efficiency, operates on PixelAreas, whose each width and
height are less than tile size.
/*
For speed efficiency, operates on PixelAreas, whose each width and
height are less than tile size.
If both ends of area cannot be divided by height ( as
x1%height != 0 etc.), operates on the remainder pixels.
If both ends of area cannot be divided by height ( as
x1%height != 0 etc.), operates on the remainder pixels.
*/
*/
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
gimp_pixel_rgn_init(&src_rgn, drawable,
x1, y1, x2 - x1, y2 - y1, FALSE, FALSE);
gimp_pixel_rgn_init(&dest_rgn, drawable,
x1, y1, x2 - x1, y2 - y1, TRUE, TRUE);
gimp_drawable_mask_bounds(drawable->id, &x1, &y1, &x2, &y2);
gimp_pixel_rgn_init(&src_rgn, drawable, x1, y1, x2 - x1, y2 - y1, FALSE, FALSE);
gimp_pixel_rgn_init(&dest_rgn, drawable, x1, y1, x2 - x1, y2 - y1, TRUE, TRUE);
/* Initialize progress */
progress = 0;
max_progress = (x2 - x1) * (y2 - y1);
/* Initialize progress */
progress = 0;
max_progress = (x2 - x1) * (y2 - y1);
bpp = drawable->bpp;
if (gimp_drawable_is_rgb(drawable->id))
color_n = 3;
else
color_n = 1;
area.width = (tile_width / height) * height;
area.data = g_new(guchar, (glong) bpp * area.width * area.width);
for (area.y = y1; area.y < y2;
area.y += area.width - (area.y % area.width)) {
area.h = area.width - (area.y % area.width);
area.h = MIN(area.h, y2 - area.y);
for (area.x = x1; area.x < x2; ++area.x) {
gimp_pixel_rgn_get_rect(&src_rgn, area.data, area.x, area.y, 1, area.h);
engrave_sub(height, limit, bpp, color_n);
gimp_pixel_rgn_set_rect(&dest_rgn, area.data, area.x, area.y, 1, area.h);
/* Update progress */
progress += area.h;
gimp_progress_update((double) progress / (double) max_progress);
}
}
g_free(area.data);
/* update the engraved region */
gimp_drawable_flush(drawable);
gimp_drawable_merge_shadow(drawable->id, TRUE);
gimp_drawable_update(drawable->id, x1, y1, (x2 - x1), (y2 - y1));
}
static void
engrave_sub(gint height, gint limit, gint bpp, gint color_n)
{
glong average[3]; /* color_n <= 3 */
gint y, h, inten, v;
guchar *buf_row, *buf;
gint row;
gint rowstride;
gint count;
gint i;
/*
Since there's so many nested FOR's,
put a few of them here...
*/
rowstride = bpp;
for (y = area.y; y < area.y + area.h; y += height - (y % height)) {
h = height - (y % height);
h = MIN(h, area.y + area.h - y);
for (i = 0; i < color_n; i++)
average[i] = 0;
count = 0;
/* Read */
buf_row = area.data + (y - area.y) * rowstride;
for (row = 0; row < h; row++) {
buf = buf_row;
for (i = 0; i < color_n; i++)
average[i] += buf[i];
count++;
buf_row += rowstride;
}
/* Average */
if (count > 0)
for (i = 0; i < color_n; i++)
average[i] /= count;
if (bpp < 3)
inten = average[0]/254.0*height;
else
inten = INTENSITY(average[0],
average[1],
average[2])/254.0*height;
/* Write */
buf_row = area.data + (y - area.y) * rowstride;
for (row = 0; row < h; row++) {
buf = buf_row;
v = inten > row ? 255 : 0;
if (limit) {
if (row == 0)
v = 255;
else if (row == height-1)
v = 0;
}
for (i = 0; i < color_n; i++)
buf[i] = v;
buf_row += rowstride;
}
}
}
static void
engrave_toggle_update (GtkWidget *widget,
gpointer data)
{
int *toggle_val;
toggle_val = (int *) data;
if (GTK_TOGGLE_BUTTON (widget)->active)
*toggle_val = TRUE;
bpp = drawable->bpp;
if (gimp_drawable_is_rgb(drawable->id))
color_n = 3;
else
*toggle_val = FALSE;
}
color_n = 1;
area.width = (tile_width / height) * height;
area.data = g_new(guchar, (glong) bpp * area.width * area.width);
/*
* Thanks to Quartic for these.
*/
static void
dialog_create_value (char *title,
GtkTable *table,
int row,
gint *value,
int left,
int 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) engrave_scale_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), "%d", *value);
gtk_entry_set_text(GTK_ENTRY(entry), buf);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
(GtkSignalFunc) engrave_entry_update,
value);
gtk_table_attach (GTK_TABLE (table), entry, 2, 3, row, row + 1,
GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (entry);
for (area.y = y1; area.y < y2;
area.y += area.width - (area.y % area.width))
{
area.h = area.width - (area.y % area.width);
area.h = MIN(area.h, y2 - area.y);
for (area.x = x1; area.x < x2; ++area.x)
{
gimp_pixel_rgn_get_rect(&src_rgn, area.data, area.x, area.y, 1, area.h);
engrave_sub(height, limit, bpp, color_n);
gimp_pixel_rgn_set_rect(&dest_rgn, area.data, area.x, area.y, 1, area.h);
/* Update progress */
progress += area.h;
gimp_progress_update((double) progress / (double) max_progress);
}
}
g_free(area.data);
/* update the engraved region */
gimp_drawable_flush(drawable);
gimp_drawable_merge_shadow(drawable->id, TRUE);
gimp_drawable_update(drawable->id, x1, y1, (x2 - x1), (y2 - y1));
}
static void
engrave_entry_update(GtkWidget *widget, gint *value)
engrave_sub (gint height,
gint limit,
gint bpp,
gint color_n)
{
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");
} /* if */
} /* if */
}
glong average[3]; /* color_n <= 3 */
gint y, h, inten, v;
guchar *buf_row, *buf;
gint row;
gint rowstride;
gint count;
gint i;
static void
engrave_scale_update (GtkAdjustment *adjustment, gint *value)
{
GtkWidget *entry;
char buf[256];
/*
Since there's so many nested FOR's,
put a few of them here...
*/
if (*value != adjustment->value) {
*value = adjustment->value;
entry = gtk_object_get_user_data(GTK_OBJECT(adjustment));
sprintf(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);
} /* if */
rowstride = bpp;
for (y = area.y; y < area.y + area.h; y += height - (y % height))
{
h = height - (y % height);
h = MIN(h, area.y + area.h - y);
for (i = 0; i < color_n; i++)
average[i] = 0;
count = 0;
/* Read */
buf_row = area.data + (y - area.y) * rowstride;
for (row = 0; row < h; row++)
{
buf = buf_row;
for (i = 0; i < color_n; i++)
average[i] += buf[i];
count++;
buf_row += rowstride;
}
/* Average */
if (count > 0)
for (i = 0; i < color_n; i++)
average[i] /= count;
if (bpp < 3)
inten = average[0]/254.0*height;
else
inten = INTENSITY(average[0],
average[1],
average[2])/254.0*height;
/* Write */
buf_row = area.data + (y - area.y) * rowstride;
for (row = 0; row < h; row++)
{
buf = buf_row;
v = inten > row ? 255 : 0;
if (limit)
{
if (row == 0)
v = 255;
else if (row == height-1)
v = 0;
}
for (i = 0; i < color_n; i++)
buf[i] = v;
buf_row += rowstride;
}
}
}

View File

@ -40,9 +40,8 @@
#include "libgimp/stdplugins-intl.h"
#define ENTRY_WIDTH 60
#define SCALE_WIDTH 125
#define TILE_CACHE_SIZE 16
#define SCALE_WIDTH 125
#define TILE_CACHE_SIZE 16
typedef struct
{
@ -70,25 +69,13 @@ static gdouble gauss (void);
static void noisify_ok_callback (GtkWidget *widget,
gpointer data);
static void noisify_toggle_update (GtkWidget *widget,
gpointer data);
static void noisify_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void noisify_entry_update (GtkWidget *widget,
gdouble *value);
static void dialog_create_value (char *title,
GtkTable *table,
int row,
gdouble *value,
double left,
double right);
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 */
};
static NoisifyVals nvals =
@ -316,6 +303,7 @@ noisify_dialog (gint channels)
GtkWidget *toggle;
GtkWidget *frame;
GtkWidget *table;
GtkObject *adj;
gchar *buffer;
gchar **argv;
gint argc;
@ -359,52 +347,115 @@ noisify_dialog (gint channels)
toggle = gtk_check_button_new_with_label (_("Independent"));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 0, 1, GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
GTK_SIGNAL_FUNC (noisify_toggle_update),
GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&nvals.independent);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), nvals.independent);
gtk_widget_show (toggle);
if (channels == 1)
{
dialog_create_value (_("Gray:"), GTK_TABLE (table), 1,
&nvals.noise[0], 0.0, 1.0);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Gray:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[0]);
}
else if (channels == 2)
{
dialog_create_value (_("Gray:"), GTK_TABLE (table), 1,
&nvals.noise[0], 0.0, 1.0);
dialog_create_value (_("Alpha:"), GTK_TABLE (table), 2,
&nvals.noise[1], 0.0, 1.0);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Gray:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[0]);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Alpha:"), SCALE_WIDTH, 0,
nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[1]);
}
else if (channels == 3)
{
dialog_create_value (_("Red:"), GTK_TABLE (table), 1,
&nvals.noise[0], 0.0, 1.0);
dialog_create_value (_("Green:"), GTK_TABLE (table), 2,
&nvals.noise[1], 0.0, 1.0);
dialog_create_value (_("Blue:"), GTK_TABLE (table), 3,
&nvals.noise[2], 0.0, 1.0);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Red:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[0]);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Green:"), SCALE_WIDTH, 0,
nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[1]);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
_("Blue:"), SCALE_WIDTH, 0,
nvals.noise[2], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[2]);
}
else if (channels == 4)
{
dialog_create_value (_("Red:"), GTK_TABLE (table), 1,
&nvals.noise[0], 0.0, 1.0);
dialog_create_value (_("Green:"), GTK_TABLE (table), 2,
&nvals.noise[1], 0.0, 1.0);
dialog_create_value (_("Blue:"), GTK_TABLE (table), 3,
&nvals.noise[2], 0.0, 1.0);
dialog_create_value (_("Alpha:"), GTK_TABLE (table), 4,
&nvals.noise[3], 0.0, 1.0);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Red:"), SCALE_WIDTH, 0,
nvals.noise[0], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[0]);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
_("Green:"), SCALE_WIDTH, 0,
nvals.noise[1], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[1]);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3,
_("Blue:"), SCALE_WIDTH, 0,
nvals.noise[2], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[2]);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 4,
_("Alpha:"), SCALE_WIDTH, 0,
nvals.noise[3], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[3]);
}
else
{
for (i = 0; i < channels; i++)
{
buffer = g_strdup_printf (_("Channel #%d"), i);
dialog_create_value (buffer, GTK_TABLE(table), i + 1,
&nvals.noise[i], 0.0, 1.0);
buffer = g_strdup_printf (_("Channel #%d:"), i);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, i + 1,
buffer, SCALE_WIDTH, 0,
nvals.noise[i], 0.0, 1.0, 0.01, 0.1, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&nvals.noise[i]);
g_free (buffer);
}
}
@ -440,126 +491,11 @@ gauss (void)
return sum * 5.28596089837e-5 - 3.46410161514;
}
/* Noisify interface functions */
static void
noisify_ok_callback (GtkWidget *widget,
gpointer data)
{
noise_int.run = TRUE;
gtk_widget_destroy (GTK_WIDGET (data));
}
static void
noisify_toggle_update (GtkWidget *widget,
gpointer data)
{
int *toggle_val;
toggle_val = (int *) data;
if (GTK_TOGGLE_BUTTON (widget)->active)
*toggle_val = TRUE;
else
*toggle_val = FALSE;
}
/*
* Thanks to Quartic for these.
*/
static void
dialog_create_value (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,
(right - left) / 200.0,
(right - left) / 200.0,
0.0);
gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed",
(GtkSignalFunc) noisify_scale_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_scale_set_digits(GTK_SCALE(scale), 3);
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) noisify_entry_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
noisify_entry_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");
}
}
}
static void
noisify_scale_update (GtkAdjustment *adjustment,
gdouble *value)
{
GtkWidget *entry;
gchar buf[256];
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);
}
}

View File

@ -29,70 +29,59 @@
#include <gtk/gtk.h>
#include "libgimp/gimp.h"
#include "libgimp/gimpui.h"
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include "libgimp/stdplugins-intl.h"
#define ENTRY_WIDTH 30
#define SCALE_WIDTH 125
#define HISTSIZE 256
#define SCALE_WIDTH 125
#define HISTSIZE 256
#define MODE_RGB 0
#define MODE_INTEN 1
#define MODE_RGB 0
#define MODE_INTEN 1
#define INTENSITY(p) ((unsigned int) (p[0]*77+p[1]*150+p[2]*29) >> 8)
#define INTENSITY(p) ((guint) (p[0]*77+p[1]*150+p[2]*29) >> 8)
typedef struct {
typedef struct
{
gdouble mask_size;
gint mode;
} OilifyVals;
typedef struct {
typedef struct
{
gint run;
} OilifyInterface;
/* Declare 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 oilify_rgb (GDrawable * drawable);
static void oilify_intensity (GDrawable * drawable);
static gint oilify_dialog ();
static void oilify_rgb (GDrawable *drawable);
static void oilify_intensity (GDrawable *drawable);
static void oilify_ok_callback (GtkWidget *widget,
gpointer data);
static void oilify_scale_update (GtkAdjustment *adjustment,
double *scale_val);
static void oilify_entry_update (GtkWidget *widget,
gdouble *value);
static void dialog_create_value (char *title,
GtkTable *table,
int row,
gdouble *value,
double left,
double right);
static gint oilify_dialog (void);
static void oilify_toggle_update (GtkWidget *widget,
gpointer data);
static void oilify_ok_callback (GtkWidget *widget,
gpointer data);
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 */
};
static OilifyVals ovals =
{
7.0, /* mask size */
0 /* mode */
7.0, /* mask size */
0 /* mode */
};
static OilifyInterface oint =
@ -104,7 +93,7 @@ static OilifyInterface oint =
MAIN ()
static void
query ()
query (void)
{
static GParamDef args[] =
{
@ -134,10 +123,10 @@ query ()
}
static void
run (char *name,
int nparams,
run (gchar *name,
gint nparams,
GParam *param,
int *nreturn_vals,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
@ -258,9 +247,12 @@ oilify_rgb (GDrawable *drawable)
n = (int) ovals.mask_size / 2;
gimp_pixel_rgn_init (&dest_rgn, drawable, x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE);
gimp_pixel_rgn_init (&dest_rgn, drawable,
x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE);
for (pr1 = gimp_pixel_rgns_register (1, &dest_rgn); pr1 != NULL; pr1 = gimp_pixel_rgns_process (pr1))
for (pr1 = gimp_pixel_rgns_register (1, &dest_rgn);
pr1 != NULL;
pr1 = gimp_pixel_rgns_process (pr1))
{
dest_row = dest_rgn.data;
@ -279,9 +271,12 @@ oilify_rgb (GDrawable *drawable)
x4 = CLAMP ((x + n + 1), x1, x2);
y4 = CLAMP ((y + n + 1), y1, y2);
gimp_pixel_rgn_init (&src_rgn, drawable, x3, y3, (x4 - x3), (y4 - y3), FALSE, FALSE);
gimp_pixel_rgn_init (&src_rgn, drawable,
x3, y3, (x4 - x3), (y4 - y3), FALSE, FALSE);
for (pr2 = gimp_pixel_rgns_register (1, &src_rgn); pr2 != NULL; pr2 = gimp_pixel_rgns_process (pr2))
for (pr2 = gimp_pixel_rgns_register (1, &src_rgn);
pr2 != NULL;
pr2 = gimp_pixel_rgns_process (pr2))
{
src_row = src_rgn.data;
@ -364,9 +359,12 @@ oilify_intensity (GDrawable *drawable)
n = (int) ovals.mask_size / 2;
gimp_pixel_rgn_init (&dest_rgn, drawable, x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE);
gimp_pixel_rgn_init (&dest_rgn, drawable,
x1, y1, (x2 - x1), (y2 - y1), TRUE, TRUE);
for (pr1 = gimp_pixel_rgns_register (1, &dest_rgn); pr1 != NULL; pr1 = gimp_pixel_rgns_process (pr1))
for (pr1 = gimp_pixel_rgns_register (1, &dest_rgn);
pr1 != NULL;
pr1 = gimp_pixel_rgns_process (pr1))
{
dest_row = dest_rgn.data;
@ -385,9 +383,12 @@ oilify_intensity (GDrawable *drawable)
x4 = CLAMP ((x + n + 1), x1, x2);
y4 = CLAMP ((y + n + 1), y1, y2);
gimp_pixel_rgn_init (&src_rgn, drawable, x3, y3, (x4 - x3), (y4 - y3), FALSE, FALSE);
gimp_pixel_rgn_init (&src_rgn, drawable,
x3, y3, (x4 - x3), (y4 - y3), FALSE, FALSE);
for (pr2 = gimp_pixel_rgns_register (1, &src_rgn); pr2 != NULL; pr2 = gimp_pixel_rgns_process (pr2))
for (pr2 = gimp_pixel_rgns_register (1, &src_rgn);
pr2 != NULL;
pr2 = gimp_pixel_rgns_process (pr2))
{
src_row = src_rgn.data;
@ -440,6 +441,7 @@ oilify_dialog (void)
GtkWidget *frame;
GtkWidget *table;
GtkWidget *toggle;
GtkWidget *adj;
gchar **argv;
gint argc;
@ -469,21 +471,30 @@ oilify_dialog (void)
/* parameter settings */
frame = gtk_frame_new (_("Parameter Settings"));
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
gtk_container_border_width (GTK_CONTAINER (frame), 10);
gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0);
table = gtk_table_new (2, 3, FALSE);
gtk_container_border_width (GTK_CONTAINER (table), 10);
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);
gtk_container_add (GTK_CONTAINER (frame), table);
toggle = gtk_check_button_new_with_label (_("Use intensity algorithm"));
toggle = gtk_check_button_new_with_label (_("Use Intensity Algorithm"));
gtk_table_attach (GTK_TABLE (table), toggle, 0, 2, 0, 1, GTK_FILL, 0, 0, 0);
gtk_signal_connect (GTK_OBJECT (toggle), "toggled",
(GtkSignalFunc) oilify_toggle_update,
GTK_SIGNAL_FUNC (gimp_toggle_button_update),
&ovals.mode);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), ovals.mode);
gtk_widget_show (toggle);
dialog_create_value(_("Mask Size"), GTK_TABLE(table), 1, &ovals.mask_size, 3.0, 50.0);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
_("Mask Size:"), SCALE_WIDTH, 0,
ovals.mask_size, 3.0, 50.0, 1.0, 5.0, 0,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (gimp_double_adjustment_update),
&ovals.mask_size);
gtk_widget_show (frame);
gtk_widget_show (table);
@ -495,112 +506,11 @@ oilify_dialog (void)
return oint.run;
}
/* Oilify interface functions */
static void
oilify_ok_callback (GtkWidget *widget,
gpointer data)
{
oint.run = TRUE;
gtk_widget_destroy (GTK_WIDGET (data));
}
/*
* Thanks to Quartic for these.
*/
static void
dialog_create_value(char *title, GtkTable *table, int row, gdouble *value, double left, double right)
{
GtkWidget *label;
GtkWidget *scale;
GtkWidget *entry;
GtkObject *scale_data;
char buf[256];
label = gtk_label_new(title);
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
gtk_table_attach(table, label, 0, 1, row, row + 1, GTK_FILL, GTK_FILL, 4, 0);
gtk_widget_show(label);
scale_data = gtk_adjustment_new(*value, left, right, 1.0, 5.0, 5.0);
gtk_signal_connect(GTK_OBJECT(scale_data), "value_changed",
(GtkSignalFunc) oilify_scale_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_scale_set_digits(GTK_SCALE(scale), 3);
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);
sprintf(buf, "%.0f", *value);
gtk_entry_set_text(GTK_ENTRY(entry), buf);
gtk_signal_connect(GTK_OBJECT(entry), "changed",
(GtkSignalFunc) oilify_entry_update,
value);
gtk_table_attach(GTK_TABLE(table), entry, 2, 3, row, row + 1, GTK_FILL, GTK_FILL, 4, 0);
gtk_widget_show(entry);
}
static void
oilify_entry_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");
} /* if */
} /* if */
}
static void
oilify_scale_update (GtkAdjustment *adjustment, gdouble *value)
{
GtkWidget *entry;
char buf[256];
if (*value != adjustment->value) {
adjustment->value = (int) adjustment->value | 1;
*value = adjustment->value;
entry = gtk_object_get_user_data(GTK_OBJECT(adjustment));
sprintf(buf, "%.0f", *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);
} /* if */
}
static void
oilify_toggle_update (GtkWidget *widget,
gpointer data)
{
int *toggle_val;
toggle_val = (int *) data;
if (GTK_TOGGLE_BUTTON (widget)->active)
*toggle_val = MODE_INTEN;
else
*toggle_val = MODE_RGB;
}

File diff suppressed because it is too large Load Diff

View File

@ -45,7 +45,6 @@
* because it came out of merging the old Whirl 2.08 and Pinch 2.08
* plug-ins. */
#include "config.h"
#include <signal.h>
@ -108,10 +107,10 @@ typedef struct
/***** Prototypes *****/
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 whirl_pinch (void);
@ -132,11 +131,7 @@ static void build_preview_source_image (void);
static gint whirl_pinch_dialog (void);
static void dialog_update_preview (void);
static void dialog_create_value (char *title, GtkTable *table, int row,
gdouble *value,
double left, double right, double step);
static void dialog_scale_update (GtkAdjustment *adjustment, gdouble *value);
static void dialog_entry_update (GtkWidget *widget, gdouble *value);
static void dialog_ok_callback (GtkWidget *widget, gpointer data);
@ -221,10 +216,10 @@ query (void)
}
static void
run (char *name,
int nparams,
run (gchar *name,
gint nparams,
GParam *param,
int *nreturn_vals,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
@ -798,10 +793,11 @@ build_preview_source_image (void)
static gint
whirl_pinch_dialog (void)
{
GtkWidget *dialog;
GtkWidget *top_table;
GtkWidget *frame;
GtkWidget *table;
GtkWidget *dialog;
GtkWidget *top_table;
GtkWidget *frame;
GtkWidget *table;
GtkObject *adj;
gint argc;
gchar **argv;
guchar *color_cube;
@ -875,12 +871,29 @@ whirl_pinch_dialog (void)
GTK_EXPAND | GTK_FILL, 0, 0, 0);
gtk_widget_show (table);
dialog_create_value ("Whirl Angle:", GTK_TABLE (table), 0, &wpvals.whirl,
-360.0, 360.0, 1.0);
dialog_create_value ("Pinch Amount:", GTK_TABLE (table), 1, &wpvals.pinch,
-1.0, 1.0, 0.01);
dialog_create_value ("Radius:", GTK_TABLE (table), 2, &wpvals.radius,
0.0, 2.0, 0.01);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
"Whirl Angle:", SCALE_WIDTH, 0,
wpvals.whirl, -360.0, 360.0, 1.0, 15.0, 2,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_scale_update),
&wpvals.whirl);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 1,
"Pinch Amount:", SCALE_WIDTH, 0,
wpvals.pinch, -1.0, 1.0, 0.01, 0.1, 3,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_scale_update),
&wpvals.pinch);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 2,
"Radius:", SCALE_WIDTH, 0,
wpvals.radius, 0.0, 2.0, 0.01, 0.1, 3,
NULL, NULL);
gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
GTK_SIGNAL_FUNC (dialog_scale_update),
&wpvals.radius);
/* Done */
@ -1020,104 +1033,13 @@ dialog_update_preview (void)
gdk_flush ();
}
static void
dialog_create_value (char *title,
GtkTable *table,
int row,
gdouble *value,
double left,
double right,
double step)
{
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,
step,
step,
0.0);
gtk_signal_connect (GTK_OBJECT (scale_data), "value_changed",
(GtkSignalFunc) dialog_scale_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_scale_set_digits (GTK_SCALE (scale), 3);
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.3f", *value);
gtk_entry_set_text (GTK_ENTRY (entry), buf);
gtk_signal_connect (GTK_OBJECT (entry), "changed",
(GtkSignalFunc) dialog_entry_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_scale_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.3f", *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_entry_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 ();
}
}
dialog_update_preview ();
}
static void
@ -1125,5 +1047,6 @@ dialog_ok_callback (GtkWidget *widget,
gpointer data)
{
wpint.run = TRUE;
gtk_widget_destroy (GTK_WIDGET (data));
}

View File

@ -18,6 +18,7 @@ INCLUDES = \
-I$(includedir)
LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)

File diff suppressed because it is too large Load Diff

View File

@ -20,6 +20,7 @@ INCLUDES = \
-I$(includedir)
LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,7 @@ INCLUDES = \
-I$(includedir)
LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)

File diff suppressed because it is too large Load Diff

View File

@ -17,6 +17,7 @@ INCLUDES = \
-I$(includedir)
LDADD = \
$(top_builddir)/libgimp/libgimpui.la \
$(top_builddir)/libgimp/libgimp.la \
$(GTK_LIBS) \
$(INTLLIBS)

View File

@ -31,51 +31,67 @@
*
*/
#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include "struc.h"
#include "gtk/gtk.h"
#include "config.h"
#include "libgimp/gimp.h"
#include <gtk/gtk.h>
#include <libgimp/gimp.h>
#include <libgimp/gimpui.h>
#include "libgimp/stdplugins-intl.h"
#include "struc.h"
/* --- Typedefs --- */
typedef struct {
enum
{
TOP_RIGHT,
TOP_LEFT,
BOTTOM_LEFT,
BOTTOM_RIGHT
};
typedef struct
{
gint direction;
gint depth;
} StrucValues;
typedef struct {
gint run;
typedef struct
{
gint run;
} StructInterface;
/* --- Declare local functions --- */
static void query (void);
static void run (char *name,
int nparams,
GParam *param,
int *nreturn_vals,
GParam **return_vals);
static gint struc_dialog (void);
static void struc_close_callback (GtkWidget *widget, gpointer data);
static void struc_ok_callback (GtkWidget *widget, gpointer data);
static void struc_scale_update (GtkAdjustment *adjustment, gpointer data);
static void struc_toggle_update (GtkWidget *widget, gint32 value);
static void strucpi (GDrawable *drawable);
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals);
static gint struc_dialog (void);
static void struc_ok_callback (GtkWidget *widget,
gpointer data);
static void strucpi (GDrawable *drawable);
/* --- Variables --- */
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 */
};
static StrucValues svals =
{
0, /* direction*/
4 /* depth */
0, /* direction*/
4 /* depth */
};
static StructInterface s_int =
{
@ -87,7 +103,8 @@ static StructInterface s_int =
MAIN ()
static void query ()
static void
query (void)
{
static GParamDef args[] =
{
@ -116,11 +133,12 @@ static void query ()
args, return_vals);
}
static void run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
static void
run (gchar *name,
gint nparams,
GParam *param,
gint *nreturn_vals,
GParam **return_vals)
{
static GParam values[1];
GDrawable *drawable;
@ -135,11 +153,14 @@ static void run (gchar *name,
values[0].type = PARAM_STATUS;
values[0].data.d_status = status;
if (run_mode == RUN_INTERACTIVE) {
INIT_I18N_UI();
} else {
INIT_I18N();
}
if (run_mode == RUN_INTERACTIVE)
{
INIT_I18N_UI();
}
else
{
INIT_I18N();
}
/* Get the specified drawable */
drawable = gimp_drawable_get (param[2].data.d_drawable);
@ -210,163 +231,99 @@ static void run (gchar *name,
gimp_drawable_detach (drawable);
}
static gint struc_dialog(void)
static gint
struc_dialog (void)
{
GtkWidget *dlg;
GtkWidget *hbbox;
GtkWidget *oframe, *iframe;
GtkWidget *abox, *bbox, *cbox;
GtkWidget *button, *label;
GtkWidget *scale;
GtkObject *adjustment;
GtkWidget *vbox;
GtkWidget *frame;
GtkWidget *table;
GtkObject *adj;
gchar **argv;
gint argc;
gint argc;
argc = 1;
argv = g_new (gchar *, 1);
argv[0] = g_strdup("struc");
argc = 1;
argv = g_new (gchar *, 1);
argv[0] = g_strdup ("struc");
gtk_init (&argc, &argv);
gtk_rc_parse (gimp_gtkrc ());
dlg = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dlg), _("Struc"));
gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE);
gtk_container_border_width (GTK_CONTAINER (dlg), 0);
gtk_signal_connect (GTK_OBJECT(dlg), "destroy",
(GtkSignalFunc) struc_close_callback,
NULL);
/* Action area */
gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dlg)->action_area), 2);
gtk_box_set_homogeneous (GTK_BOX (GTK_DIALOG (dlg)->action_area), FALSE);
hbbox = gtk_hbutton_box_new ();
gtk_button_box_set_spacing (GTK_BUTTON_BOX (hbbox), 4);
gtk_box_pack_end (GTK_BOX (GTK_DIALOG (dlg)->action_area), hbbox, FALSE, FALSE, 0);
gtk_widget_show (hbbox);
button = gtk_button_new_with_label (_("OK"));
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) struc_ok_callback,
dlg);
gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0);
gtk_widget_grab_default (button);
gtk_widget_show (button);
dlg = gimp_dialog_new (_("Apply Canvas"), "struc",
gimp_plugin_help_func, "filters/struc.html",
GTK_WIN_POS_MOUSE,
FALSE, TRUE, FALSE,
button = gtk_button_new_with_label (_("Cancel"));
GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
(GtkSignalFunc) gtk_widget_destroy,
GTK_OBJECT (dlg));
gtk_box_pack_start (GTK_BOX (hbbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
_("OK"), struc_ok_callback,
NULL, NULL, NULL, TRUE, FALSE,
_("Cancel"), gtk_widget_destroy,
NULL, 1, NULL, FALSE, TRUE,
NULL);
gtk_signal_connect (GTK_OBJECT (dlg), "destroy",
GTK_SIGNAL_FUNC (gtk_main_quit),
NULL);
/* Parameter settings */
abox = gtk_vbox_new (FALSE, 5);
gtk_container_border_width (GTK_CONTAINER (abox), 5);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox),
abox, FALSE, FALSE, 0);
frame = gtk_frame_new (_("Parameter Settings"));
gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0);
gtk_widget_show (frame);
oframe = gtk_frame_new ( _("Filter options"));
gtk_frame_set_shadow_type (GTK_FRAME (oframe), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (abox),
oframe, TRUE, TRUE, 0);
bbox = gtk_vbox_new (FALSE, 5);
gtk_container_border_width (GTK_CONTAINER (bbox), 5);
gtk_container_add (GTK_CONTAINER (oframe), bbox);
vbox = gtk_vbox_new (FALSE, 4);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
gtk_container_add (GTK_CONTAINER (frame), vbox);
gtk_widget_show (vbox);
/* Radio buttons */
iframe = gtk_frame_new ( _("Direction"));
gtk_frame_set_shadow_type (GTK_FRAME (iframe), GTK_SHADOW_ETCHED_IN);
gtk_box_pack_start (GTK_BOX (bbox),
iframe, FALSE, FALSE, 0);
frame =
gimp_radio_group_new2 (TRUE, _("Direction"),
gimp_radio_button_update,
&svals.direction, (gpointer) svals.direction,
cbox= gtk_vbox_new (FALSE, 5);
gtk_container_border_width (GTK_CONTAINER (cbox), 5);
gtk_container_add (GTK_CONTAINER (iframe), cbox);
{
int i;
char * name[4]= { N_("Top-right"), N_("Top-left"), N_("Bottom-left"), N_("Bottom-right")};
_("Top-Right"), (gpointer) TOP_RIGHT, NULL,
_("Top-Left"), (gpointer) TOP_LEFT, NULL,
_("Bottom-Left"), (gpointer) BOTTOM_LEFT, NULL,
_("Bottom-Right"), (gpointer) BOTTOM_RIGHT, NULL,
button = NULL;
for (i=0; i < 4; i++)
{
button = gtk_radio_button_new_with_label (
(button==NULL) ? NULL :
gtk_radio_button_group (GTK_RADIO_BUTTON (button)), gettext(name[i]));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button),
(svals.direction==i));
NULL);
gtk_signal_connect (GTK_OBJECT (button), "toggled",
(GtkSignalFunc) struc_toggle_update,
(gpointer) i);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
gtk_box_pack_start (GTK_BOX (cbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
}
}
table = gtk_table_new (1, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
gtk_widget_show (table);
gtk_widget_show(cbox);
gtk_widget_show(iframe);
adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0,
_("Depth:"), 100, 0,
svals.depth, 1, 50, 1, 5, 0,
NULL, NULL);
gtk_signal_connect (adj, "value_changed",
GTK_SIGNAL_FUNC (gimp_int_adjustment_update),
&svals.depth);
/* Horizontal scale */
label=gtk_label_new ( _("Depth"));
gtk_misc_set_alignment (GTK_MISC(label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX(bbox), label, FALSE, FALSE, 0);
gtk_widget_show (label);
gtk_widget_show (dlg);
adjustment = gtk_adjustment_new (svals.depth, 1, 50, 1, 1, 1);
gtk_signal_connect (adjustment, "value_changed",
(GtkSignalFunc) struc_scale_update,
&(svals.depth));
scale= gtk_hscale_new (GTK_ADJUSTMENT (adjustment));
gtk_widget_set_usize (GTK_WIDGET (scale), 150, 30);
gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);
gtk_scale_set_digits (GTK_SCALE (scale), 0);
gtk_scale_set_draw_value (GTK_SCALE (scale), TRUE);
gtk_box_pack_start (GTK_BOX (bbox), scale, FALSE, FALSE,0);
gtk_widget_show (scale );
gtk_widget_show(bbox);
gtk_widget_show(oframe);
gtk_widget_show(abox);
gtk_widget_show(dlg);
gtk_main();
gdk_flush();
gtk_main ();
gdk_flush ();
return s_int.run;
}
/* Interface functions */
static void struc_close_callback (GtkWidget *widget, gpointer data)
{
gtk_main_quit ();
}
static void struc_ok_callback (GtkWidget *widget, gpointer data)
static void
struc_ok_callback (GtkWidget *widget,
gpointer data)
{
s_int.run = TRUE;
gtk_widget_destroy (GTK_WIDGET (data));
}
static void struc_scale_update (GtkAdjustment *adjustment, gpointer data)
{
gint *dptr = (gint*) data;
*dptr = (gint) adjustment->value;
}
static void struc_toggle_update (GtkWidget *widget, gint32 value)
{
if (GTK_TOGGLE_BUTTON (widget)->active)
svals.direction = value;
}
/* Filter function */
static void strucpi (GDrawable *drawable)
static void
strucpi (GDrawable *drawable)
{
GPixelRgn srcPR, destPR;
gint width, height;
@ -438,44 +395,45 @@ static void strucpi (GDrawable *drawable)
gimp_pixel_rgn_get_row (&srcPR, cur_row, x1, row, (x2-x1));
d = dest;
rcol = 0;
switch (bytes) {
case 1: /* Grayscale */
case 2: /* Grayscale alpha */
for (col = 0; col < (x2 - x1) * bytes; col+=bytes)
{
varde = cur_row[col] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
if (bytes == 2)
*d++ = cur_row[col+1];
rcol++;
if (rcol == 128) rcol = 0;
}
break;
case 3: /* RGB */
case 4: /* RGB alpha */
for (col = 0; col < (x2 - x1) * bytes; col+=bytes)
{
varde = cur_row[col] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
varde = cur_row[col+1] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
varde = cur_row[col+2] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
if (bytes == 4)
*d++ = cur_row[col+3];
rcol++;
if (rcol == 128) rcol = 0;
}
break;
}
switch (bytes)
{
case 1: /* Grayscale */
case 2: /* Grayscale alpha */
for (col = 0; col < (x2 - x1) * bytes; col+=bytes)
{
varde = cur_row[col] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
if (bytes == 2)
*d++ = cur_row[col+1];
rcol++;
if (rcol == 128) rcol = 0;
}
break;
case 3: /* RGB */
case 4: /* RGB alpha */
for (col = 0; col < (x2 - x1) * bytes; col+=bytes)
{
varde = cur_row[col] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
varde = cur_row[col+1] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
varde = cur_row[col+2] + mult*sdata[rcol*xm+rrow*ym+offs];
if (varde > 255 ) varde = 255;
if (varde < 0) varde = 0;
*d++ = (guchar)varde;
if (bytes == 4)
*d++ = cur_row[col+3];
rcol++;
if (rcol == 128) rcol = 0;
}
break;
}
/* store the dest */
gimp_pixel_rgn_set_row (&destPR, dest, x1, row, (x2 - x1));