Commit Graph

243 Commits

Author SHA1 Message Date
Michael Natterer 46a25c2c60 app/core/core-enums.[ch] app/core/gimpimage-undo-push.[ch] eek, my
2005-03-24  Michael Natterer  <mitch@gimp.org>

	* app/core/core-enums.[ch]
	* app/core/gimpimage-undo-push.[ch]
	* app/core/gimplayermask.[ch]: eek, my fault... removed
	GIMP_UNDO_LAYER_MASK_EDIT stuff again because that just determines
	the active drawable, which must not affect undo.

	* app/pdb/pdb_glue.h
	* app/actions/layers-commands.c (layers_mask_edit_cmd_callback):
	changed accordingly.

	(layers_mask_disable_cmd_callback): reverted last change. the old
	code was correct.
2005-03-24 22:34:36 +00:00
Michael Natterer b17e5b4aad reordered values so layer and layer mask undos are grouped together.
2005-03-24  Michael Natterer  <mitch@gimp.org>

	* app/core/core-enums.[ch] (enum GimpUndoType) : reordered values
	so layer and layer mask undos are grouped together.

	* app/core/gimpimage-undo-push.[ch]: same here. Changed the new
	layer mask undos to have 3 simple push functions for the 3
	properties, just as the layer property undos. Also made the code
	look like the layer properties undo stuff.

	* app/core/gimplayermask.c (gimp_layer_mask_set_apply,edit,show):
	changed accordingly.
2005-03-24 22:15:10 +00:00
William Skaggs bd9ef9bed6 Bill Skaggs <weskaggs@primate.ucdavis.edu>
* app/core/gimpimage-undo-push.[ch]
	* app/core/gimplayermask.c: fix compile warnings.
2005-03-24 19:23:14 +00:00
William Skaggs b5f1ae88e2 Bill Skaggs <weskaggs@primate.ucdavis.edu>
* app/core/core-enums.[ch]
	* app/core/gimpimage-undo-push.[ch]
	* app/core/gimplayermask.[ch]:
	* app/pdb/pdb_glue.h
	* app/actions/layers-commands.c: try again from clean tree;
	hopefully will work this time.  (bug #148852)
2005-03-24 17:10:03 +00:00
Sven Neumann 4314dca031 app/actions/layers-commands.c app/core/core-enums.[ch]
2005-03-24  Sven Neumann  <sven@gimp.org>

	* app/actions/layers-commands.c
	* app/core/core-enums.[ch]
	* app/core/gimpimage-undo-push.[ch]
	* app/pdb/pdb_glue.h: reverted Bill's changes to fix the build.
2005-03-24 10:34:41 +00:00
William Skaggs 72241e5ed2 Bill Skaggs <weskaggs@primate.ucdavis.edu>
* app/core/core-enums.[ch]
	* app/core/gimpimage-undo-push.[ch]
	* app/pdb/pdb_glue.h
	* app/actions/layers-commands.c: make layer mask property changes
	undoable, should fix bug #148852.  Note that a little shape-layer
	stuff is in core-enums, will be needed shortly.
2005-03-24 02:16:40 +00:00
Michael Natterer f41e059067 More sample point stuff. Addresses bug #137776.
2005-03-09  Michael Natterer  <mitch@gimp.org>

	More sample point stuff. Addresses bug #137776.

	* app/core/gimpimage-sample-points.c
	* app/core/gimpimage-undo-push.c: append, not prepend the sample
	paints to the image's list because their index matters. Update
	sample points when their index changes.

	* app/display/gimpcanvas.[ch]: added own sytles for the sample
	points.  Added gimp_canvas_draw_text() which uses a PangoLayout
	which is cached in the canvas.

	* app/display/gimpdisplayshell-draw.c
	(gimp_display_shell_draw_sample_point): draw the sample points
	more distinct from guides using the new canvas APIs above.

	* app/display/gimpdisplayshell-callbacks.c
	(gimp_display_shell_[hv]ruler_button_press): factored out all
	code to

	(gimp_display_shell_ruler_burron_press): which takes a boolean
	"horizontal" variable and allows to add sample points with
	<control>+drag.

	* app/tools/gimpcolortool.[ch]: implement adding, moving and
	removing of sample points in the same way as the move tool moves
	guides.

	* app/tools/gimpcolorpickertool.c
	(gimp_color_picker_tool_oper_update): chain up.
2005-03-09 00:23:19 +00:00
Michael Natterer be6a9d2a8b app/actions/view-actions.c app/actions/view-commands.[ch]
2005-03-05  Michael Natterer  <mitch@gimp.org>

	* app/actions/view-actions.c
	* app/actions/view-commands.[ch]
	* app/config/gimprc-blurbs.h
	* app/core/core-enums.[ch]
	* app/core/gimp.c
	* app/core/gimpimage-crop.c
	* app/core/gimpimage-undo-push.[ch]
	* app/core/gimpimage.c
	* app/display/gimpdisplayoptions.[ch]
	* app/display/gimpdisplayshell-appearance.[ch]
	* app/display/gimpdisplayshell-callbacks.c
	* app/display/gimpdisplayshell-draw.[ch]
	* app/widgets/gimphelp-ids.h
	* menus/image-menu.xml.in: reordered stuff to be in guides, grid,
	sample points order. Some cleanup and indentation.
2005-03-05 00:10:40 +00:00
William Skaggs ea267753f6 Bill Skaggs <weskaggs@primate.ucdavis.edu>
* app/core/gimpimage-sample-points.c
	* app/core/gimpimage-sample-points.h: new files

	* app/actions/view-actions.c
	* app/actions/view-commands.c
	* app/actions/view-commands.h
	* app/config/gimprc-blurbs.h
	* app/core/Makefile.am
	* app/core/core-enums.c
	* app/core/core-enums.h
	* app/core/core-types.h
	* app/core/gimp.c
	* app/core/gimp.h
	* app/core/gimpimage-crop.c
	* app/core/gimpimage-duplicate.c
	* app/core/gimpimage-flip.c
	* app/core/gimpimage-rotate.c
	* app/core/gimpimage-scale.c
	* app/core/gimpimage-undo-push.c
	* app/core/gimpimage-undo-push.h
	* app/core/gimpimage.c
	* app/core/gimpimage.h
	* app/display/gimpdisplayoptions.c
	* app/display/gimpdisplayoptions.h
	* app/display/gimpdisplayshell-appearance.c
	* app/display/gimpdisplayshell-appearance.h
	* app/display/gimpdisplayshell-callbacks.c
	* app/display/gimpdisplayshell-draw.c
	* app/display/gimpdisplayshell-draw.h
	* app/display/gimpdisplayshell-handlers.c
	* app/display/gimpdisplayshell.c
	* app/display/gimpdisplayshell.h
	* app/widgets/gimphelp-ids.h
	* menus/image-menu.xml.in: add support for a list of "sample
	points" in each image, coded and handled very similarly to
	guides, for use mainly in color correction.  See bug #137776.
2005-03-04 16:34:59 +00:00
William Skaggs 1cee9b7298 continuing commit after broken pipe 2005-01-25 19:11:26 +00:00
Michael Natterer a708b85b8b when removing the floating selection, call
2004-12-03  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_layer): when removing
	the floating selection, call gimp_drawable_invalidate_boundary()
	*before* setting gimage->floating_sel to NULL because otherwise
	gimp_display_shell_selection_invis() won't clear the correct
	selection bounds and leave garbage on screen. Fixes bug #160247.
