Gimp/app/gegl/gimp-gegl-utils.h
Jehan 9849f2eff7 app, pdb: factorize code for allowed filters.
The code to ban some filters for non-destructive usage was duplicated in
a PDB file and in the XCF load code. Additionally to combining these 2
codes into a single gimp_gegl_op_nde_allowed(), this commit also moves
part of the logic into gimp_gegl_op_blacklisted() which improves the
following:

* It used to be possible to create filters for hidden operations which
  were not returned by gimp_drawable_filter_operation_get_available(),
  such as "gegl:color" or "gimp:equalize", which would create all sorts
  of problems. Now trying to create these filters through the API will
  not work and will properly warn with an explicit error message.
  I do not consider this an API break since the filters were not
  returned in the available lists and therefore were not considered
  usable. Anyone who would have used any of these hidden filters was
  just going around a weakness in our implementation.
* We make sure that our lists of allowed/forbidden filters are
  consistent across usages.
* When getting the list of filters with gimp_gegl_get_op_classes(), we
  don't need to do an additional validation step (as we were doing until
  now in the PDB call). This is meant to imply that all returned
  operations were already validated.
2026-02-21 14:50:19 +01:00

69 lines
3.9 KiB
C

/* GIMP - The GNU Image Manipulation Program
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
*
* gimp-gegl-utils.h
* Copyright (C) 2007 Michael Natterer <mitch@gimp.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#pragma once
GList * gimp_gegl_get_op_classes (gboolean block_gimp_ops);
gboolean gimp_gegl_op_nde_allowed (const gchar *name,
GError **error);
GType gimp_gegl_get_op_enum_type (const gchar *operation,
const gchar *property);
void gimp_gegl_progress_connect (GeglNode *node,
GimpProgress *progress,
const gchar *text);
void gimp_gegl_progress_disconnect (GeglNode *node,
GimpProgress *progress);
gboolean gimp_gegl_node_is_source_operation (GeglNode *node);
gboolean gimp_gegl_node_is_point_operation (GeglNode *node);
gboolean gimp_gegl_node_is_area_filter_operation (GeglNode *node);
const gchar * gimp_gegl_node_get_key (GeglNode *node,
const gchar *key);
gboolean gimp_gegl_node_has_key (GeglNode *node,
const gchar *key);
const Babl * gimp_gegl_node_get_format (GeglNode *node,
const gchar *pad_name);
void gimp_gegl_node_set_underlying_operation (GeglNode *node,
GeglNode *operation);
GeglNode * gimp_gegl_node_get_underlying_operation (GeglNode *node);
gboolean gimp_gegl_param_spec_has_key (GParamSpec *pspec,
const gchar *key,
const gchar *value);
GeglBuffer * gimp_gegl_buffer_dup (GeglBuffer *buffer);
GeglBuffer * gimp_gegl_buffer_resize (GeglBuffer *buffer,
gint new_width,
gint new_height,
gint offset_x,
gint offset_y,
GeglColor *color,
GimpPattern *pattern,
gint pattern_offset_x,
gint pattern_offset_y);
gboolean gimp_gegl_buffer_set_extent (GeglBuffer *buffer,
const GeglRectangle *extent);