Gimp/app/undo.h
Michael Natterer be70105d3b Moved the undo system to the core: Keep GimpUndoStack objects as undo and
2003-02-12  Michael Natterer  <mitch@gimp.org>

	Moved the undo system to the core: Keep GimpUndoStack objects as
	undo and redo stack. Use GimpUndo objects as members of the
	stacks. GimpUndoStack is derived from GimpUndo and keeps undo
	groups, so undo group handling is much simpler than before
	(the whole group is just a single GimpUndo object on the
	stack and not everything between group boundary markers).

	* app/Makefile.am
	* app/undo_types.h: removed.

	* app/config/gimpcoreconfig.[ch]: added "gulong undo_size".
	* app/config/gimprc-blurbs.h: and its blurb.

	* app/core/core-enums.[ch]: added GimpUndoMode and GimpUndoType.

	* app/core/core-types.h: removed UndoType, added GimpUndoAccumulator,
	GimpUndoPopFunc and GimpUndoFreeFunc.

	* app/core/gimpundo.[ch]: do everything the old "Undo" struct did.
	Removed the virtual push() function and added free().

	* app/core/gimpundostack.[ch]: keeps the new undo/redo stacks
	and also acts as undo group.

	* app/core/gimpimage-undo.[ch]: moved the undo apparatus here.

	* app/core/gimpimage.[ch]: removed the old stuff.

	* app/core/gimpmarshal.list: added marshaller needed for GimpUndo.

	* app/undo.[ch]: removed the whole undo mechanism. Only the
	actual undo pushing functions are left.

	* app/undo_history.c
	* app/gui/edit-commands.c
	* app/gui/file-commands.c
	* app/gui/image-menu.c
	* app/gui/preferences-dialog.c
	* app/tools/gimpeditselectiontool.c: changed accordingly.
2003-02-12 17:11:34 +00:00

168 lines
8.1 KiB
C

/* The GIMP -- an 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 2 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, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef __UNDO_H__
#define __UNDO_H__
/* undo groups */
gboolean undo_push_group_start (GimpImage *gimage,
GimpUndoType undo_type);
gboolean undo_push_group_end (GimpImage *gimage);
/* image undos */
gboolean undo_push_image (GimpImage *gimage,
GimpDrawable *drawable,
gint x1,
gint y1,
gint x2,
gint y2);
gboolean undo_push_image_mod (GimpImage *gimage,
GimpDrawable *drawable,
gint x1,
gint y1,
gint x2,
gint y2,
TileManager *tiles,
gboolean sparse);
gboolean undo_push_image_type (GimpImage *gimage);
gboolean undo_push_image_size (GimpImage *gimage);
gboolean undo_push_image_resolution (GimpImage *gimage);
gboolean undo_push_image_qmask (GimpImage *gimage);
gboolean undo_push_image_guide (GimpImage *gimage,
GimpGuide *guide);
/* mask undo */
gboolean undo_push_mask (GimpImage *gimage,
GimpChannel *mask);
/* item undos */
gboolean undo_push_item_rename (GimpImage *gimage,
GimpItem *item);
/* layer undos */
gboolean undo_push_layer_add (GimpImage *gimage,
GimpLayer *layer,
gint prev_position,
GimpLayer *prev_layer);
gboolean undo_push_layer_remove (GimpImage *gimage,
GimpLayer *layer,
gint prev_position,
GimpLayer *prev_layer);
gboolean undo_push_layer_mod (GimpImage *gimage,
GimpLayer *layer);
gboolean undo_push_layer_mask_add (GimpImage *gimage,
GimpLayer *layer,
GimpLayerMask *mask);
gboolean undo_push_layer_mask_remove (GimpImage *gimage,
GimpLayer *layer,
GimpLayerMask *mask);
gboolean undo_push_layer_reposition (GimpImage *gimage,
GimpLayer *layer);
gboolean undo_push_layer_displace (GimpImage *gimage,
GimpLayer *layer);
/* channel undos */
gboolean undo_push_channel_add (GimpImage *gimage,
GimpChannel *channel,
gint prev_position,
GimpChannel *prev_channel);
gboolean undo_push_channel_remove (GimpImage *gimage,
GimpChannel *channel,
gint prev_position,
GimpChannel *prev_channel);
gboolean undo_push_channel_mod (GimpImage *gimage,
GimpChannel *channel);
gboolean undo_push_channel_reposition (GimpImage *gimage,
GimpChannel *channel);
/* vectors undos */
gboolean undo_push_vectors_add (GimpImage *gimage,
GimpVectors *vectors,
gint prev_position,
GimpVectors *prev_vectors);
gboolean undo_push_vectors_remove (GimpImage *gimage,
GimpVectors *channel,
gint prev_position,
GimpVectors *prev_vectors);
gboolean undo_push_vectors_mod (GimpImage *gimage,
GimpVectors *vectors);
gboolean undo_push_vectors_reposition (GimpImage *gimage,
GimpVectors *vectors);
/* floating selection undos */
gboolean undo_push_fs_to_layer (GimpImage *gimage,
GimpLayer *floating_layer,
GimpDrawable *drawable);
gboolean undo_push_fs_rigor (GimpImage *gimage,
gint32 layer_ID);
gboolean undo_push_fs_relax (GimpImage *gimage,
gint32 layer_ID);
/* transform/paint drawable undos */
gboolean undo_push_transform (GimpImage *gimage,
gint tool_ID,
GType tool_type,
gdouble *trans_info,
TileManager *original,
GSList *path_undo);
gboolean undo_push_paint (GimpImage *gimage,
gint core_ID,
GType core_type,
GimpCoords *last_coords);
/* parasite undos */
gboolean undo_push_image_parasite (GimpImage *gimage,
gpointer parasite);
gboolean undo_push_image_parasite_remove (GimpImage *gimage,
const gchar *name);
gboolean undo_push_item_parasite (GimpImage *gimage,
GimpItem *item,
gpointer parasite);
gboolean undo_push_item_parasite_remove (GimpImage *gimage,
GimpItem *item,
const gchar *name);
/* EEK undo */
gboolean undo_push_cantundo (GimpImage *gimage,
const gchar *action);
#endif /* __UNDO_H__ */