2004-05-18 22:54:41 +00:00
|
|
|
/* LIBGIMP - The GIMP Library
|
|
|
|
* Copyright (C) 1995-2003 Peter Mattis and Spencer Kimball
|
|
|
|
*
|
|
|
|
* gimpplugin.c
|
|
|
|
*
|
2009-01-17 22:28:01 +00:00
|
|
|
* This library is free software: you can redistribute it and/or
|
2004-05-18 22:54:41 +00:00
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
2009-01-17 22:28:01 +00:00
|
|
|
* version 3 of the License, or (at your option) any later version.
|
2004-05-18 22:54:41 +00:00
|
|
|
*
|
|
|
|
* 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
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
2009-01-17 22:28:01 +00:00
|
|
|
* License along with this library. If not, see
|
2018-07-11 23:27:07 +02:00
|
|
|
* <https://www.gnu.org/licenses/>.
|
2004-05-18 22:54:41 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "gimp.h"
|
|
|
|
|
2019-07-25 23:07:24 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* SECTION: gimpplugin
|
|
|
|
* @title: GimpPlugIn
|
|
|
|
* @short_description: The base class for plug-ins to derive from
|
|
|
|
*
|
|
|
|
* The base class for plug-ins to derive from. Manages the plug-in's
|
|
|
|
* #GimpProcedure objects.
|
|
|
|
*
|
|
|
|
* Since: 3.0
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
|
|
struct _GimpPlugInPrivate
|
|
|
|
{
|
2019-07-26 02:05:11 +02:00
|
|
|
GList *procedures;
|
2019-07-25 23:07:24 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
static void gimp_plug_in_finalize (GObject *object);
|
|
|
|
|
|
|
|
|
|
|
|
G_DEFINE_TYPE_WITH_PRIVATE (GimpPlugIn, gimp_plug_in, G_TYPE_OBJECT)
|
|
|
|
|
|
|
|
#define parent_class gimp_plug_in_parent_class
|
|
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
gimp_plug_in_class_init (GimpPlugInClass *klass)
|
|
|
|
{
|
|
|
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
|
|
|
|
|
|
object_class->finalize = gimp_plug_in_finalize;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gimp_plug_in_init (GimpPlugIn *plug_in)
|
|
|
|
{
|
|
|
|
plug_in->priv = gimp_plug_in_get_instance_private (plug_in);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
gimp_plug_in_finalize (GObject *object)
|
|
|
|
{
|
2019-07-26 02:05:11 +02:00
|
|
|
GimpPlugIn *plug_in = GIMP_PLUG_IN (object);
|
|
|
|
|
|
|
|
if (plug_in->priv->procedures)
|
|
|
|
{
|
|
|
|
g_list_free_full (plug_in->priv->procedures, g_object_unref);
|
|
|
|
plug_in->priv->procedures = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gimp_plug_in_add_procedure (GimpPlugIn *plug_in,
|
|
|
|
GimpProcedure *procedure)
|
|
|
|
{
|
|
|
|
g_return_if_fail (GIMP_IS_PLUG_IN (plug_in));
|
|
|
|
g_return_if_fail (GIMP_IS_PROCEDURE (procedure));
|
|
|
|
|
|
|
|
plug_in->priv->procedures = g_list_prepend (plug_in->priv->procedures,
|
|
|
|
g_object_ref (procedure));
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
gimp_plug_in_remove_procedure (GimpPlugIn *plug_in,
|
|
|
|
const gchar *name)
|
|
|
|
{
|
|
|
|
GimpProcedure *procedure;
|
|
|
|
|
|
|
|
g_return_if_fail (GIMP_IS_PLUG_IN (plug_in));
|
|
|
|
g_return_if_fail (name != NULL);
|
|
|
|
|
|
|
|
procedure = gimp_plug_in_get_procedure (plug_in, name);
|
|
|
|
|
|
|
|
if (procedure)
|
|
|
|
{
|
|
|
|
plug_in->priv->procedures = g_list_remove (plug_in->priv->procedures,
|
|
|
|
procedure);
|
|
|
|
g_object_unref (procedure);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
GList *
|
|
|
|
gimp_plug_in_get_procedures (GimpPlugIn *plug_in)
|
|
|
|
{
|
|
|
|
g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), NULL);
|
|
|
|
|
|
|
|
return plug_in->priv->procedures;
|
|
|
|
}
|
|
|
|
|
|
|
|
GimpProcedure *
|
|
|
|
gimp_plug_in_get_procedure (GimpPlugIn *plug_in,
|
|
|
|
const gchar *name)
|
|
|
|
{
|
|
|
|
GList *list;
|
|
|
|
|
|
|
|
g_return_val_if_fail (GIMP_IS_PLUG_IN (plug_in), NULL);
|
|
|
|
g_return_val_if_fail (name != NULL, NULL);
|
|
|
|
|
|
|
|
for (list = plug_in->priv->procedures; list; list = g_list_next (list))
|
|
|
|
{
|
|
|
|
GimpProcedure *procedure = list->data;
|
|
|
|
|
|
|
|
if (! strcmp (name, gimp_procedure_get_name (procedure)))
|
|
|
|
return procedure;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
2019-07-25 23:07:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* unrelated old API */
|
|
|
|
|
2004-05-18 22:54:41 +00:00
|
|
|
gboolean
|
|
|
|
gimp_plugin_icon_register (const gchar *procedure_name,
|
|
|
|
GimpIconType icon_type,
|
|
|
|
const guint8 *icon_data)
|
|
|
|
{
|
|
|
|
gint icon_data_length;
|
|
|
|
|
|
|
|
g_return_val_if_fail (procedure_name != NULL, FALSE);
|
|
|
|
g_return_val_if_fail (icon_data != NULL, FALSE);
|
|
|
|
|
|
|
|
switch (icon_type)
|
|
|
|
{
|
2014-05-11 23:56:30 +02:00
|
|
|
case GIMP_ICON_TYPE_ICON_NAME:
|
2004-05-18 22:54:41 +00:00
|
|
|
case GIMP_ICON_TYPE_IMAGE_FILE:
|
2006-02-20 07:25:34 +00:00
|
|
|
icon_data_length = strlen ((const gchar *) icon_data) + 1;
|
2004-05-18 22:54:41 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case GIMP_ICON_TYPE_INLINE_PIXBUF:
|
|
|
|
g_return_val_if_fail (g_ntohl (*((gint32 *) icon_data)) == 0x47646b50,
|
|
|
|
FALSE);
|
|
|
|
|
|
|
|
icon_data_length = g_ntohl (*((gint32 *) (icon_data + 4)));
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
g_return_val_if_reached (FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
return _gimp_plugin_icon_register (procedure_name,
|
|
|
|
icon_type, icon_data_length, icon_data);
|
|
|
|
}
|