diff --git a/app/pdb/internal-procs.c b/app/pdb/internal-procs.c index d81e0aa7ee..3543e22091 100644 --- a/app/pdb/internal-procs.c +++ b/app/pdb/internal-procs.c @@ -28,7 +28,7 @@ #include "internal-procs.h" -/* 664 procedures registered total */ +/* 665 procedures registered total */ void internal_procs_init (GimpPDB *pdb) diff --git a/app/pdb/plug-in-compat-cmds.c b/app/pdb/plug-in-compat-cmds.c index 9a05016122..7a189bfd44 100644 --- a/app/pdb/plug-in-compat-cmds.c +++ b/app/pdb/plug-in-compat-cmds.c @@ -78,6 +78,49 @@ plug_in_pixelize_invoker (GimpProcedure *procedure, error ? *error : NULL); } +static GValueArray * +plug_in_pixelize2_invoker (GimpProcedure *procedure, + Gimp *gimp, + GimpContext *context, + GimpProgress *progress, + const GValueArray *args, + GError **error) +{ + gboolean success = TRUE; + GimpDrawable *drawable; + gint32 pixel_width; + gint32 pixel_height; + + drawable = gimp_value_get_drawable (&args->values[2], gimp); + pixel_width = g_value_get_int (&args->values[3]); + pixel_height = g_value_get_int (&args->values[4]); + + if (success) + { + if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && + gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)) + { + GeglNode *node = + gegl_node_new_child (NULL, + "operation", "gegl:pixelise", + "size-x", pixel_width, + "size-y", pixel_height, + NULL); + + gimp_drawable_apply_operation (drawable, progress, + C_("undo-type", "Pixelize"), + node); + + g_object_unref (node); + } + else + success = FALSE; + } + + return gimp_procedure_get_return_values (procedure, success, + error ? *error : NULL); +} + void register_plug_in_compat_procs (GimpPDB *pdb) { @@ -88,9 +131,9 @@ register_plug_in_compat_procs (GimpPDB *pdb) */ procedure = gimp_procedure_new (plug_in_pixelize_invoker); gimp_object_set_static_name (GIMP_OBJECT (procedure), - "gimp-plug-in-pixelize"); + "plug-in-pixelize"); gimp_procedure_set_static_strings (procedure, - "gimp-plug-in-pixelize", + "plug-in-pixelize", "Simplify image into an array of solid-colored squares", "Pixelize the contents of the specified drawable with specified pixelizing width.", "Spencer Kimball & Peter Mattis", @@ -124,4 +167,52 @@ register_plug_in_compat_procs (GimpPDB *pdb) GIMP_PARAM_READWRITE)); gimp_pdb_register_procedure (pdb, procedure); g_object_unref (procedure); + + /* + * gimp-plug-in-pixelize2 + */ + procedure = gimp_procedure_new (plug_in_pixelize2_invoker); + gimp_object_set_static_name (GIMP_OBJECT (procedure), + "plug-in-pixelize2"); + gimp_procedure_set_static_strings (procedure, + "plug-in-pixelize2", + "Simplify image into an array of solid-colored rectangles", + "Pixelize the contents of the specified drawable with specified pixelizing width and height.", + "Spencer Kimball & Peter Mattis", + "Spencer Kimball & Peter Mattis", + "1997", + NULL); + gimp_procedure_add_argument (procedure, + g_param_spec_enum ("run-mode", + "run mode", + "The run mode", + GIMP_TYPE_RUN_MODE, + GIMP_RUN_INTERACTIVE, + GIMP_PARAM_READWRITE)); + gimp_procedure_add_argument (procedure, + gimp_param_spec_image_id ("image", + "image", + "Input image (unused)", + pdb->gimp, FALSE, + GIMP_PARAM_READWRITE)); + gimp_procedure_add_argument (procedure, + gimp_param_spec_drawable_id ("drawable", + "drawable", + "Input drawable", + pdb->gimp, FALSE, + GIMP_PARAM_READWRITE)); + gimp_procedure_add_argument (procedure, + gimp_param_spec_int32 ("pixel-width", + "pixel width", + "Pixel width (the decrease in horizontal resolution)", + 1, GIMP_MAX_IMAGE_SIZE, 1, + GIMP_PARAM_READWRITE)); + gimp_procedure_add_argument (procedure, + gimp_param_spec_int32 ("pixel-height", + "pixel height", + "Pixel height (the decrease in vertical resolution)", + 1, GIMP_MAX_IMAGE_SIZE, 1, + GIMP_PARAM_READWRITE)); + gimp_pdb_register_procedure (pdb, procedure); + g_object_unref (procedure); } diff --git a/tools/pdbgen/app.pl b/tools/pdbgen/app.pl index ce8e893fa7..fd7911f9a9 100644 --- a/tools/pdbgen/app.pl +++ b/tools/pdbgen/app.pl @@ -574,10 +574,18 @@ sub generate { my $help = $proc->{help}; + my $procedure_name; + local $success = 0; $help =~ s/gimp(\w+)\(\s*\)/"'gimp".canonicalize($1)."'"/ge; + if ($proc->{group} eq "plug_in_compat") { + $procedure_name = "$proc->{canonical_name}"; + } else { + $procedure_name = "gimp-$proc->{canonical_name}"; + } + $out->{pcount}++; $total++; $out->{register} .= <{canonical_name}"); + "$procedure_name"); gimp_procedure_set_static_strings (procedure, - "gimp-$proc->{canonical_name}", + "$procedure_name", @{[ "ewrap($proc->{blurb}, 2) ]}, @{[ "ewrap($help, 2) ]}, "$proc->{author}", diff --git a/tools/pdbgen/pdb/plug_in_compat.pdb b/tools/pdbgen/pdb/plug_in_compat.pdb index 95ef09bf64..df7fba35be 100644 --- a/tools/pdbgen/pdb/plug_in_compat.pdb +++ b/tools/pdbgen/pdb/plug_in_compat.pdb @@ -64,6 +64,56 @@ CODE ); } +sub plug_in_pixelize2 { + $blurb = 'Simplify image into an array of solid-colored rectangles'; + + $help = <<'HELP'; +Pixelize the contents of the specified drawable with specified +pixelizing width and height. +HELP + + &std_pdb_misc; + $date = '1997'; + + @inargs = ( + { name => 'run_mode', type => 'enum GimpRunMode', dead => 1, + desc => 'The run mode' }, + { name => 'image', type => 'image', dead => 1, + desc => 'Input image (unused)' }, + { name => 'drawable', type => 'drawable', + desc => 'Input drawable' }, + { name => 'pixel_width', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE', + desc => 'Pixel width (the decrease in horizontal resolution)' }, + { name => 'pixel_height', type => '1 <= int32 <= GIMP_MAX_IMAGE_SIZE', + desc => 'Pixel height (the decrease in vertical resolution)' } + ); + + %invoke = ( + code => <<'CODE' +{ + if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && + gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)) + { + GeglNode *node = + gegl_node_new_child (NULL, + "operation", "gegl:pixelise", + "size-x", pixel_width, + "size-y", pixel_height, + NULL); + + gimp_drawable_apply_operation (drawable, progress, + C_("undo-type", "Pixelize"), + node); + + g_object_unref (node); + } + else + success = FALSE; +} +CODE + ); +} + @headers = qw("libgimpbase/gimpbase.h" "core/gimpdrawable.h" @@ -71,7 +121,8 @@ CODE "gimppdb-utils.h" "gimp-intl.h"); -@procs = qw(plug_in_pixelize); +@procs = qw(plug_in_pixelize + plug_in_pixelize2); %exports = (app => [@procs], lib => []);