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:

committed by
Michael Natterer

parent
234bfc723d
commit
e88e3e4454
20
ChangeLog
20
ChangeLog
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
@ -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));
|
||||
}
|
||||
|
@ -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
@ -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
@ -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
@ -17,6 +17,7 @@ INCLUDES = \
|
||||
-I$(includedir)
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/libgimp/libgimpui.la \
|
||||
$(top_builddir)/libgimp/libgimp.la \
|
||||
$(GTK_LIBS) \
|
||||
$(INTLLIBS)
|
||||
|
@ -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));
|
||||
|
||||
|
Reference in New Issue
Block a user