plug-ins/script-fu/script-fu-interface.[ch]

2006-10-19  Sven Neumann  <sven@gimp.org>

	* plug-ins/script-fu/script-fu-interface.[ch]
	* plug-ins/script-fu/script-fu-scripts.c
	* plug-ins/script-fu/script-fu-types.h: don't look at the menu path
	to see if a script is image-based. Instead check the passed and the
	expected parameter types.

	* plug-ins/script-fu/scripts/tileblur.scm: global variables won't
	work with tiny-scheme.
This commit is contained in:
Sven Neumann
2006-10-19 14:50:47 +00:00
committed by Sven Neumann
parent f2a2afaf5d
commit c97fc7a7a5
6 changed files with 69 additions and 60 deletions

View File

@ -1,3 +1,14 @@
2006-10-19 Sven Neumann <sven@gimp.org>
* plug-ins/script-fu/script-fu-interface.[ch]
* plug-ins/script-fu/script-fu-scripts.c
* plug-ins/script-fu/script-fu-types.h: don't look at the menu path
to see if a script is image-based. Instead check the passed and the
expected parameter types.
* plug-ins/script-fu/scripts/tileblur.scm: global variables won't
work with tiny-scheme.
2006-10-19 Tor Lillqvist <tml@novell.com> 2006-10-19 Tor Lillqvist <tml@novell.com>
* plug-ins/script-fu/tinyscheme/scheme.c * plug-ins/script-fu/tinyscheme/scheme.c

View File