2004-12-03 13:39:50 +00:00
Michael Natterer b7e8659ac3 disallow non-attached items to be pushed to the undo stack.
2004-11-12  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c: disallow non-attached items
	to be pushed to the undo stack.
2004-11-12 10:56:23 +00:00
Sven Neumann ab6c609ce1 renamed struct member "unit" to "resolution_unit".
2004-10-12  Sven Neumann  <sven@gimp.org>

	* app/core/gimpimage.[ch]: renamed struct member "unit" to
	"resolution_unit".

	* app/actions/image-commands.c
	* app/core/gimp-edit.c
	* app/core/gimpimage-duplicate.c
	* app/core/gimpimage-undo-push.c
	* app/dialogs/info-window.c
	* app/vectors/gimpvectors-export.c
	* app/widgets/gimptoolbox-dnd.c:
	* app/xcf/xcf-load.c
	* app/xcf/xcf-save.c: changed accordingly. Use gimp_image_get_unit()
	where appropriate.

	* app/core/gimptemplate.c (gimp_template_set_from_image): fixed
	unit handling. Don't touch the template unit, it is used as the
	initial display unit. This will need further changes...
2004-10-12 21:28:53 +00:00
Michael Natterer 877b19c372 factored common code out of the UNDO amd REDO cases. Use
2004-09-24  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_fs_to_layer): factored
	common code out of the UNDO amd REDO cases. Use gimp_drawable_update()
	instead of gimp_viewable_invalidate_preview() so the projection
	gets updated correctly. Fixes bug #149558.

	* app/core/gimplayer-floating-sel.c (floating_sel_to_layer):
	removed unused variables and their assignments.
2004-09-24 18:06:49 +00:00
Michael Natterer 10d80dac75 removed the hack that was displaying "Floating Selection" instead of the
2004-09-22  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimplayertreeview.c
	(gimp_layer_tree_view_floating_selection_changed): removed the
	hack that was displaying "Floating Selection" instead of the
	floating layer's real name.

	* app/core/gimplayer.c: implement GimpViewable::get_description()
	instead and special case floating selections with a two-line
	text that contains "Floating Selection".

	* app/core/gimplayer-floating-sel.c
	* app/core/gimpimage-undo-push.c: emit "name_changed" on the layer
	when it changes its state from floating to normal or vice versa
	so the views can update accordingly.

	* app/core/gimpselection.c: s/"Selection"/"Floated Layer"/.

	* app/tools/gimpeditselectiontool.c:
	s/"Floating Layer"/"Floating Selection"/.
