gimp/libgimp/gimpdrawablefilter_pdb.c
Jehan 2cf6b637e7 app, libgimp, pdb: new GimpDrawableFilterConfig class.
This is mostly an empty shell whose goal is to serve as base class for
specific dynamically generated per-operation subclasses, which will have
properties mimicking the arguments of the GEGL operation.

Most of the fundamental type args will just use the base GLib param spec
types instead of GEGL ones.

As a special case, the GeglParamEnum arguments are transformed into
GimpChoice param specs on libgimp side. The reason is that most of the
time, enum types are created within the scope of an operation code only
and cannot be properly reconstructed over the wire. I could just
transform these into an int type (which is mostly what is done in GEGL
right now when running an op with such arg), but GimpChoice allow much
nicer string-type args, which make much more semantic code. This class
was initially created for plug-ins, but it would work very well to run
GEGL ops on drawables. So let's do it.

Finally add a gimp_drawable_filter_get_config() to request the current
config of a filter.

Note that right now, we can't do much with this config object other than
observing an operation args and default values. Being able to update a
filter's settings will come up in further commits.
2024-12-17 16:24:54 +00:00

345 lines
10 KiB
C

/* LIBGIMP - The GIMP Library
* Copyright (C) 1995-2003 Peter Mattis and Spencer Kimball
*
* gimpdrawablefilter_pdb.c
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <https://www.gnu.org/licenses/>.
*/
/* NOTE: This file is auto-generated by pdbgen.pl */
#include "config.h"
#include "stamp-pdbgen.h"
#include "gimp.h"
/**
* SECTION: gimpdrawablefilter
* @title: gimpdrawablefilter
* @short_description: Operations on drawable filters.
*
* Operations on drawable filters: creation, editing.
**/
/**
* gimp_drawable_filter_id_is_valid:
* @filter_id: The filter ID to check.
*
* Returns %TRUE if the drawable filter ID is valid.
*
* This procedure checks if the given drawable filter ID is valid and
* refers to an existing filter.
*
* Returns: Whether the filter ID is valid.
*
* Since: 3.0
**/
gboolean
gimp_drawable_filter_id_is_valid (gint filter_id)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gboolean valid = FALSE;
args = gimp_value_array_new_from_types (NULL,
G_TYPE_INT, filter_id,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-id-is-valid",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
valid = GIMP_VALUES_GET_BOOLEAN (return_vals, 1);
gimp_value_array_unref (return_vals);
return valid;
}
/**
* gimp_drawable_filter_get_name:
* @filter: The filter whose name you want.
*
* Get a drawable filter's name.
*
* This procedure returns the specified filter's name.
* Since it is not possible to set a drawable filter's name yet, this
* will be the operation's name. Eventually this filter's name will be
* a free form field so do not rely on this information for any
* processing.
*
* Returns: (transfer full): The filter's name.
* The returned value must be freed with g_free().
*
* Since: 3.0
**/
gchar *
gimp_drawable_filter_get_name (GimpDrawableFilter *filter)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gchar *name = NULL;
args = gimp_value_array_new_from_types (NULL,
GIMP_TYPE_DRAWABLE_FILTER, filter,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-get-name",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
name = GIMP_VALUES_DUP_STRING (return_vals, 1);
gimp_value_array_unref (return_vals);
return name;
}
/**
* gimp_drawable_filter_get_operation_name:
* @filter: The filter whose operation name you want.
*
* Get a drawable filter's operation name.
*
* This procedure returns the specified filter's operation name.
*
* Returns: (transfer full): The filter's operation name.
* The returned value must be freed with g_free().
*
* Since: 3.0
**/
gchar *
gimp_drawable_filter_get_operation_name (GimpDrawableFilter *filter)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gchar *name = NULL;
args = gimp_value_array_new_from_types (NULL,
GIMP_TYPE_DRAWABLE_FILTER, filter,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-get-operation-name",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
name = GIMP_VALUES_DUP_STRING (return_vals, 1);
gimp_value_array_unref (return_vals);
return name;
}
/**
* gimp_drawable_filter_get_visible:
* @filter: The filter.
*
* Get the visibility of the specified filter.
*
* This procedure returns the specified filter's visibility.
*
* Returns: The filter visibility.
*
* Since: 3.0
**/
gboolean
gimp_drawable_filter_get_visible (GimpDrawableFilter *filter)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gboolean visible = FALSE;
args = gimp_value_array_new_from_types (NULL,
GIMP_TYPE_DRAWABLE_FILTER, filter,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-get-visible",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
visible = GIMP_VALUES_GET_BOOLEAN (return_vals, 1);
gimp_value_array_unref (return_vals);
return visible;
}
/**
* gimp_drawable_filter_set_visible:
* @filter: The filter.
* @visible: The new filter visibility.
*
* Set the visibility of the specified filter.
*
* This procedure sets the specified filter's visibility.
* The drawable won't be immediately rendered. Use
* [method@Gimp.Drawable.update] to trigger an update.
*
* Returns: TRUE on success.
*
* Since: 3.0
**/
gboolean
gimp_drawable_filter_set_visible (GimpDrawableFilter *filter,
gboolean visible)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gboolean success = TRUE;
args = gimp_value_array_new_from_types (NULL,
GIMP_TYPE_DRAWABLE_FILTER, filter,
G_TYPE_BOOLEAN, visible,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-set-visible",
args);
gimp_value_array_unref (args);
success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS;
gimp_value_array_unref (return_vals);
return success;
}
/**
* _gimp_drawable_filter_get_number_arguments:
* @operation_name: The procedure name.
*
* Queries for the number of arguments on the specified filter.
*
* This procedure returns the number of arguments on the specified
* filter.
* For specific information on each input argument, use
* gimp_drawable_filter_get_argument().
*
* Returns: The number of input arguments.
*
* Since: 3.0
**/
gint
_gimp_drawable_filter_get_number_arguments (const gchar *operation_name)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gint num_args = 0;
args = gimp_value_array_new_from_types (NULL,
G_TYPE_STRING, operation_name,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-get-number-arguments",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
num_args = GIMP_VALUES_GET_INT (return_vals, 1);
gimp_value_array_unref (return_vals);
return num_args;
}
/**
* _gimp_drawable_filter_get_argument:
* @operation_name: The procedure name.
* @arg_num: The argument number.
*
* Queries for information on the specified filter's argument.
*
* This procedure returns the #GParamSpec of filter's argument.
*
* Returns: (transfer full): The GParamSpec of the argument.
* The returned value must be freed with g_param_spec_unref().
*
* Since: 3.0
**/
GParamSpec *
_gimp_drawable_filter_get_argument (const gchar *operation_name,
gint arg_num)
{
GimpValueArray *args;
GimpValueArray *return_vals;
GParamSpec *param_spec = NULL;
args = gimp_value_array_new_from_types (NULL,
G_TYPE_STRING, operation_name,
G_TYPE_INT, arg_num,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-get-argument",
args);
gimp_value_array_unref (args);
if (GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS)
param_spec = GIMP_VALUES_DUP_PARAM (return_vals, 1);
gimp_value_array_unref (return_vals);
return param_spec;
}
/**
* gimp_drawable_filter_delete:
* @filter: The filter to delete.
*
* Delete a drawable filter.
*
* This procedure deletes the specified filter. This must not be done
* if the drawable whose this filter was applied to was already deleted
* or if the drawable was already removed from the image.
* Do not use anymore the @filter object after having deleted it.
*
* Returns: TRUE on success.
*
* Since: 3.0
**/
gboolean
gimp_drawable_filter_delete (GimpDrawableFilter *filter)
{
GimpValueArray *args;
GimpValueArray *return_vals;
gboolean success = TRUE;
args = gimp_value_array_new_from_types (NULL,
GIMP_TYPE_DRAWABLE_FILTER, filter,
G_TYPE_NONE);
return_vals = _gimp_pdb_run_procedure_array (gimp_get_pdb (),
"gimp-drawable-filter-delete",
args);
gimp_value_array_unref (args);
success = GIMP_VALUES_GET_ENUM (return_vals, 0) == GIMP_PDB_SUCCESS;
gimp_value_array_unref (return_vals);
return success;
}