@ -154,7 +154,8 @@ script_fu_interface_report_cc (const gchar *command)
} }
void void
script_fu_interface (SFScript *script) script_fu_interface (SFScript *script,
gint start_arg)
{ {
GtkWidget *dialog; GtkWidget *dialog;
GtkWidget *menu; GtkWidget *menu;
@ -201,6 +202,7 @@ script_fu_interface (SFScript *script)
/* strip the first part of the menupath if it contains _("/Script-Fu/") */ /* strip the first part of the menupath if it contains _("/Script-Fu/") */
tmp = strstr (gettext (script->menu_path), _("/Script-Fu/")); tmp = strstr (gettext (script->menu_path), _("/Script-Fu/"));
if (tmp) if (tmp)
sf_interface->title = g_strdup (tmp + strlen (_("/Script-Fu/"))); sf_interface->title = g_strdup (tmp + strlen (_("/Script-Fu/")));
else else
@ -259,10 +261,7 @@ script_fu_interface (SFScript *script)
gtk_widget_show (vbox); gtk_widget_show (vbox);
/* The argument table */ /* The argument table */
if (script->image_based) sf_interface->table = gtk_table_new (script->num_args - start_arg, 3, FALSE);
sf_interface->table = gtk_table_new (script->num_args - 1, 3, FALSE);
else
sf_interface->table = gtk_table_new (script->num_args + 1, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (sf_interface->table), 6); gtk_table_set_col_spacings (GTK_TABLE (sf_interface->table), 6);
gtk_table_set_row_spacings (GTK_TABLE (sf_interface->table), 6); gtk_table_set_row_spacings (GTK_TABLE (sf_interface->table), 6);
@ -271,7 +270,7 @@ script_fu_interface (SFScript *script)
group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
for (i = script->image_based ? 2 : 0; i < script->num_args; i++) for (i = start_arg; i < script->num_args; i++)
{ {
GtkWidget *widget = NULL; GtkWidget *widget = NULL;
GtkObject *adj; GtkObject *adj;
@ -281,13 +280,11 @@ script_fu_interface (SFScript *script)
gint row = i; gint row = i;
gboolean left_align = FALSE; gboolean left_align = FALSE;
if (script->image_based) row -= start_arg;
row -= 2;
/* we add a colon after the label; /* we add a colon after the label;
some languages want an extra space here */ some languages want an extra space here */
label_text = g_strdup_printf (_("%s:"), label_text = g_strdup_printf (_("%s:"), gettext (script->arg_labels[i]));
gettext (script->arg_labels[i]));
switch (script->arg_types[i]) switch (script->arg_types[i])
{ {

View File

@ -20,7 +20,8 @@
#define __SCRIPT_FU_INTERFACE_H__ #define __SCRIPT_FU_INTERFACE_H__
void script_fu_interface (SFScript *script); void script_fu_interface (SFScript *script,
gint start_arg);
void script_fu_interface_report_cc (const gchar *command); void script_fu_interface_report_cc (const gchar *command);
gboolean script_fu_interface_is_active (void); gboolean script_fu_interface_is_active (void);

View File

@ -167,10 +167,6 @@ script_fu_add_script (scheme *sc, pointer a)
/* Find the script menu_path */ /* Find the script menu_path */
val = sc->vptr->string_value (sc->vptr->pair_car (a)); val = sc->vptr->string_value (sc->vptr->pair_car (a));
script->menu_path = g_strdup (val); script->menu_path = g_strdup (val);
if (strncmp (script->menu_path, "<Image>", 7) == 0)
script->image_based = TRUE;
else
script->image_based = FALSE;
a = sc->vptr->pair_cdr (a); a = sc->vptr->pair_cdr (a);
/* Find the script blurb */ /* Find the script blurb */
@ -765,7 +761,7 @@ script_fu_script_proc (const gchar *name,
GimpPDBStatusType status = GIMP_PDB_SUCCESS; GimpPDBStatusType status = GIMP_PDB_SUCCESS;
GimpRunMode run_mode; GimpRunMode run_mode;
SFScript *script; SFScript *script;
gint min_args; gint min_args = 0;
run_mode = params[0].data.d_int32; run_mode = params[0].data.d_int32;
@ -782,26 +778,25 @@ script_fu_script_proc (const gchar *name,
{ {
case GIMP_RUN_INTERACTIVE: case GIMP_RUN_INTERACTIVE:
case GIMP_RUN_WITH_LAST_VALS: case GIMP_RUN_WITH_LAST_VALS:
/* Determine whether the script is image based (runs on an image). if (nparams > 1 && params[1].type == GIMP_PDB_IMAGE &&
* When being called from an image, nparams is 3, otherwise it's 1. script->num_args > 0 && script->arg_types[0] == SF_IMAGE)
*/
if (nparams == 3 && script->num_args >= 2)
{ {
script->arg_values[0].sfa_image = params[1].data.d_image; script->arg_values[0].sfa_image = params[1].data.d_image;
script->arg_values[1].sfa_drawable = params[2].data.d_drawable; min_args++;
script->image_based = TRUE;
} }
else
if (nparams > 2 && params[2].type == GIMP_PDB_DRAWABLE &&
script->num_args > 1 && script->arg_types[1] == SF_DRAWABLE)
{ {
script->image_based = FALSE; script->arg_values[1].sfa_drawable = params[2].data.d_drawable;
min_args++;
} }
/* First acquire information with a dialog */ /* First acquire information with a dialog */
/* Skip this part if the script takes no parameters */ /* Skip this part if the script takes no parameters */
min_args = (script->image_based) ? 2 : 0;
if (script->num_args > min_args) if (script->num_args > min_args)
{ {
script_fu_interface (script); script_fu_interface (script, min_args);
break; break;
} }
/* else fallthrough */ /* else fallthrough */

View File

@ -94,7 +94,6 @@ typedef struct
gchar **arg_labels; gchar **arg_labels;
SFArgValue *arg_defaults; SFArgValue *arg_defaults;
SFArgValue *arg_values; SFArgValue *arg_values;
gboolean image_based;
GimpParamDef *args; /* used only temporary until installed */ GimpParamDef *args; /* used only temporary until installed */
} SFScript; } SFScript;

View File

@ -18,9 +18,9 @@
(define (script-fu-tile-blur inImage inLayer inRadius inVert inHoriz inType) (define (script-fu-tile-blur inImage inLayer inRadius inVert inHoriz inType)
(define (cjg-pasteat xoff yoff) (define (tile-blur-paste-at layer width height xoff yoff)
(let ( (theFloat (car (gimp-edit-paste theLayer 0))) ) (let ( (theFloat (car (gimp-edit-paste layer 0))) )
(gimp-layer-set-offsets theFloat (* xoff theWidth) (* yoff theHeight) ) (gimp-layer-set-offsets theFloat (* xoff width) (* yoff height) )
(gimp-floating-sel-anchor theFloat) (gimp-floating-sel-anchor theFloat)
) )
) )
@ -41,9 +41,15 @@
(gimp-selection-none theImage) (gimp-selection-none theImage)
(gimp-layer-set-offsets theLayer theWidth theHeight) (gimp-layer-set-offsets theLayer theWidth theHeight)
(cjg-pasteat 1 1) (cjg-pasteat 1 2) (cjg-pasteat 1 3) (tile-blur-paste-at theLayer theWidth theHeight 1 1)
(cjg-pasteat 2 1) (cjg-pasteat 2 2) (cjg-pasteat 2 3) (tile-blur-paste-at theLayer theWidth theHeight 1 2)
(cjg-pasteat 3 1) (cjg-pasteat 3 2) (cjg-pasteat 3 3) (tile-blur-paste-at theLayer theWidth theHeight 1 3)
(tile-blur-paste-at theLayer theWidth theHeight 2 1)
(tile-blur-paste-at theLayer theWidth theHeight 2 2)
(tile-blur-paste-at theLayer theWidth theHeight 2 3)
(tile-blur-paste-at theLayer theWidth theHeight 3 1)
(tile-blur-paste-at theLayer theWidth theHeight 3 2)
(tile-blur-paste-at theLayer theWidth theHeight 3 3)
(gimp-selection-none theImage) (gimp-selection-none theImage)
(if (= inType 0) (if (= inType 0)