2004-09-22 12:46:35 +00:00
Sven Neumann 23690346af Improved undo memory calculation for paint operations (bug #153035):
2004-09-19  Sven Neumann  <sven@gimp.org>

	Improved undo memory calculation for paint operations (bug #153035):

	* app/base/tile-manager.[ch] (tile_manager_get_memsize): added a
	"gboolean sparse" parameter to get more accurate results for
	sparse tile-managers.

	* app/core/gimpbuffer.c
	* app/core/gimpdrawable.c
	* app/core/gimpimage-undo-push.c
	* app/core/gimpimage.c
	* app/core/gimplayer.c
	* app/core/gimpprojection.c: changed accordingly.
2004-09-19 19:47:26 +00:00
Michael Natterer 4b582b481a Replaced the concept of having a boolean indicating if an undo step
2004-07-29  Michael Natterer  <mitch@gimp.org>

	Replaced the concept of having a boolean indicating if an undo
	step dirties the image by a bitfield indicating which parts
	of the image are dirtied:

	* app/core/core-enums.[ch]: reordered two values in enum
	GimpUndoType, added GIMP_DIRTY_IMAGE_SIZE to enum GimpDirtyMask.

	The values of GimpDirtyMask are still questionable and will
	probably change...

	* app/core/gimpimage.[ch]: removed signal "undo_start" and added
	a GimpDirtyMask parameter to the "dirty" and "clean" signals.

	* app/core/gimpimage-undo.[ch] (gimp_image_undo_push): replaced
	"gboolean dirties_image" by "GimpDirtyMask dirty_mask" and pass
	it to gimp_image_dirty().

	(gimp_image_undo_group_start): added *ugly* code which tries to
	figure GimpDirtyMask from the group's GimpUndoType and store it in
	the GimpUndoGroup. Call gimp_image_dirty() instead of the removed
	gimp_image_undo_start(). This means the undo group now dirties the
	image just like one of its undo steps, but that's no problem since
	undoing cleans it in the same way.

	* app/core/gimpundo.[ch]: s/dirties_image/dirty_mask/g

	(gimp_undo_pop): emit clean/dirty signals *before* performing the
	actual undo step so listeners can detach from the image before it
	is changed by undo.

	* app/core/gimpimage-undo-push.c (gimp_image_undo_push_*): pass a
	GimpDirtyMask instead of TRUE/FALSE to gimp_image_undo_push().

	* app/core/gimpimagemap.[ch]: removed "gboolean interactive"
	because it makes no sense to use GimpImageMap noninteractively.
	Don't freeze()/thaw() undo while the image_map is active which
	fixes many ways of trashing the image's undo state but probably
	introduces new ways of doing evil things.

	* app/display/gimpdisplay-foreach.c
	* app/display/gimpdisplayshell-handlers.c: changed according
	to the GimpImage::clean()/dirty() signal changes. Small fixes
	in the quit dialog's dirty image container.

	* app/tools/gimptoolcontrol.[ch]: added member and API to
	set/get the dirty_mask.

	* app/tools/gimpcroptool.c
	* app/tools/gimpimagemaptool.c
	* app/tools/gimpiscissorstool.c
	* app/tools/gimptexttool.c
	* app/tools/gimptransformtool.c: whenever setting "preserve" to
	FALSE, also set a "dirty_mask" which specifies on which image
	changes the tool wants to be canceled.

	* app/tools/tool_manager.c: removed "undo_start" connection and
	connect to both "dirty" *and* "clean" to check if the active_tool
	needs to be canceled. Cancel the tool only if the dirty_mask
	passed in the signal has common bits with the tool's dirty_mask.

	Fixes bug #109561 and probably opens some new ones...
2004-07-29 14:16:21 +00:00
Michael Natterer 87b5322fdb added properties "gimp", "id", "width", "height" and "base-type". Moved
2004-07-14  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage.c: added properties "gimp", "id", "width",
	"height" and "base-type". Moved all code from gimp_image_new()
	to GObject::constructor().

	* app/core/gimpimage-convert.c
	* app/core/gimpimage-crop.c
	* app/core/gimpimage-resize.c
	* app/core/gimpimage-rotate.c
	* app/core/gimpimage-scale.c
	* app/core/gimpimage-undo-push.c: set "width", "height" and
	"base-type" with g_object_set() so "notify" is emitted on the
	properties.

	* app/core/gimpimage-undo.c (gimp_image_undo_pop_stack):
	freeze/thaw property notifications around undoing/redoing so they
	are not emitted in the middle of the undo operation.
2004-07-14 12:12:50 +00:00
Michael Natterer da74f1269e app/core/gimpundo.[ch] app/core/gimpitemundo.[ch] removed all _new()
2004-07-12  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpundo.[ch]
	* app/core/gimpitemundo.[ch]
	* app/text/gimptextundo.[ch]: removed all _new() functions and
	added properties and GObject::constructor() implementations
	instead.

	* app/core/gimpimage-undo.[ch] (gimp_image_undo_push): added
	"GType undo_gtype" parameter and allow to pass name-value pairs as
	"...". Une the new GParameter utility functions to construct the
	appropriate undo step with g_object_newv().

	(gimp_image_undo_push_item): removed.

	(gimp_image_undo_push_undo): removed. Merged its code back into
	gimp_image_undo_push(), where it originally came from.

	* app/core/gimpimage-undo-push.c
	* app/core/gimpundostack.c
	* app/paint/gimppaintcore-undo.c
	* app/tools/gimptransformtool-undo.c
	* app/widgets/gimpundoeditor.c: changed accordingly.
2004-07-12 16:59:36 +00:00
Michael Natterer 525a98f81a Made the undo system robust against the currently pushed undo being too
2004-07-07  Michael Natterer  <mitch@gimp.org>

	Made the undo system robust against the currently pushed undo
	being too large according to prefs settings. Fixes bug #145379.

	* app/core/gimpimage-undo.[ch] (gimp_image_undo_push_undo)
	(gimp_image_undo_group_end): emit "undo-event" *before* calling
	gimp_image_undo_free_space() so the undo history doesn't try to
	remove an item that has never been added.

	(gimp_image_undo_push_undo): added boolean return value indicating
	if the undo could be pushed (FALSE means the undo was to large
	and was discarded right away).

	(gimp_image_undo_push_item): return NULL if the above returned
	FALSE.

	* app/core/gimpimage-undo-push.c (gimp_image_undo_push_text_layer):
	changed accordingly.
2004-07-07 13:58:51 +00:00
Michael Natterer acc72b620e added undo type GIMP_UNDO_TEXT_LAYER_MODIFIED and undo group types
2004-04-01  Michael Natterer  <mitch@gimp.org>

	* app/core/core-enums.[ch] (enum GimpUndoType): added undo type
	GIMP_UNDO_TEXT_LAYER_MODIFIED and undo group types
	GIMP_UNDO_GROUP_DRAWABLE and GIMP_UNDO_GROUP_DRAWABLE_MOD.

	* app/core/gimpimage-undo-push.[ch]: added new new function
	gimp_image_undo_push_text_layer_modified() which makes
	modifications of the text_layer's "modified" boolean undoable.

	* app/core/gimpdrawable.[ch]: added new virtual function
	GimpDrawable::push_undo() and moved the actual undo pushing into
	the default implementation gimp_drawable_real_push_undo().

	* app/text/gimptextlayer.c (gimp_text_layer_push_undo): new
	function. Pushes the text_layer's modified state to the undo stack
	after upchaining and sets modified to TRUE.

	(gimp_text_layer_set_tiles): ditto.

	(gimp_lext_layer_apply_region)
	(gimp_text_layer_replace_region): removed because their default
	implementations already call gimp_drawable_push_undo().

	(gimp_text_layer_swap_pixels): removed because swap_pixels() is
	used by undo only and doesn't need to care about the text_layer's
	modified state.

	(gimp_text_layer_render): don't set modified to FALSE here because
	we can't push an undo step here.

	(gimp_text_layer_set): push the modified state to the undo stack
	and set it to FALSE here. Also push the layer's tiles if the
	layer was modified.

	* app/tools/gimptexttool.c (gimp_text_tool_apply): push "modified"
	to the undo stack and set it to FALSE here, too.

	Fixes bug #137767.
2004-04-01 14:51:58 +00:00
Michael Natterer 0af7cfa584 when re-adding a layer with mask, don't forget to set layer->mask->removed
2004-03-28  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_layer): when re-adding
	a layer with mask, don't forget to set layer->mask->removed to FALSE.
2004-03-28 14:25:42 +00:00
Michael Natterer 77447984cc added "gboolean removed" to the GimpItem struct. Defaults to FALSE. Set it
2004-03-28  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpitem.[ch]: added "gboolean removed" to the GimpItem
	struct. Defaults to FALSE. Set it to TRUE in gimp_item_removed().
	Added public function gimp_item_is_removed().

	* app/core/gimpimage-undo-push.c (undo_pop_layer)
	(undo_pop_layer_mask) (undo_pop_channel) (undo_pop_vectors):
	set it to FALSE manually when re-adding something from the
	undo stack.

	* tools/pdbgen/app.pl
	* tools/pdbgen/pdb.pl: don't allow any operation on items which
	are removed from the image (and exist on the undo stack only).
	Fixes bug #138311.

	* app/pdb/channel_cmds.c
	* app/pdb/color_cmds.c
	* app/pdb/drawable_cmds.c
	* app/pdb/edit_cmds.c
	* app/pdb/floating_sel_cmds.c
	* app/pdb/image_cmds.c
	* app/pdb/layer_cmds.c
	* app/pdb/paint_tools_cmds.c
	* app/pdb/parasite_cmds.c
	* app/pdb/selection_cmds.c
	* app/pdb/selection_tools_cmds.c
	* app/pdb/transform_tools_cmds.c: regenerated.
2004-03-28 14:20:57 +00:00
Sven Neumann 2326e1b979 added gimp_undo_type_to_name() a similar function used to live in
2004-03-21  Sven Neumann  <sven@gimp.org>

	* app/core/gimpundo.[ch]: added gimp_undo_type_to_name() a similar
	function used to live in gimpimage-undo.[ch].

	* app/core/gimpitemundo.c (gimp_item_undo_new): allow NULL as name
	and generate it from the undo_type then.

	* app/core/gimpimage-undo.[ch]: added gimp_image_undo_push_undu(),
	new function that allows to push an undo on the image.

	* app/text/Makefile.am
	* app/text/text-types.h
	* app/text/gimptextundo.[ch]: added GimpTextUndo, derived from
	GimpItemUndo.

	* app/core/gimpimage-undo-push.c (gimp_image_undo_push_text_layer):
	use the new code and simply push a text undo here.

	* app/tools/gimptexttool.c: compress text undos by peeking at the
	undo stack. Fixes bug #137766.
2004-03-21 23:14:21 +00:00
Sven Neumann 584b3ceb9b don't take the image from tool->gdisp, this might be a NULL pointer.
2004-03-20  Sven Neumann  <sven@gimp.org>

	* app/tools/gimptexttool.c (gimp_text_tool_create_vectors): don't
	take the image from tool->gdisp, this might be a NULL pointer.

	* app/core/gimpimage-undo-push.c: removed debugging output.
2004-03-20 20:10:05 +00:00
Sven Neumann 20d03407fe avoid to set the unit property with every size change; only set it if it
2004-03-20  Sven Neumann  <sven@gimp.org>

	* app/widgets/gimppropwidgets.c (gimp_prop_size_entry_callback):
	avoid to set the unit property with every size change; only set it
	if it actually changed.

	* app/core/gimpimage-undo-push.c (gimp_image_undo_push_text_layer):
	allow to pass a GParamSpec that identifies a single text property
	to be changed. In this case, don't store a GimpText object on the
	undo stack but only the changed value.

	* app/tools/gimptexttool.c: use the new undo feature to reduce the
	memory footprint of text undo for the common case.

	* app/text/gimptextlayer.c: changed accordingly.
2004-03-20 17:21:48 +00:00
Sven Neumann 8214f17256 fixed a bug that Mitch spotted.
2004-03-20  Sven Neumann  <sven@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_text_layer): fixed a
	bug that Mitch spotted.
