GIMP's OVERLAY mode was identical to SOFTLIGHT. This commit fixes the issue and introduces a NEW_OVERLAY mode and enum value. - change gimp:overlay-mode to be a real (svg-ish) overlay mode - when compositing, map OVERLAY to gimp:softlight-mode - when compisiting, map NEW_OVERLAY to gimp:overlay-mode - bump the XCF version when NEW_OVERLAY is used - map OVERLAY to SOFTLIGHT when loading and saving XCF - map OVERLAY to softlight in all PDB setters - map OVERLAY to softlight when deserializing a GimpContext - change all paint mode menus to show an entry for NEW_OVERLAY instead of OVERLAY - change PSP, PSD and OpenRaster to use NEW_OVERLAY These changes should (redundantly) make sure that no OVERLAY enum value is used in the core any longer because it gets mapped to SOFTLIGHT at all entry points, with the downside of introducing a setter/getter asymmetry when OVERLAY was set in a PDB api.
471 lines
21 KiB
C
471 lines
21 KiB
C
/* GIMP - The GNU Image Manipulation Program
|
|
* Copyright (C) 1995-2003 Spencer Kimball and Peter Mattis
|
|
*
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/* NOTE: This file is auto-generated by pdbgen.pl. */
|
|
|
|
#include "config.h"
|
|
|
|
#include <string.h>
|
|
|
|
#include <gegl.h>
|
|
|
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
|
|
|
#include "libgimpbase/gimpbase.h"
|
|
|
|
#include "pdb-types.h"
|
|
|
|
#include "core/gimp.h"
|
|
#include "core/gimpbrush.h"
|
|
#include "core/gimpcontainer-filter.h"
|
|
#include "core/gimpcontext.h"
|
|
#include "core/gimpdatafactory.h"
|
|
#include "core/gimpparamspecs.h"
|
|
#include "core/gimptempbuf.h"
|
|
|
|
#include "gimppdb.h"
|
|
#include "gimppdb-utils.h"
|
|
#include "gimpprocedure.h"
|
|
#include "internal-procs.h"
|
|
|
|
|
|
static GimpValueArray *
|
|
brushes_refresh_invoker (GimpProcedure *procedure,
|
|
Gimp *gimp,
|
|
GimpContext *context,
|
|
GimpProgress *progress,
|
|
const GimpValueArray *args,
|
|
GError **error)
|
|
{
|
|
gimp_data_factory_data_refresh (gimp->brush_factory, context);
|
|
|
|
return gimp_procedure_get_return_values (procedure, TRUE, NULL);
|
|
}
|
|
|
|
static GimpValueArray *
|
|
brushes_get_list_invoker (GimpProcedure *procedure,
|
|
Gimp *gimp,
|
|
GimpContext *context,
|
|
GimpProgress *progress,
|
|
const GimpValueArray *args,
|
|
GError **error)
|
|
{
|
|
gboolean success = TRUE;
|
|
GimpValueArray *return_vals;
|
|
const gchar *filter;
|
|
gint32 num_brushes = 0;
|
|
gchar **brush_list = NULL;
|
|
|
|
filter = g_value_get_string (gimp_value_array_index (args, 0));
|
|
|
|
if (success)
|
|
{
|
|
brush_list = gimp_container_get_filtered_name_array (gimp_data_factory_get_container (gimp->brush_factory),
|
|
filter, &num_brushes);
|
|
}
|
|
|
|
return_vals = gimp_procedure_get_return_values (procedure, success,
|
|
error ? *error : NULL);
|
|
|
|
if (success)
|
|
{
|
|
g_value_set_int (gimp_value_array_index (return_vals, 1), num_brushes);
|
|
gimp_value_take_stringarray (gimp_value_array_index (return_vals, 2), brush_list, num_brushes);
|
|
}
|
|
|
|
return return_vals;
|
|
}
|
|
|
|
static GimpValueArray *
|
|
brushes_get_brush_invoker (GimpProcedure *procedure,
|
|
Gimp *gimp,
|
|
GimpContext *context,
|
|
GimpProgress *progress,
|
|
const GimpValueArray *args,
|
|
GError **error)
|
|
{
|
|
gboolean success = TRUE;
|
|
GimpValueArray *return_vals;
|
|
gchar *name = NULL;
|
|
gint32 width = 0;
|
|
gint32 height = 0;
|
|
gint32 spacing = 0;
|
|
|
|
GimpBrush *brush = gimp_context_get_brush (context);
|
|
|
|
if (brush)
|
|
{
|
|
name = g_strdup (gimp_object_get_name (brush));
|
|
width = gimp_brush_get_width (brush);
|
|
height = gimp_brush_get_height (brush);
|
|
spacing = gimp_brush_get_spacing (brush);
|
|
}
|
|
else
|
|
success = FALSE;
|
|
|
|
return_vals = gimp_procedure_get_return_values (procedure, success,
|
|
error ? *error : NULL);
|
|
|
|
if (success)
|
|
{
|
|
g_value_take_string (gimp_value_array_index (return_vals, 1), name);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 2), width);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 3), height);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 4), spacing);
|
|
}
|
|
|
|
return return_vals;
|
|
}
|
|
|
|
static GimpValueArray *
|
|
brushes_get_spacing_invoker (GimpProcedure *procedure,
|
|
Gimp *gimp,
|
|
GimpContext *context,
|
|
GimpProgress *progress,
|
|
const GimpValueArray *args,
|
|
GError **error)
|
|
{
|
|
gboolean success = TRUE;
|
|
GimpValueArray *return_vals;
|
|
gint32 spacing = 0;
|
|
|
|
GimpBrush *brush = gimp_context_get_brush (context);
|
|
|
|
if (brush)
|
|
spacing = gimp_brush_get_spacing (brush);
|
|
else
|
|
success = FALSE;
|
|
|
|
return_vals = gimp_procedure_get_return_values (procedure, success,
|
|
error ? *error : NULL);
|
|
|
|
if (success)
|
|
g_value_set_int (gimp_value_array_index (return_vals, 1), spacing);
|
|
|
|
return return_vals;
|
|
}
|
|
|
|
static GimpValueArray *
|
|
brushes_set_spacing_invoker (GimpProcedure *procedure,
|
|
Gimp *gimp,
|
|
GimpContext *context,
|
|
GimpProgress *progress,
|
|
const GimpValueArray *args,
|
|
GError **error)
|
|
{
|
|
gboolean success = TRUE;
|
|
gint32 spacing;
|
|
|
|
spacing = g_value_get_int (gimp_value_array_index (args, 0));
|
|
|
|
if (success)
|
|
{
|
|
gimp_brush_set_spacing (gimp_context_get_brush (context), spacing);
|
|
}
|
|
|
|
return gimp_procedure_get_return_values (procedure, success,
|
|
error ? *error : NULL);
|
|
}
|
|
|
|
static GimpValueArray *
|
|
brushes_get_brush_data_invoker (GimpProcedure *procedure,
|
|
Gimp *gimp,
|
|
GimpContext *context,
|
|
GimpProgress *progress,
|
|
const GimpValueArray *args,
|
|
GError **error)
|
|
{
|
|
gboolean success = TRUE;
|
|
GimpValueArray *return_vals;
|
|
const gchar *name;
|
|
gchar *actual_name = NULL;
|
|
gdouble opacity = 0.0;
|
|
gint32 spacing = 0;
|
|
gint32 paint_mode = 0;
|
|
gint32 width = 0;
|
|
gint32 height = 0;
|
|
gint32 length = 0;
|
|
guint8 *mask_data = NULL;
|
|
|
|
name = g_value_get_string (gimp_value_array_index (args, 0));
|
|
|
|
if (success)
|
|
{
|
|
GimpBrush *brush;
|
|
|
|
if (paint_mode == GIMP_OVERLAY_MODE)
|
|
paint_mode = GIMP_SOFTLIGHT_MODE;
|
|
|
|
if (name && strlen (name))
|
|
brush = gimp_pdb_get_brush (gimp, name, FALSE, error);
|
|
else
|
|
brush = gimp_context_get_brush (context);
|
|
|
|
if (brush)
|
|
{
|
|
GimpTempBuf *mask = gimp_brush_get_mask (brush);
|
|
|
|
actual_name = g_strdup (gimp_object_get_name (brush));
|
|
opacity = 1.0;
|
|
spacing = gimp_brush_get_spacing (brush);
|
|
paint_mode = 0;
|
|
width = gimp_brush_get_width (brush);
|
|
height = gimp_brush_get_height (brush);
|
|
length = gimp_temp_buf_get_data_size (mask);
|
|
mask_data = g_memdup (gimp_temp_buf_get_data (mask), length);
|
|
}
|
|
else
|
|
success = FALSE;
|
|
}
|
|
|
|
return_vals = gimp_procedure_get_return_values (procedure, success,
|
|
error ? *error : NULL);
|
|
|
|
if (success)
|
|
{
|
|
g_value_take_string (gimp_value_array_index (return_vals, 1), actual_name);
|
|
g_value_set_double (gimp_value_array_index (return_vals, 2), opacity);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 3), spacing);
|
|
g_value_set_enum (gimp_value_array_index (return_vals, 4), paint_mode);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 5), width);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 6), height);
|
|
g_value_set_int (gimp_value_array_index (return_vals, 7), length);
|
|
gimp_value_take_int8array (gimp_value_array_index (return_vals, 8), mask_data, length);
|
|
}
|
|
|
|
return return_vals;
|
|
}
|
|
|
|
void
|
|
register_brushes_procs (GimpPDB *pdb)
|
|
{
|
|
GimpProcedure *procedure;
|
|
|
|
/*
|
|
* gimp-brushes-refresh
|
|
*/
|
|
procedure = gimp_procedure_new (brushes_refresh_invoker);
|
|
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
|
"gimp-brushes-refresh");
|
|
gimp_procedure_set_static_strings (procedure,
|
|
"gimp-brushes-refresh",
|
|
"Refresh current brushes. This function always succeeds.",
|
|
"This procedure retrieves all brushes currently in the user's brush path and updates the brush dialogs accordingly.",
|
|
"Seth Burgess",
|
|
"Seth Burgess",
|
|
"1997",
|
|
NULL);
|
|
gimp_pdb_register_procedure (pdb, procedure);
|
|
g_object_unref (procedure);
|
|
|
|
/*
|
|
* gimp-brushes-get-list
|
|
*/
|
|
procedure = gimp_procedure_new (brushes_get_list_invoker);
|
|
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
|
"gimp-brushes-get-list");
|
|
gimp_procedure_set_static_strings (procedure,
|
|
"gimp-brushes-get-list",
|
|
"Retrieve a complete listing of the available brushes.",
|
|
"This procedure returns a complete listing of available GIMP brushes. Each name returned can be used as input to the 'gimp-context-set-brush' procedure.",
|
|
"Spencer Kimball & Peter Mattis",
|
|
"Spencer Kimball & Peter Mattis",
|
|
"1995-1996",
|
|
NULL);
|
|
gimp_procedure_add_argument (procedure,
|
|
gimp_param_spec_string ("filter",
|
|
"filter",
|
|
"An optional regular expression used to filter the list",
|
|
FALSE, TRUE, FALSE,
|
|
NULL,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("num-brushes",
|
|
"num brushes",
|
|
"The number of brushes in the brush list",
|
|
0, G_MAXINT32, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_string_array ("brush-list",
|
|
"brush list",
|
|
"The list of brush names",
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_pdb_register_procedure (pdb, procedure);
|
|
g_object_unref (procedure);
|
|
|
|
/*
|
|
* gimp-brushes-get-brush
|
|
*/
|
|
procedure = gimp_procedure_new (brushes_get_brush_invoker);
|
|
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
|
"gimp-brushes-get-brush");
|
|
gimp_procedure_set_static_strings (procedure,
|
|
"gimp-brushes-get-brush",
|
|
"Deprecated: Use 'gimp-context-get-brush' instead.",
|
|
"Deprecated: Use 'gimp-context-get-brush' instead.",
|
|
"",
|
|
"",
|
|
"",
|
|
"gimp-context-get-brush");
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_string ("name",
|
|
"name",
|
|
"The brush name",
|
|
FALSE, FALSE, FALSE,
|
|
NULL,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("width",
|
|
"width",
|
|
"The brush width",
|
|
G_MININT32, G_MAXINT32, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("height",
|
|
"height",
|
|
"The brush height",
|
|
G_MININT32, G_MAXINT32, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("spacing",
|
|
"spacing",
|
|
"The brush spacing",
|
|
0, 1000, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_pdb_register_procedure (pdb, procedure);
|
|
g_object_unref (procedure);
|
|
|
|
/*
|
|
* gimp-brushes-get-spacing
|
|
*/
|
|
procedure = gimp_procedure_new (brushes_get_spacing_invoker);
|
|
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
|
"gimp-brushes-get-spacing");
|
|
gimp_procedure_set_static_strings (procedure,
|
|
"gimp-brushes-get-spacing",
|
|
"Deprecated: Use 'gimp-brush-get-spacing' instead.",
|
|
"Deprecated: Use 'gimp-brush-get-spacing' instead.",
|
|
"",
|
|
"",
|
|
"",
|
|
"gimp-brush-get-spacing");
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("spacing",
|
|
"spacing",
|
|
"The brush spacing",
|
|
0, 1000, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_pdb_register_procedure (pdb, procedure);
|
|
g_object_unref (procedure);
|
|
|
|
/*
|
|
* gimp-brushes-set-spacing
|
|
*/
|
|
procedure = gimp_procedure_new (brushes_set_spacing_invoker);
|
|
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
|
"gimp-brushes-set-spacing");
|
|
gimp_procedure_set_static_strings (procedure,
|
|
"gimp-brushes-set-spacing",
|
|
"Deprecated: Use 'gimp-brush-set-spacing' instead.",
|
|
"Deprecated: Use 'gimp-brush-set-spacing' instead.",
|
|
"",
|
|
"",
|
|
"",
|
|
"gimp-brush-set-spacing");
|
|
gimp_procedure_add_argument (procedure,
|
|
gimp_param_spec_int32 ("spacing",
|
|
"spacing",
|
|
"The brush spacing",
|
|
0, 1000, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_pdb_register_procedure (pdb, procedure);
|
|
g_object_unref (procedure);
|
|
|
|
/*
|
|
* gimp-brushes-get-brush-data
|
|
*/
|
|
procedure = gimp_procedure_new (brushes_get_brush_data_invoker);
|
|
gimp_object_set_static_name (GIMP_OBJECT (procedure),
|
|
"gimp-brushes-get-brush-data");
|
|
gimp_procedure_set_static_strings (procedure,
|
|
"gimp-brushes-get-brush-data",
|
|
"Deprecated: Use 'gimp-brush-get-pixels' instead.",
|
|
"Deprecated: Use 'gimp-brush-get-pixels' instead.",
|
|
"",
|
|
"",
|
|
"",
|
|
"gimp-brush-get-pixels");
|
|
gimp_procedure_add_argument (procedure,
|
|
gimp_param_spec_string ("name",
|
|
"name",
|
|
"The brush name (\"\" means current active brush)",
|
|
FALSE, TRUE, FALSE,
|
|
NULL,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_string ("actual-name",
|
|
"actual name",
|
|
"The brush name",
|
|
FALSE, FALSE, FALSE,
|
|
NULL,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
g_param_spec_double ("opacity",
|
|
"opacity",
|
|
"The brush opacity",
|
|
0, 100, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("spacing",
|
|
"spacing",
|
|
"The brush spacing",
|
|
0, 1000, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
g_param_spec_enum ("paint-mode",
|
|
"paint mode",
|
|
"The paint mode",
|
|
GIMP_TYPE_LAYER_MODE_EFFECTS,
|
|
GIMP_NORMAL_MODE,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("width",
|
|
"width",
|
|
"The brush width",
|
|
G_MININT32, G_MAXINT32, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("height",
|
|
"height",
|
|
"The brush height",
|
|
G_MININT32, G_MAXINT32, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int32 ("length",
|
|
"length",
|
|
"Length of brush mask data",
|
|
0, G_MAXINT32, 0,
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_procedure_add_return_value (procedure,
|
|
gimp_param_spec_int8_array ("mask-data",
|
|
"mask data",
|
|
"The brush mask data",
|
|
GIMP_PARAM_READWRITE));
|
|
gimp_pdb_register_procedure (pdb, procedure);
|
|
g_object_unref (procedure);
|
|
}
|