とりあえず,数値を+1するプラグインを書いてみた.つまり,script-fu で
(inc 10)
とすると,(11) を返すプラグインである.
#include <libgimp/gimp.h>
static void query (void);
static void run (const gchar *name,
gint nparams,
const GimpParam *param,
gint *nreturn_vals,
GimpParam **return_vals);
GimpPlugInInfo PLUG_IN_INFO =
{
NULL, /* init_proc */
NULL, /* quit_proc */
query, /* query_proc */
run, /* run_proc */
};
MAIN ()
static void
query (void)
{
static GimpParamDef args[] = {
{GIMP_PDB_INT32, "integer", "input" },
};
static GimpParamDef results[] = {
{GIMP_PDB_INT32, "integer", "output"},
};
gimp_install_procedure (
"inc", /* 関数名 */
"increment", /* 説明文 */
"inc", /* 追加情報 */
"pyopyopyo",
"Copyright (C) pyopyopyo",
"2006",
NULL,
"",
GIMP_PLUGIN,
G_N_ELEMENTS (args), G_N_ELEMENTS (results),
args, results);
}
static void
run (const gchar *name,
gint nparams,
const GimpParam *param,
gint *nreturn_vals,
GimpParam **return_vals)
{
static GimpParam values[2];
int n = param[0].data.d_int32;
*nreturn_vals = G_N_ELEMENTS (values);
*return_vals = values;
values[0].type = GIMP_PDB_STATUS;
values[0].data.d_status = GIMP_PDB_SUCCESS;
values[1].type = GIMP_PDB_INT32;
values[1].data.d_int32 = n + 1;
}プラグイン側にメモリ領域を確保して,そのアドレスをgimp本体側に返す仕様らしい.reentrantで無いところが気持悪いが,仕様だから仕方ない.