gimp/libgimpbase/gimpparasite.c

201 lines
4.1 KiB
C
Raw Normal View History

/* LIBGIMP - The GIMP Library
* Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
*
* gimpparasite.c
* Copyright (C) 1998 Jay Cox <jaycox@earthlink.net>
*
* This library is free software; you can redistribute it and/or
1999-11-18 05:13:50 +08:00
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
1999-11-18 05:13:50 +08:00
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
1999-03-07 20:56:03 +08:00
#include "config.h"
#include "parasiteP.h"
#include "parasite.h"
#include <stdio.h>
1999-03-07 20:56:03 +08:00
#ifdef HAVE_UNISTD_H
#include <unistd.h>
1999-03-07 20:56:03 +08:00
#endif
#include <string.h>
#include <glib.h>
#ifdef G_OS_WIN32
1999-03-07 20:56:03 +08:00
#include <process.h> /* For _getpid() */
#endif
#ifdef DEBUG
static void
gimp_parasite_print (GimpParasite *parasite)
{
if (parasite == NULL)
{
g_print ("pid %d: attempt to print a null parasite\n", getpid ());
return;
}
g_print ("pid %d: parasite: %p\n", getpid (), parasite);
if (parasite->name)
g_print ("\tname: %s\n", parasite->name);
else
g_print ("\tname: NULL\n");
g_print ("\tflags: %d\n", parasite->flags);
g_print ("\tsize: %d\n", parasite->size);
if (parasite->size > 0)
g_print ("\tdata: %p\n", parasite->data);
}
#endif
GimpParasite *
gimp_parasite_new (const gchar *name,
guint32 flags,
guint32 size,
const gpointer data)
{
GimpParasite *parasite;
if (!name)
return NULL;
parasite = g_new (GimpParasite, 1);
parasite->name = g_strdup (name);
parasite->flags = (flags & 0xFF);
parasite->size = size;
if (size)
parasite->data = g_memdup (data, size);
else
parasite->data = NULL;
return parasite;
}
void
gimp_parasite_free (GimpParasite *parasite)
{
if (parasite == NULL)
return;
Modified Files: ChangeLog app/Makefile.am app/channel.c app/channel.h Modified Files: ChangeLog app/Makefile.am app/channel.c app/channel.h app/channel_cmds.c app/channel_cmds.h app/drawable_cmds.c app/gimage_cmds.c 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/layer.h app/layer_cmds.c app/layer_cmds.h app/parasite_cmds.c app/perspective_tool.c app/plug_in.c app/procedural_db.c app/rotate_tool.c app/scale_tool.c app/shear_tool.c app/transform_core.c app/transform_core.h docs/parasites.txt libgimp/Makefile.am libgimp/gimp.c libgimp/gimp.h libgimp/gimpdrawable.c libgimp/gimpimage.c libgimp/gimpprotocol.c libgimp/gimpprotocol.h plug-ins/gif/gif.c plug-ins/script-fu/script-fu.c plug-ins/tiff/tiff.c Added Files: libgimp/gimpmatrix.c libgimp/gimpmatrix.h libgimp/parasite.c libgimp/parasite.h libgimp/parasiteF.h libgimp/parasiteP.h Removed Files: app/parasite.c app/parasite.h app/parasiteF.h app/parasiteP.h libgimp/gimpparasite.c libgimp/gimpparasite.h Tue Oct 13 19:24:03 1998 Jay Cox (jaycox@earthlink.net) * app/parasite.c * app/parasite.h * app/parasiteF.h * app/parasiteP.h : use a single name field instead of seperate creator/type fields. moved to libgimp/parasite* * libgimp/Makefile.am * libgimp/gimp.c * libgimp/gimp.h * libgimp/gimpdrawable.c * libgimp/gimpimage.c * libgimp/gimpprotocol.c * libgimp/gimpprotocol.h * app/Makefile.am * app/channel.c * app/channel.h * app/channel_cmds.c * app/channel_cmds.h * app/drawable_cmds.c * app/gimage_cmds.c * 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/layer.h * app/layer_cmds.c * app/layer_cmds.h * app/parasite_cmds.c * app/plug_in.c * app/procedural_db.c: Add tattoos to layers and drawables. Use new style parasites. * libgimp/gimpmatrix.c * libgimp/gimpmatrix.h: new files for matrix math. * app/perspective_tool.c * app/rotate_tool.c * app/scale_tool.c * app/shear_tool.c * app/transform_core.c * app/transform_core.h: use GimpMatrix instead of the old matrix code from transform_core. * ligimp/gimpparasite*: removed. now useing the same source for plug-ins and the core. * plug-ins/script-fu/script-fu.c * plug-ins/tiff/tiff.c * plug-ins/gif/gif.c: updated to use new style parasites.
1998-10-14 10:54:02 +08:00
if (parasite->name)
g_free (parasite->name);
if (parasite->data)
g_free (parasite->data);
g_free (parasite);
}
gboolean
gimp_parasite_is_type (const GimpParasite *parasite,
const gchar *name)
{
if (!parasite || !parasite->name)
return FALSE;
return (strcmp (parasite->name, name) == 0);
}
GimpParasite *
gimp_parasite_copy (const GimpParasite *parasite)
{
if (parasite == NULL)
return NULL;
return gimp_parasite_new (parasite->name, parasite->flags,
parasite->size, parasite->data);
}
gboolean
gimp_parasite_compare (const GimpParasite *a,
const GimpParasite *b)
{
if (a && b &&
a->name && b->name &&
strcmp (a->name, b->name) == 0 &&
a->flags == b->flags &&
a->size == b->size)
{
if (a->data == NULL && b->data == NULL)
return TRUE;
else if (a->data && b->data && memcmp (a->data, b->data, a->size) == 0)
return TRUE;
}
return FALSE;
}
1999-04-12 06:28:51 +08:00
gulong
gimp_parasite_flags (const GimpParasite *parasite)
1999-04-12 06:28:51 +08:00
{
if (parasite == NULL)
1999-04-12 06:28:51 +08:00
return 0;
return parasite->flags;
1999-04-12 06:28:51 +08:00
}
gboolean
gimp_parasite_is_persistent (const GimpParasite *parasite)
{
if (parasite == NULL)
return FALSE;
return (parasite->flags & GIMP_PARASITE_PERSISTENT);
}
gboolean
gimp_parasite_is_undoable (const GimpParasite *parasite)
{
if (parasite == NULL)
return FALSE;
return (parasite->flags & GIMP_PARASITE_UNDOABLE);
}
gboolean
gimp_parasite_has_flag (const GimpParasite *parasite,
gulong flag)
{
if (parasite == NULL)
return FALSE;
return (parasite->flags & flag);
}
const gchar *
gimp_parasite_name (const GimpParasite *parasite)
{
if (parasite)
return parasite->name;
return NULL;
}
void *
gimp_parasite_data (const GimpParasite *parasite)
{
if (parasite)
return parasite->data;
return NULL;
}
glong
gimp_parasite_data_size (const GimpParasite *parasite)
{
if (parasite)
return parasite->size;
return 0;
}