Modified Files: ChangeLog app/Makefile.am app/channel.c
Modified Files: ChangeLog app/Makefile.am app/channel.c app/drawable_cmds.c app/drawable_cmds.h app/gimage_cmds.c app/gimage_cmds.h app/gimpdrawable.c app/gimpdrawable.h app/gimpdrawableP.h app/gimpimage.c app/gimpimage.h app/gimpimageP.h app/internal_procs.c app/layer.c app/plug_in.c app/procedural_db.c app/procedural_db.h libgimp/Makefile.am libgimp/gimp.c libgimp/gimp.h libgimp/gimpdrawable.c libgimp/gimpenums.h libgimp/gimpimage.c libgimp/gimpprotocol.c libgimp/gimpprotocol.h plug-ins/dbbrowser/dbbrowser_utils.c plug-ins/script-fu/script-fu.c plug-ins/tiff/tiff.c Added Files: app/parasite.c app/parasite.h app/parasiteF.h app/parasiteP.h app/parasite_cmds.c app/parasite_cmds.h libgimp/gimpparasite.c libgimp/gimpparasite.h Allow plug-ins (and scripts) to attach arbitrary data (parasites) to images, layers and channels that can be read back at a later time.
This commit is contained in:
@ -28,6 +28,8 @@
|
||||
#include <sys/stat.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include "parasite.h"
|
||||
#include "parasiteP.h" /* ick */
|
||||
|
||||
#ifdef HAVE_IPC_H
|
||||
#include <sys/ipc.h>
|
||||
@ -2624,6 +2626,13 @@ plug_in_params_to_args (GPParam *params,
|
||||
case PDB_PATH:
|
||||
args[i].value.pdb_int = params[i].data.d_path;
|
||||
break;
|
||||
case PDB_PARASITE:
|
||||
if (full_copy)
|
||||
args[i].value.pdb_pointer = parasite_copy ((Parasite *)
|
||||
&(params[i].data.d_parasite));
|
||||
else
|
||||
args[i].value.pdb_pointer = (void *)&(params[i].data.d_parasite);
|
||||
break;
|
||||
case PDB_STATUS:
|
||||
args[i].value.pdb_int = params[i].data.d_status;
|
||||
break;
|
||||
@ -2782,6 +2791,35 @@ plug_in_args_to_params (Argument *args,
|
||||
case PDB_PATH:
|
||||
params[i].data.d_path = args[i].value.pdb_int;
|
||||
break;
|
||||
case PDB_PARASITE:
|
||||
if (full_copy)
|
||||
{
|
||||
Parasite *tmp;
|
||||
tmp = parasite_copy (args[i].value.pdb_pointer);
|
||||
if (tmp == NULL)
|
||||
{
|
||||
params[i].data.d_parasite.size = 0;
|
||||
params[i].data.d_parasite.data = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (¶ms[i].data.d_parasite, tmp, sizeof(Parasite));
|
||||
g_free(tmp);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (args[i].value.pdb_pointer == NULL)
|
||||
{
|
||||
params[i].data.d_parasite.size = 0;
|
||||
params[i].data.d_parasite.data = 0;
|
||||
}
|
||||
else
|
||||
memcpy (¶ms[i].data.d_parasite,
|
||||
(Parasite *)(args[i].value.pdb_pointer),
|
||||
sizeof(Parasite));
|
||||
}
|
||||
break;
|
||||
case PDB_STATUS:
|
||||
params[i].data.d_status = args[i].value.pdb_int;
|
||||
break;
|
||||
@ -2850,6 +2888,15 @@ plug_in_params_destroy (GPParam *params,
|
||||
case PDB_SELECTION:
|
||||
case PDB_BOUNDARY:
|
||||
case PDB_PATH:
|
||||
break;
|
||||
case PDB_PARASITE:
|
||||
if (full_destroy)
|
||||
if (params[i].data.d_parasite.data)
|
||||
{
|
||||
g_free (params[i].data.d_parasite.data);
|
||||
params[i].data.d_parasite.data = 0;
|
||||
}
|
||||
break;
|
||||
case PDB_STATUS:
|
||||
break;
|
||||
case PDB_END:
|
||||
@ -2924,6 +2971,14 @@ plug_in_args_destroy (Argument *args,
|
||||
case PDB_SELECTION:
|
||||
case PDB_BOUNDARY:
|
||||
case PDB_PATH:
|
||||
break;
|
||||
case PDB_PARASITE:
|
||||
if (full_destroy)
|
||||
{
|
||||
/* parasite_free ((Parasite *)(args[i].value.pdb_pointer));
|
||||
args[i].value.pdb_pointer = NULL; */
|
||||
}
|
||||
break;
|
||||
case PDB_STATUS:
|
||||
break;
|
||||
case PDB_END:
|
||||
|
Reference in New Issue
Block a user