2004-03-19 23:38:02 +00:00
Sven Neumann cbbe4f3871 don't exchange the text_layer's text object but sync it with the text
2004-03-20  Sven Neumann  <sven@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_text_layer): don't
	exchange the text_layer's text object but sync it with the text
	object from the undo step.

	* app/text/gimptextlayer.c (gimp_text_layer_set): in case the
	layer has a mask, push an undo group around the text modifications.

	* app/tools/gimptexttool.c (gimp_text_tool_idle_apply): push a
	text layer undo before applying the text changes.
2004-03-19 23:08:24 +00:00
Michael Natterer 49238237dc ref new tiles before unrefing the old ones.
2004-03-16  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpdrawable.c (gimp_drawable_set_tiles): ref new
	tiles before unrefing the old ones.

	* app/core/gimpimage-undo-push.c: keep undo memsize exact by
	adjusting undo->size when the stored data changes.

	* app/core/gimpchannel.[ch] (gimp_channel_new_from_alpha)
	* app/core/gimpchannel-select.[ch] (gimp_channel_select_alpha):
	replaced "layer" parameter by "drawable".

	* app/gui/layers-commands.c
	* tools/pdbgen/pdb/selection.pdb: changed accordingly.

	* app/pdb/selection_cmds.c: regenerated.

	* app/core/gimpchannel.c
	* app/core/gimplayer.c
	* app/core/gimplayermask.[ch]
	* app/core/gimpselection.c: remdom cleanup & code review.
