summaryrefslogtreecommitdiffstats
path: root/pdb/groups/image_undo.pdb
diff options
context:
space:
mode:
Diffstat (limited to 'pdb/groups/image_undo.pdb')
-rw-r--r--pdb/groups/image_undo.pdb306
1 files changed, 306 insertions, 0 deletions
diff --git a/pdb/groups/image_undo.pdb b/pdb/groups/image_undo.pdb
new file mode 100644
index 0000000..cd22cba
--- /dev/null
+++ b/pdb/groups/image_undo.pdb
@@ -0,0 +1,306 @@
+# GIMP - The GNU Image Manipulation Program
+# Copyright (C) 1995 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 <https://www.gnu.org/licenses/>.
+
+# "Perlized" from C source by Manish Singh <yosh@gimp.org>
+
+sub image_undo_group_start {
+ $blurb = 'Starts a group undo.';
+
+ $help = <<'HELP';
+This function is used to start a group undo--necessary for logically combining
+two or more undo operations into a single operation. This call must be used in
+conjunction with a gimp_image_undo_group_end() call.
+HELP
+
+ &std_pdb_misc;
+ $date = '1997';
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The ID of the image in which to open an undo group' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
+ const gchar *undo_desc = NULL;
+
+ if (plug_in)
+ {
+ success = gimp_plug_in_cleanup_undo_group_start (plug_in, image);
+
+ if (success)
+ undo_desc = gimp_plug_in_get_undo_desc (plug_in);
+ }
+
+ if (success)
+ gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_MISC, undo_desc);
+}
+CODE
+ );
+}
+
+sub image_undo_group_end {
+ $blurb = 'Finish a group undo.';
+
+ $help = <<'HELP';
+This function must be called once for each gimp_image_undo_group_start() call
+that is made.
+HELP
+
+ &std_pdb_misc;
+ $date = '1997';
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The ID of the image in which to close an undo group' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
+
+ if (plug_in)
+ success = gimp_plug_in_cleanup_undo_group_end (plug_in, image);
+
+ if (success)
+ gimp_image_undo_group_end (image);
+}
+CODE
+ );
+}
+
+sub image_undo_is_enabled {
+ $blurb = "Check if the image's undo stack is enabled.";
+
+ $help = <<'HELP';
+This procedure checks if the image's undo stack is currently enabled or
+disabled. This is useful when several plug-ins or scripts call each other
+and want to check if their caller has already used gimp_image_undo_disable()
+or gimp_image_undo_freeze().
+HELP
+
+ &raphael_pdb_misc('1999');
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'enabled', type => 'boolean',
+ desc => 'TRUE if undo is enabled for this image' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+ enabled = gimp_image_undo_is_enabled (image);
+}
+CODE
+ );
+}
+
+sub image_undo_disable {
+ $blurb = "Disable the image's undo stack.";
+
+ $help = <<'HELP';
+This procedure disables the image's undo stack, allowing subsequent operations
+to ignore their undo steps. This is generally called in conjunction with
+gimp_image_undo_enable() to temporarily disable an image undo stack. This is
+advantageous because saving undo steps can be time and memory intensive.
+HELP
+
+ &std_pdb_misc;
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'disabled', type => 'boolean',
+ desc => 'TRUE if the image undo has been disabled' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+#if 0
+ GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
+
+ if (plug_in)
+ success = gimp_plug_in_cleanup_undo_disable (plug_in, image);
+#endif
+
+ if (success)
+ disabled = gimp_image_undo_disable (image);
+}
+CODE
+ );
+}
+
+sub image_undo_enable {
+ $blurb = "Enable the image's undo stack.";
+
+ $help = <<'HELP';
+This procedure enables the image's undo stack, allowing subsequent operations
+to store their undo steps. This is generally called in conjunction with
+gimp_image_undo_disable() to temporarily disable an image undo stack.
+HELP
+
+ &std_pdb_misc;
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'enabled', type => 'boolean',
+ desc => 'TRUE if the image undo has been enabled' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+#if 0
+ GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
+
+ if (plug_in)
+ success = gimp_plug_in_cleanup_undo_enable (plug_in, image);
+#endif
+
+ if (success)
+ enabled = gimp_image_undo_enable (image);
+}
+CODE
+ );
+}
+
+sub image_undo_freeze {
+ $blurb = "Freeze the image's undo stack.";
+
+ &adam_pdb_misc('1999');
+
+ $help = <<'HELP';
+This procedure freezes the image's undo stack, allowing subsequent
+operations to ignore their undo steps. This is generally called in
+conjunction with gimp_image_undo_thaw() to temporarily disable an
+image undo stack. This is advantageous because saving undo steps can
+be time and memory intensive. gimp_image_undo_freeze() /
+gimp_image_undo_thaw() and gimp_image_undo_disable() /
+gimp_image_undo_enable() differ in that the former does not free up
+all undo steps when undo is thawed, so is more suited to interactive
+in-situ previews. It is important in this case that the image is back
+to the same state it was frozen in before thawing, else 'undo'
+behaviour is undefined.
+HELP
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'frozen', type => 'boolean',
+ desc => 'TRUE if the image undo has been frozen' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+#if 0
+ GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
+
+ if (plug_in)
+ success = gimp_plug_in_cleanup_undo_freeze (plug_in, image);
+#endif
+
+ if (success)
+ frozen = gimp_image_undo_freeze (image);
+}
+CODE
+ );
+}
+
+sub image_undo_thaw {
+ $blurb = "Thaw the image's undo stack.";
+
+ &adam_pdb_misc('1999');
+
+ $help = <<'HELP';
+This procedure thaws the image's undo stack, allowing subsequent
+operations to store their undo steps. This is generally called in
+conjunction with gimp_image_undo_freeze() to temporarily freeze an
+image undo stack. gimp_image_undo_thaw() does NOT free the undo stack
+as gimp_image_undo_enable() does, so is suited for situations where
+one wishes to leave the undo stack in the same state in which one
+found it despite non-destructively playing with the image in the
+meantime. An example would be in-situ plug-in previews. Balancing
+freezes and thaws and ensuring image consistency is the responsibility
+of the caller.
+HELP
+
+ @inargs = (
+ { name => 'image', type => 'image',
+ desc => 'The image' }
+ );
+
+ @outargs = (
+ { name => 'thawed', type => 'boolean',
+ desc => 'TRUE if the image undo has been thawed' }
+ );
+
+ %invoke = (
+ code => <<'CODE'
+{
+#if 0
+ GimpPlugIn *plug_in = gimp->plug_in_manager->current_plug_in;
+
+ if (plug_in)
+ success = gimp_plug_in_cleanup_undo_thaw (plug_in, image);
+#endif
+
+ if (success)
+ thawed = gimp_image_undo_thaw (image);
+}
+CODE
+ );
+}
+
+
+@headers = qw("core/gimp.h"
+ "core/gimpimage-undo.h"
+ "plug-in/gimpplugin.h"
+ "plug-in/gimpplugin-cleanup.h"
+ "plug-in/gimppluginmanager.h");
+
+@procs = qw(image_undo_group_start image_undo_group_end
+ image_undo_is_enabled
+ image_undo_disable image_undo_enable
+ image_undo_freeze image_undo_thaw);
+
+%exports = (app => [@procs], lib => [@procs]);
+
+$desc = 'Image Undo';
+$doc_title = 'gimpimageundo';
+$doc_short_desc = 'Control of image undo/redo.';
+$doc_long_desc = 'Control of image undo/redo.';
+
+1;