Moved the idlerender stuff into gdisplay.c. Implemented idlerender when

Sat Sep 26 20:46:18 BST 1998  Adam D. Moss <adam@gimp.org>

	* app/channel.c app/channel_ops.c app/drawable.c
	app/floating_sel.c app/gdisplay.c app/gdisplay.h
	app/gimpimage.c app/layers_dialog.c app/undo.c:

	Moved the idlerender stuff into gdisplay.c.  Implemented
	idlerender when doing floating_sel->layer, and undoing/redoing
	layer deletion.

	idlerender would be useful in many other places for improving
	interactivity, if it weren't for the following problems:

		* By definition, idlerender doesn't wait for a
		gdisplays_update() call	before starting work - it just
		runs in idle time, which due to CPU contention with
		plugins may not	be genuinely available idle time when
		things are 'noninteractive'.

		* Most GIMP functions don't know whether they're
		being run interactively or not.  idlerender only
		makes sense for interactive work.  This is why
		it is currently only applied to those functions which
		would normally only be activated manually.

		* Mixing idlerender and drawable_update() /
		gdisplays_update_area() calls can lead to a region
		being rerendered twice.

	Hence, some slogwork is needed before idlerender can be
	applied in the more general case.
This commit is contained in:
BST 1998 Adam D. Moss 1998-09-26 20:07:46 +00:00 committed by Adam D. Moss
parent d1d516c2a8
commit d1d3697c9d
31 changed files with 798 additions and 368 deletions

View file

@ -20,6 +20,7 @@
#include "drawable.h"
#include "floating_sel.h"
#include "gdisplay.h"
#include "general.h"
#include "gimage_mask.h"
#include "paint_funcs.h"
@ -2032,9 +2033,13 @@ gimp_image_merge_layers (GimpImage *gimage, GSList *merge_list, MergeType merge_
GIMP_DRAWABLE(merge_layer)->visible = TRUE;
gtk_signal_emit(GTK_OBJECT(gimage), gimp_image_signals[RESTRUCTURE]);
printf(" gimp_image_merge_layers ");fflush(stdout);
drawable_update (GIMP_DRAWABLE(merge_layer), 0, 0, drawable_width (GIMP_DRAWABLE(merge_layer)), drawable_height (GIMP_DRAWABLE(merge_layer)));
/*reinit_layer_idlerender (gimage, merge_layer);*/
return merge_layer;
}
@ -2099,6 +2104,7 @@ gimp_image_add_layer (GimpImage *gimage, Layer *float_layer, int position)
gimp_image_set_active_layer (gimage, float_layer);
/* update the new layer's area */
printf(" gimp_image_add_layer ");fflush(stdout);
drawable_update (GIMP_DRAWABLE(float_layer), 0, 0, drawable_width (GIMP_DRAWABLE(float_layer)), drawable_height (GIMP_DRAWABLE(float_layer)));
/* invalidate the composite preview */