2004-03-16 16:23:06 +00:00
Michael Natterer 83dc4c3b49 removed unused #includes.
2004-03-16  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c: removed unused #includes.
2004-03-16 00:37:24 +00:00
Michael Natterer 5ef7c7746d replaced GIMP_UNDO_LAYER_MOD and GIMP_UNDO_CHANNEL_MOD by
2004-03-15  Michael Natterer  <mitch@gimp.org>

	* app/core/core-enums.[ch] (enum GimpUndoType): replaced
	GIMP_UNDO_LAYER_MOD and GIMP_UNDO_CHANNEL_MOD by
	GIMP_UNDO_DRAWABLE_MOD.

	* app/core/gimpimage-undo-push.[ch]: ditto: replaced
	gimp_image_undo_push_layer_mod() and
	gimp_image_undo_push_channel_mod() by
	gimp_image_undo_push_drawable_mod().

	* app/core/gimpdrawable.[ch]: added undo_desc strings for "resize"
	and "scale" to the GimpDrawableClass struct.

	(gimp_drawable_scale)
	(gimp_drawable_resize): pass push_undo = TRUE to
	gimp_drawable_set_tiles_full() and use the undo_desc from the
	class.

	(gimp_drawable_real_set_tiles): push a GIMP_UNDO_DRAWABLE_MOD here...

	* app/core/gimpchannel.c
	* app/core/gimplayer.c: ...and don't push undos in
	GimpItem::scale(), GimpItem::resize(), GimpDrawable::set_tiles().

	* app/core/gimpchannel.c: Removed even more bounds_known = FALSE
	assignments from functions which already call
	gimp_drawable_set_tiles().
2004-03-15 20:58:07 +00:00
Michael Natterer 59b77c35c2 emit "update" signals from the drawable before and after setting tiles and
2004-03-15  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpdrawable.c (gimp_drawable_set_tiles_full): emit
	"update" signals from the drawable before and after setting tiles
	and offsets.

	* app/core/gimpdrawable-offset.c (gimp_drawable_offset)
	* app/core/gimpdrawable-transform.c (gimp_drawable_transform_paste)
	* app/core/gimpimage-undo-push.c (undo_pop_layer_mod, _channel_mod)
	* app/text/gimptextlayer.c (gimp_text_layer_render)
	* app/tools/gimptransformtool.c (gimp_transform_tool_doit):
	removed calls to gimp_drawable_update().

	* app/core/gimpdrawable-offset.c (gimp_drawable_offset): don't
	push an undo step before calling gimp_drawable_set_tiles()
	but simply pass push_undo == TRUE and the undo_desc.
2004-03-15 20:05:31 +00:00
Michael Natterer 1ef5fa93ca added "offset_x" and "offset_y" parameters to GimpDrawable::set_tiles().
2004-03-15  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpdrawable.[ch]: added "offset_x" and "offset_y"
	parameters to GimpDrawable::set_tiles().

	(gimp_drawable_set_tiles): removed the "GimpImageType" parameter.

	(gimp_drawable_set_tiles_full): new function adding type, offset_x
	and offset_y parameters.

	(gimp_drawable_real_set_tiles): set the drawable's offsets from
	the offset parameters and its size from the passed TileManager's
	size. Emit "size_changed" accordingly.

	* app/core/gimpchannel.c
	* app/core/gimpdrawable-offset.c
	* app/core/gimpdrawable-transform.c
	* app/core/gimpimage-convert.c
	* app/core/gimpimage-undo-push.c
	* app/core/gimplayer.c
	* app/text/gimptextlayer.c
	* app/tools/gimptransformtool.c: changed accordingly: removed
	calls to gimp_viewable_size_changed() and all sorts of hackish
	assignments of the drawable's width/height/offset_x/offset_y
	properties.
2004-03-15 19:34:35 +00:00
Michael Natterer 7977603648 don't call gimp_image_flush().
2004-03-15  Michael Natterer  <mitch@gimp.org>

	* app/text/gimptextlayer.c (gimp_text_layer_render): don't call
	gimp_image_flush().

	* app/tools/gimpxttool.c (gimp_text_tool_apply): call it here
	instead.

	Now that we have a common place that exchanges drawable->tiles,
	we can abstract away boundary invalidation for this operation:

	* app/core/gimpdrawable.c (gimp_drawable_real_set_tiles):
	call gimp_drawable_invalidate_boundary() before setting
	the new tiles.

	* app/core/gimpchannel.c (gimp_channel_set_tiles)
	* app/core/gimpdrawable-transform.c (gimp_drawable_transform_paste)
	* app/core/gimpimage-undo-push.c (undo_pop_layer_mod)
	* app/core/gimplayer.c (gimp_layer_scale) (gimp_layer_resize)
	(gimp_layer_flip) (gimp_layer_rotate) (gimp_layer_transform)
	* app/text/gimptextlayer.c (gimp_text_layer_render): removed
	calls to gimp_drawable_invalidate_boundary() from all functions
	which finally call gimp_drawable_real_set_tiles().

	* app/tools/gimptransformtool.c (gimp_transform_tool_doit): no
	need to set channel->bounds_known to FALSE, because
	gimp_drawable_set_tiles() already did this.
2004-03-15 17:53:55 +00:00
Michael Natterer 800b7a5d53 added "gboolean alpha_changed" to GimpImageFlushAccumulator. Install an
2004-03-15  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage.[ch]: added "gboolean alpha_changed" to
	GimpImageFlushAccumulator. Install an "alpha_changed" handler
	on gimage->layers and set flush_accum.alpha_changed = TRUE
	whenever the image's *only* layer changed its alpha.

	* app/core/gimpimage-undo-push.c (undo_pop_layer_mod)
	* app/core/gimplayer.c (gimp_layer_add_alpha): removed
	explicit calls to gimp_image_alpha_changed().
