# 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 . # "Perlized" from C source by Manish Singh 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;