2004-03-15 16:38:49 +00:00
Michael Natterer d376ac5d5e emit "alpha_changed" if the drawable got/lost an alpha channel by setting
2004-03-15  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpdrawable.c (gimp_drawable_real_set_tiles): emit
	"alpha_changed" if the drawable got/lost an alpha channel by
	setting the new tiles.

	* app/core/gimpimage-undo-push.c (undo_pop_layer_mod)
	* app/core/gimplayer.c (gimp_layer_add_alpha): removed explicit
	calls to gimp_drawable_alpha_changed().
2004-03-15 15:37:12 +00:00
Michael Natterer 434500023d Closer to text layer undo:
2004-03-15  Michael Natterer  <mitch@gimp.org>

	Closer to text layer undo:

	* app/core/gimpchannel.c (gimp_channel_set_tiles): invalidate the
	channel's boundary and bounds.

	* app/text/gimptextlayer.c: implement GimpDrawable::swap_pixels()
	and set text_layer->modified = TRUE after upchaining.

	(gimp_text_layer_render): use gimp_drawable_set_tiles() and
	set text_layer->modified = FALSE afterwards.

	* app/core/gimpimage-undo-push.c: cleaned up variable declarations
	and initializations.

	(undo_pop_layer_mod)
	(undo_pop_channel_mod): use gimp_channel_set_tiles() instead of
	touching drawable->tiles manually. Now all pixel manipulation
	(at least on layers) should be virtualized and can be detected by
	the text layer.
2004-03-15 15:18:25 +00:00
Michael Natterer a18a1d12dd Prepare the undo system for proper text layer undo:
2004-03-15  Michael Natterer  <mitch@gimp.org>

	Prepare the undo system for proper text layer undo:

	* app/core/core-enums.[ch] (enum GimpUndoType): replaced
	GIMP_UNDO_IMAGE and GIMP_UNDO_IMAGE_MOD by GIMP_UNDO_DRAWABLE.

	* app/core/gimpimage-undo-push.[ch]: ditto: replaced
	gimp_image_undo_push_image() and gimp_image_undo_push_image_mod()
	by gimp_image_undo_push_drawable() which *always* expects to get a
	TileManager passed. Also added g_return_if_fail()s to check if the
	passed in tile manager follows the semantics of the "sparse"
	boolean.

	(undo_pop_drawable): removed all code and call the new
	gimp_drawable_swap_pixels() instead (see below).

	* app/core/gimpdrawable.[ch] (gimp_drawable_push_undo): if tiles
	are NULL, create a copy of the area here and always pass tiles to
	gimp_image_undo_push_drawable(). Added lots of g_return_if_fail()
	here too.

	Added new vitrual function GimpDrawable::swap_pixels() which
	does what undo_pop_drawable() did.

	* app/core/gimpchannel.c: implement swap_pixels() and invalidate
	the channel's bounds and boundary.
2004-03-15 14:10:30 +00:00
Sven Neumann c94f85b345 tile-cache.c tile-private.h removed trailing whitespace, added some
2004-02-18  Sven Neumann  <sven@gimp.org>

	* tile-cache.c
	* tile-private.h
	* tile.[ch]: removed trailing whitespace, added some newlines,
	let tile_is_valid() return a gboolean instead of a gint.

	* app/core/gimpimage-projection.c
	* app/core/gimpimage-undo-push.c
	* app/paint/gimppaintcore.c
	* app/tools/gimpinktool.c: use the return value from tile_is_valid()
	as a boolean.
2004-02-18 18:54:33 +00:00
Michael Natterer 25b81b1570 Fixed lots of QuickMask brokenness by letting the image adjust its
2004-02-14  Michael Natterer  <mitch@gimp.org>

	Fixed lots of QuickMask brokenness by letting the image adjust
	its qmask_state automatically:

	* app/core/gimpimage-qmask.h: #define GIMP_IMAGE_QMASK_NAME "Qmask".
	Use the define in all files below.

	* app/core/gimpimage.[ch]: split gimp_image_drawable_add,_remove()
	into separate handlers for layers and channels. Added a
	"name_changed" handler for all channels. In the channel "add",
	"remove" and "name_changed" handlers, check if it was a channel
	named "Qmask" that was added, removed or renamed and call
	gimp_image_set_qmask_state() accordingly.

	* app/core/core-enums.[ch]
	* app/core/gimpimage-undo-push.[ch]
	* app/core/gimpundo.c: removed all Qmask undo code because the image
	does the right thing without undo interaction now.

	* app/core/gimpimage-qmask.c (gimp_image_set_qmask_state): set
	gimage->qmask_state early so we can return early when called
	recursively. Removed calls to gimp_image_undo_push_image_qmask().
	Returned "removed" callback (it was utterly broken the way it was
	implemented).

	* app/display/gimpdisplayshell-callbacks.c
	(gimp_display_shell_qmask_toggled): check if the image's
	qmask state needs to be changed before changing it.

	* app/xcf/xcf-load.c (xcf_load_channel): removed code which
	recognized the qmask. GimpImage does this automatically now.

	* app/gui/qmask-commands.c: cleanup.

	* app/widgets/gimpimagedock.c (gimp_image_dock_constructor):
	destroy the "/Select/By Color" and "/Select/Toggle QuickMask" menu
	items.

	* app/widgets/image-menu.c (image_menu_update): changed accordingly.
2004-02-14 15:37:23 +00:00
Michael Natterer 8312e82ad8 Make sure that non-indexed images never have a colormap. Fixes bug
2004-02-12  Michael Natterer  <mitch@gimp.org>

	Make sure that non-indexed images never have a colormap.
	Fixes bug #121033.

	* app/core/gimpimage-colormap.c (gimp_image_set_colormap): set
	image->cmap to NULL when called with a NULL colormap.

	* app/core/gimpimage-undo-push.c: made colormap undo/redo aware
	of NULL colormaps.

	* app/core/gimpimage-convert.c (gimp_image_convert): remove the
	colormap using gimp_image_set_colormap() instead of freeing it
	manually.

	* app/widgets/gimpcolormapeditor.c: always check if the image
	is INDEXED *and* has a colormap before accessing the colormap.

	(need this new check because the fixed behaviour of colormap undo
	produces undo groups which, when being popped, make the image have
	no colormap while still being INDEXED in the small time frame
	between the emission of "colormap_changed" and "mode_changed").
2004-02-12 12:13:21 +00:00
Sven Neumann 572a4a5ad5 app/core/gimpimage-undo-push.c (undo_pop_layer) (undo_push_layer) ifdef'ed
2004-02-09  Sven Neumann  <sven@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_layer) (undo_push_layer)
	* app/paint-funcs/paint-funcs.c (scale_region): ifdef'ed out debug
	output.
2004-02-09 00:17:13 +00:00
Michael Natterer dc3ac41965 add the layer to the image before pasting to it. Fixes bug #132504.
2004-01-26  Michael Natterer  <mitch@gimp.org>

	* plug-ins/script-fu/scripts/unsharp-mask.scm: add the layer to
	the image before pasting to it. Fixes bug #132504.

	Fixed the underlying problem: make it impossible to attach
	floating selections to drawables which are not currently part of
	the image's layer or channel stacks.
	Also cleaned up image <-> floating_sel interaction:

	* app/core/gimplayer-floating-sel.[ch] (floating_sel_attach):
	added assertion that the drawable is part of the image (see below).
	Don't call gimp_image_floating_selection_changed(), it's emitted
	by gimp_image_add_layer() now.

	(floating_sel_remove)
	(floating_sel_anchor): don't emit "floating_selection_changed",
	it's emitted by gimp_image_remove_layer() now.

	(floating_sel_anchor): removed the fix for bug #132162 because
	gimp_image_remove_layer() behaves correctly now (see below).

	Renamed floating_sel_reset() to floating_sel_activate_drawable().
	Added g_return_if_fail() all over the place.

	* app/core/gimpimage.[ch]: added new function gimp_image_owns_item()
	which return TRUE if the passed item is part of the image.

	(gimp_image_add_layer): emit "floating_selection_changed" here if
	needed.

	(gimp_image_remove_layer): emit "floating_selection_changed" if
	needed, don't try to activate a layer if we called
	floating_sel_activate_drawable().
	This is the real fix for bug #132162.

	* app/core/gimpimage-undo-push.c (undo_pop_layer): apply the same
	fixes as to gimp_image_add,remove_layer(). Don't call
	gimp_drawable_invalidate_preview() on the previously active layer
	because that's done by gimp_image_set_active_layer() now.

	* app/xcf/xcf-load.c: remember the "floating_sel_drawable" in the
	XcfInfo struct and attach it *after* all layers and channels are
	loaded to avoid attaching the floating selection to an
	out-of-image drawable.

	* app/core/gimp-edit.c (gimp_edit_paste)
	* app/core/gimpdrawable-transform.c (gimp_drawable_transform_affine,
	gimp_drawable_transform_flip, gimp_drawable_transform_rotate)
	* app/core/gimpselection.c (gimp_selection_float)
	* app/text/gimptext-compat.c (text_render): added checks for
	gimp_image_owns_item() in all functions which can produce
	floating selections.

	* tools/pdbgen/pdb/edit.pdb
	* tools/pdbgen/pdb/floating_sel.pdb
	* tools/pdbgen/pdb/selection.pdb
	* tools/pdbgen/pdb/text_tool.pdb
	* tools/pdbgen/pdb/transform_tools.pdb: added checks for
	gimp_item_owns_image() and return an execution error if invoked
	with a drawable which is not part of the image.

	* app/pdb/edit_cmds.c
	* app/pdb/floating_sel_cmds.c
	* app/pdb/selection_cmds.c
	* app/pdb/text_tool_cmds.c
	* app/pdb/transform_tools_cmds.c: regenerated.
2004-01-26 15:34:47 +00:00
Michael Natterer 370a16fafe don't allow to select anything but the floating selection. Fixes bug
2004-01-18  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage.c (gimp_image_set_active_layer): don't allow
	to select anything but the floating selection. Fixes bug #128025.

	(gimp_image_set_active_layer,channel,vectors): allow to pass NULL
	to unselect the active item. Removed the silly feature that
	passing some random item of another image would select the first
	item in the list (was unused anyway).

	(gimp_image_unset_active_channel): use gimp_image_set_active_channel()
	now that it accepts NULL.

	(gimp_image_add_layer,channel,vectors): cleaned up / simplified.

	(gimp_image_remove_layer,channel,vectors): cleanup,
	simplification, use gimp_image_set_active_layer,channel,vectors()
	now that they accept NULL, make sure the item next to the removed
	item becomes the active one (and not the first in the list, which
	was a severe usability problem in the dialogs).

	* app/core/gimpimage-undo-push.c (undo_pop_layer,channel): pass
	NULL to the set_active functions, cleanup.

	* app/core/gimpimage-duplicate.c: attach the floating selection
	before setting the active layer. Code relied on broken
	gimp_image_set_active_layer() behaviour before.

	* app/core/gimplayer-floating-sel.c: no need to set
	gimage->floating_sel before calling gimp_image_add_layer(). The
	weird GUI mentioned in the comment existed in 1.2 only.

	* app/display/gimpdisplayshell-layer-select.c (layer_select_advance):
	don't assume that setting the active_layer always succeeds.

	* tools/pdbgen/pdb/image.pdb: behave as the documentation says
	and return an execution error if setting the active layer or
	channel failed.

	Unrelated:

	* tools/pdbgen/pdb/image.pdb
	* tools/pdbgen/pdb/layer.pdb: removed leftover cruft from the old
	guchar based color API.

	* tools/pdbgen/pdb/channel.pdb: simplified code which handles the
	channel's color.

	* app/pdb/channel_cmds.c
	* app/pdb/image_cmds.c: regenerated.
2004-01-18 12:16:44 +00:00
Michael Natterer f8e9fbc17c removed broken code which tried to figure manually whether "alpha_changed"
2004-01-18  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_layer): removed broken
	code which tried to figure manually whether "alpha_changed" should
	be emitted. Instead, simply compare the return values of
	gimp_image_has_alpha() before and after adding/removing the
	layer. Fixes bug #131721.
2004-01-18 00:36:02 +00:00
Sven Neumann 3451c82f4f added GIMP_UNDO_TEXT_LAYER to GimpUndoType enum.
2004-01-05  Sven Neumann  <sven@gimp.org>

	* app/core/core-enums.[ch]: added GIMP_UNDO_TEXT_LAYER to
	GimpUndoType enum.

	* app/core/gimpimage-undo-push.[ch]: added new undo function
	gimp_image_undo_push_text_layer().

	* app/text/gimptextlayer.[ch]: renamed gimp_text_layer_render() to
	gimp_layer_text_layer_flush().
	Added new function gimp_text_layer_discard().

	* app/text/gimptextlayer-transform.c: changed accordingly.

	* app/gui/image-menu.c
	* app/gui/layers-commands.[ch]
	* app/gui/layers-menu.c: added menu entries that allow to discard
	the text information of a text layer (bug #118547).

	* app/widgets/gimppreviewrendererlayer.c
	(gimp_preview_renderer_layer_render): treat text layers without a
	text object like ordinary layers.

	* app/widgets/gimppreviewrenderer-utils.c: include gimplayer.h
	instead of gimptextlayer.h.
2004-01-05 00:28:12 +00:00
Michael Natterer 797665dee0 optimized to reallocate the projection TileManager only if it does not
2003-12-04  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-projection.c (gimp_image_projection_allocate):
	optimized to reallocate the projection TileManager only if it does
	not match the required width, height and depth.

	* app/core/gimpimage.c (gimp_image_size_changed): call
	gimp_image_projection_allocate().

	* app/core/gimpimage-crop.c
	* app/core/gimpimage-resize.c
	* app/core/gimpimage-rotate.c
	* app/core/gimpimage-scale.c
	* app/core/gimpimage-undo-push.c: removed calls to
	gimp_image_projection_allocate(), since "size_changed" does it
	automatically now.
2003-12-04 12:18:41 +00:00
Michael Natterer 8842730435 added a default implementation of GimpImage::mode_changed() which
2003-12-01  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage.c: added a default implementation of
	GimpImage::mode_changed() which reallocates the projection.

	* app/core/gimpimage-convert.c (gimp_image_convert)
	* app/core/gimpimage-undo-push.c (undo_pop_image_type): removed
	explicit calls to gimp_image_projection_allocate().
2003-12-01 13:34:43 +00:00
Sven Neumann fd30d5c976 app/config/gimpbaseconfig.h use gint64 for all memsize properties.
2003-11-16  Sven Neumann  <sven@gimp.org>

	* app/config/gimpbaseconfig.h
	* app/config/gimpcoreconfig.h: use gint64 for all memsize properties.

	* app/base/tile-manager.[ch] (tile_manager_get_memsize): since
	tiles can be swapped out, a tilemanager can be larger than gsize
	(on 32bit platforms). Use a gint64 to avoid an overflow.

	* app/core/gimp.c
	* app/core/gimpbrush.c
	* app/core/gimpbrushpipe.c
	* app/core/gimpbuffer.c
	* app/core/gimpchannel.c
	* app/core/gimpcontainer.c
	* app/core/gimpcontext.c
	* app/core/gimpdata.c
	* app/core/gimpdatafactory.c
	* app/core/gimpdrawable.c
	* app/core/gimpgradient.c
	* app/core/gimpimage-undo-push.c
	* app/core/gimpimage-undo.[ch]
	* app/core/gimpimage.c
	* app/core/gimpitem.c
	* app/core/gimpitemundo.[ch]
	* app/core/gimplayer.c
	* app/core/gimplist.c
	* app/core/gimpobject.[ch]
	* app/core/gimppalette.c
	* app/core/gimpparasitelist.c
	* app/core/gimppattern.c
	* app/core/gimpundo.[ch]
	* app/core/gimpundostack.c
	* app/core/gimpviewable.c
	* app/text/gimptext.c
	* app/text/gimptextlayer.c
	* app/vectors/gimpstroke.c
	* app/vectors/gimpvectors.c: use gint64 for gimp_object_get_memsize()
	and all its implementations.

	* app/display/gimpdisplayshell-title.c
	* app/gui/info-window.c: changed accordingly.
2003-11-16 17:51:36 +00:00
Michael Natterer 1d2c795f2b when trying to activate the previously selected layer after a layer
2003-11-13  Michael Natterer  <mitch@gimp.org>

	* app/core/gimpimage-undo-push.c (undo_pop_layer): when trying to
	activate the previously selected layer after a layer removal, also
	look at gimage->layer_stack, just as gimp_image_remove_layer()
	does. Should fix regression from 1.2 when there was no avtive
	layer after certain undo operations. Fixes bug #126781.
	Reordered instructions to match gimp_image_remove_layer().

	* app/tools/gimpbrightnesscontrasttool.c
	* app/tools/gimpcolorbalancetool.c
	* app/tools/gimpcolorizetool.c
	* app/tools/gimpcurvestool.c
	* app/tools/gimphuesaturationtool.c
	* app/tools/gimplevelstool.c
	* app/tools/gimpposterizetool.c
	* app/tools/gimpthresholdtool.c: although the crash triggering bug
	is fixed, the image_map tools should not crash when invoked
	without active drawable: changed all _initialize() functions to
	silently return if there is no active drawable.

	Changed "drawable" to "layer" in all user visible warnings about
	indexed or non-RGB drawables. Cleanup.
2003-11-13 11:23:01 +00:00