From 769bfa6ecd57a303ea8154c9b876b75315015b07 Mon Sep 17 00:00:00 2001 From: "BST 1998 Adam D. Moss" Date: Thu, 1 Oct 1998 11:53:20 +0000 Subject: [PATCH] Temporarily disabled IdleRender code whilst working on a more centralised Thu Oct 1 12:44:19 BST 1998 Adam D. Moss * app/floating_sel.c app/gdisplay.c app/gdisplay.h app/gimpimage.c app/layers_dialog.c app/undo.c: Temporarily disabled IdleRender code whilst working on a more centralised approach. --- ChangeLog | 7 +++++ app/core/gimpimage-guides.c | 1 - app/core/gimpimage-merge.c | 1 - app/core/gimpimage-projection.c | 1 - app/core/gimpimage-resize.c | 1 - app/core/gimpimage-scale.c | 1 - app/core/gimpimage-undo-push.c | 15 +++++----- app/core/gimpimage.c | 1 - app/core/gimplayer-floating-sel.c | 6 ++-- app/core/gimpprojection-construct.c | 1 - app/core/gimpprojection.c | 44 +++++++++++++++++++---------- app/core/gimpprojection.h | 32 ++++++++++++++++----- app/display/gimpdisplay.c | 44 +++++++++++++++++++---------- app/display/gimpdisplay.h | 32 ++++++++++++++++----- app/floating_sel.c | 6 ++-- app/gdisplay.c | 44 +++++++++++++++++++---------- app/gdisplay.h | 32 ++++++++++++++++----- app/gimpimage.c | 1 - app/gui/layers-dialog.c | 24 ++++++++++++---- app/layers_dialog.c | 24 ++++++++++++---- app/undo.c | 15 +++++----- 21 files changed, 227 insertions(+), 106 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66179e25a4..eebe44b578 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Oct 1 12:44:19 BST 1998 Adam D. Moss + + * app/floating_sel.c app/gdisplay.c app/gdisplay.h + app/gimpimage.c app/layers_dialog.c app/undo.c: + Temporarily disabled IdleRender code whilst working + on a more centralised approach. + Wed Sep 30 10:48:00 CST 1998 Seth Burgess * gimp_tips.txt: Ran it through ispell diff --git a/app/core/gimpimage-guides.c b/app/core/gimpimage-guides.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpimage-guides.c +++ b/app/core/gimpimage-guides.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimpimage-merge.c b/app/core/gimpimage-merge.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpimage-merge.c +++ b/app/core/gimpimage-merge.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimpimage-projection.c b/app/core/gimpimage-projection.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpimage-projection.c +++ b/app/core/gimpimage-projection.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimpimage-resize.c b/app/core/gimpimage-resize.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpimage-resize.c +++ b/app/core/gimpimage-resize.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimpimage-scale.c b/app/core/gimpimage-scale.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpimage-scale.c +++ b/app/core/gimpimage-scale.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimpimage-undo-push.c b/app/core/gimpimage-undo-push.c index 75ae2f6f99..6f0adc76ac 100644 --- a/app/core/gimpimage-undo-push.c +++ b/app/core/gimpimage-undo-push.c @@ -1089,8 +1089,7 @@ undo_push_layer (GImage *gimage, } } -#include -#warning AIE + int undo_pop_layer (GImage *gimage, int state, @@ -1134,9 +1133,9 @@ undo_pop_layer (GImage *gimage, floating_sel_reset (lu->layer); } - printf (" undo_pop1 ");fflush(stdout); - /* drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height);*/ - reinit_layer_idlerender (gimage, lu->layer); + /*printf (" undo_pop1 ");fflush(stdout);*/ + drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height); + /*reinit_layer_idlerender (gimage, lu->layer);*/ } /* restore layer */ else @@ -1157,9 +1156,9 @@ undo_pop_layer (GImage *gimage, gimage->layer_stack = g_slist_prepend (gimage->layer_stack, lu->layer); gimage->active_layer = lu->layer; - printf (" undo_pop2 ");fflush(stdout); - /*drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height);*/ - reinit_layer_idlerender (gimage, lu->layer); + /*printf (" undo_pop2 ");fflush(stdout);*/ + drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height); + /*reinit_layer_idlerender (gimage, lu->layer);*/ } return TRUE; diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimplayer-floating-sel.c b/app/core/gimplayer-floating-sel.c index 0e0594af8f..07ab5c7391 100644 --- a/app/core/gimplayer-floating-sel.c +++ b/app/core/gimplayer-floating-sel.c @@ -212,12 +212,12 @@ floating_sel_to_layer (Layer *layer) */ printf(" floating_sel_to_layer ");fflush(stdout); - /* + drawable_update (GIMP_DRAWABLE(layer), 0, 0, GIMP_DRAWABLE(layer)->width, GIMP_DRAWABLE(layer)->height); - */ + /* This may be undesirable when invoked non-interactively... we'll see. */ - reinit_layer_idlerender (gimage, layer); + /*reinit_layer_idlerender (gimage, layer);*/ } void diff --git a/app/core/gimpprojection-construct.c b/app/core/gimpprojection-construct.c index 19011bb65a..e0ad6331b6 100644 --- a/app/core/gimpprojection-construct.c +++ b/app/core/gimpprojection-construct.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c index ba4c8f50c2..11bb1b625a 100644 --- a/app/core/gimpprojection.c +++ b/app/core/gimpprojection.c @@ -54,16 +54,6 @@ GSList * display_list = NULL; static int display_num = 1; static GdkCursorType default_gdisplay_cursor = GDK_TOP_LEFT_ARROW; -static GimpImage* idlerender_gimage; -static int idlerender_width; -static int idlerender_height; -static int idlerender_x; -static int idlerender_y; -static int idlerender_basex; -static int idlerender_basey; -static guint idlerender_idleid = 0; -static guint idlerender_handlerid = 0; -static gboolean idle_active = 0; /* Local functions */ static void gdisplay_format_title (GimpImage *, char *); @@ -252,6 +242,10 @@ gdisplay_free_area_list (GSList *list) } +/* + * As far as I can tell, this function takes a GArea and unifies it with + * an existing list of GAreas, trying to avoid overdraw. [adam] + */ static GSList * gdisplay_process_area_list (GSList *list, GArea *ga1) @@ -300,7 +294,9 @@ gdisplay_flush (GDisplay *gdisp) GArea *ga; GSList *list; - /* Flush the items in the displays and updates lists-- + printf(" FLUSH! ");fflush(stdout); + + /* Flush the items in the displays and updates lists - * but only if gdisplay has been mapped and exposed */ if (!gdisp->select) @@ -312,8 +308,21 @@ gdisplay_flush (GDisplay *gdisp) { /* Paint the area specified by the GArea */ ga = (GArea *) list->data; - gdisplay_paint_area (gdisp, ga->x1, ga->y1, - (ga->x2 - ga->x1), (ga->y2 - ga->y1)); + + if ((ga->x1 != ga->x2) && (ga->y1 != ga->y2)) + { + gdisplay_paint_area (gdisp, ga->x1, ga->y1, + (ga->x2 - ga->x1), (ga->y2 - ga->y1)); + /*gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100); + gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100); + gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100);*/ + } list = g_slist_next (list); } @@ -1534,7 +1543,10 @@ gdisplays_flush () /* this prevents multiple recursive calls to this procedure */ if (flushing == TRUE) - return; + { + g_warning ("gdisplays_flush() called recursively."); + return; + } flushing = TRUE; @@ -1560,7 +1572,7 @@ gdisplay_hash (GDisplay *display) } - +#if 0 static void idlerender_gimage_destroy_handler (GimpImage *gimage) { @@ -1755,3 +1767,5 @@ reinit_gimage_idlerender (GimpImage* gimage) { unify_and_start_idlerender (gimage, 0, 0, gimage->width, gimage->height); } + +#endif diff --git a/app/core/gimpprojection.h b/app/core/gimpprojection.h index d3a651139a..62520fd725 100644 --- a/app/core/gimpprojection.h +++ b/app/core/gimpprojection.h @@ -40,6 +40,22 @@ /* #define HIGHPASS(x,y) ((x>y) ? y : x) */ /* unused - == MIN */ +typedef struct _IdleRenderStruct +{ + GimpImage* gimage; + int width; + int height; + int x; + int y; + int basex; + int basey; + guint idleid; + guint handlerid; + gboolean active; + +} IdleRenderStruct; + + struct _GDisplay { int ID; /* unique identifier for this gdisplay */ @@ -50,7 +66,7 @@ struct _GDisplay GtkWidget *hrule, *vrule; /* widgets for rulers */ GtkWidget *origin; /* widgets for rulers */ GtkWidget *popup; /* widget for popup menu */ - GtkWidget *statusarea; /* hbox holding the statusbar and stuff */ + GtkWidget *statusarea; /* hbox holding the statusbar and stuff */ GtkWidget *statusbar; /* widget for statusbar */ GtkWidget *progressbar; /* widget for progressbar */ GtkWidget *cursor_label; /* widget for cursor position */ @@ -81,18 +97,20 @@ struct _GDisplay Selection *select; /* Selection object */ - GdkGC *scroll_gc; /* GC for scrolling */ + GdkGC *scroll_gc; /* GC for scrolling */ GSList *update_areas; /* Update areas list */ GSList *display_areas; /* Display areas list */ GdkCursorType current_cursor; /* Currently installed cursor */ - short draw_cursor; /* should we draw software cursor ? */ - int cursor_x; /* software cursor X value */ - int cursor_y; /* software cursor Y value */ - short proximity; /* is a device in proximity of gdisplay ? */ - short have_cursor; /* is cursor currently drawn ? */ + short draw_cursor; /* should we draw software cursor ? */ + int cursor_x; /* software cursor X value */ + int cursor_y; /* software cursor Y value */ + short proximity; /* is a device in proximity of gdisplay ? */ + short have_cursor; /* is cursor currently drawn ? */ + + IdleRenderStruct idle_render; /* state of this gdisplay's render thread */ }; diff --git a/app/display/gimpdisplay.c b/app/display/gimpdisplay.c index ba4c8f50c2..11bb1b625a 100644 --- a/app/display/gimpdisplay.c +++ b/app/display/gimpdisplay.c @@ -54,16 +54,6 @@ GSList * display_list = NULL; static int display_num = 1; static GdkCursorType default_gdisplay_cursor = GDK_TOP_LEFT_ARROW; -static GimpImage* idlerender_gimage; -static int idlerender_width; -static int idlerender_height; -static int idlerender_x; -static int idlerender_y; -static int idlerender_basex; -static int idlerender_basey; -static guint idlerender_idleid = 0; -static guint idlerender_handlerid = 0; -static gboolean idle_active = 0; /* Local functions */ static void gdisplay_format_title (GimpImage *, char *); @@ -252,6 +242,10 @@ gdisplay_free_area_list (GSList *list) } +/* + * As far as I can tell, this function takes a GArea and unifies it with + * an existing list of GAreas, trying to avoid overdraw. [adam] + */ static GSList * gdisplay_process_area_list (GSList *list, GArea *ga1) @@ -300,7 +294,9 @@ gdisplay_flush (GDisplay *gdisp) GArea *ga; GSList *list; - /* Flush the items in the displays and updates lists-- + printf(" FLUSH! ");fflush(stdout); + + /* Flush the items in the displays and updates lists - * but only if gdisplay has been mapped and exposed */ if (!gdisp->select) @@ -312,8 +308,21 @@ gdisplay_flush (GDisplay *gdisp) { /* Paint the area specified by the GArea */ ga = (GArea *) list->data; - gdisplay_paint_area (gdisp, ga->x1, ga->y1, - (ga->x2 - ga->x1), (ga->y2 - ga->y1)); + + if ((ga->x1 != ga->x2) && (ga->y1 != ga->y2)) + { + gdisplay_paint_area (gdisp, ga->x1, ga->y1, + (ga->x2 - ga->x1), (ga->y2 - ga->y1)); + /*gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100); + gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100); + gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100);*/ + } list = g_slist_next (list); } @@ -1534,7 +1543,10 @@ gdisplays_flush () /* this prevents multiple recursive calls to this procedure */ if (flushing == TRUE) - return; + { + g_warning ("gdisplays_flush() called recursively."); + return; + } flushing = TRUE; @@ -1560,7 +1572,7 @@ gdisplay_hash (GDisplay *display) } - +#if 0 static void idlerender_gimage_destroy_handler (GimpImage *gimage) { @@ -1755,3 +1767,5 @@ reinit_gimage_idlerender (GimpImage* gimage) { unify_and_start_idlerender (gimage, 0, 0, gimage->width, gimage->height); } + +#endif diff --git a/app/display/gimpdisplay.h b/app/display/gimpdisplay.h index d3a651139a..62520fd725 100644 --- a/app/display/gimpdisplay.h +++ b/app/display/gimpdisplay.h @@ -40,6 +40,22 @@ /* #define HIGHPASS(x,y) ((x>y) ? y : x) */ /* unused - == MIN */ +typedef struct _IdleRenderStruct +{ + GimpImage* gimage; + int width; + int height; + int x; + int y; + int basex; + int basey; + guint idleid; + guint handlerid; + gboolean active; + +} IdleRenderStruct; + + struct _GDisplay { int ID; /* unique identifier for this gdisplay */ @@ -50,7 +66,7 @@ struct _GDisplay GtkWidget *hrule, *vrule; /* widgets for rulers */ GtkWidget *origin; /* widgets for rulers */ GtkWidget *popup; /* widget for popup menu */ - GtkWidget *statusarea; /* hbox holding the statusbar and stuff */ + GtkWidget *statusarea; /* hbox holding the statusbar and stuff */ GtkWidget *statusbar; /* widget for statusbar */ GtkWidget *progressbar; /* widget for progressbar */ GtkWidget *cursor_label; /* widget for cursor position */ @@ -81,18 +97,20 @@ struct _GDisplay Selection *select; /* Selection object */ - GdkGC *scroll_gc; /* GC for scrolling */ + GdkGC *scroll_gc; /* GC for scrolling */ GSList *update_areas; /* Update areas list */ GSList *display_areas; /* Display areas list */ GdkCursorType current_cursor; /* Currently installed cursor */ - short draw_cursor; /* should we draw software cursor ? */ - int cursor_x; /* software cursor X value */ - int cursor_y; /* software cursor Y value */ - short proximity; /* is a device in proximity of gdisplay ? */ - short have_cursor; /* is cursor currently drawn ? */ + short draw_cursor; /* should we draw software cursor ? */ + int cursor_x; /* software cursor X value */ + int cursor_y; /* software cursor Y value */ + short proximity; /* is a device in proximity of gdisplay ? */ + short have_cursor; /* is cursor currently drawn ? */ + + IdleRenderStruct idle_render; /* state of this gdisplay's render thread */ }; diff --git a/app/floating_sel.c b/app/floating_sel.c index 0e0594af8f..07ab5c7391 100644 --- a/app/floating_sel.c +++ b/app/floating_sel.c @@ -212,12 +212,12 @@ floating_sel_to_layer (Layer *layer) */ printf(" floating_sel_to_layer ");fflush(stdout); - /* + drawable_update (GIMP_DRAWABLE(layer), 0, 0, GIMP_DRAWABLE(layer)->width, GIMP_DRAWABLE(layer)->height); - */ + /* This may be undesirable when invoked non-interactively... we'll see. */ - reinit_layer_idlerender (gimage, layer); + /*reinit_layer_idlerender (gimage, layer);*/ } void diff --git a/app/gdisplay.c b/app/gdisplay.c index ba4c8f50c2..11bb1b625a 100644 --- a/app/gdisplay.c +++ b/app/gdisplay.c @@ -54,16 +54,6 @@ GSList * display_list = NULL; static int display_num = 1; static GdkCursorType default_gdisplay_cursor = GDK_TOP_LEFT_ARROW; -static GimpImage* idlerender_gimage; -static int idlerender_width; -static int idlerender_height; -static int idlerender_x; -static int idlerender_y; -static int idlerender_basex; -static int idlerender_basey; -static guint idlerender_idleid = 0; -static guint idlerender_handlerid = 0; -static gboolean idle_active = 0; /* Local functions */ static void gdisplay_format_title (GimpImage *, char *); @@ -252,6 +242,10 @@ gdisplay_free_area_list (GSList *list) } +/* + * As far as I can tell, this function takes a GArea and unifies it with + * an existing list of GAreas, trying to avoid overdraw. [adam] + */ static GSList * gdisplay_process_area_list (GSList *list, GArea *ga1) @@ -300,7 +294,9 @@ gdisplay_flush (GDisplay *gdisp) GArea *ga; GSList *list; - /* Flush the items in the displays and updates lists-- + printf(" FLUSH! ");fflush(stdout); + + /* Flush the items in the displays and updates lists - * but only if gdisplay has been mapped and exposed */ if (!gdisp->select) @@ -312,8 +308,21 @@ gdisplay_flush (GDisplay *gdisp) { /* Paint the area specified by the GArea */ ga = (GArea *) list->data; - gdisplay_paint_area (gdisp, ga->x1, ga->y1, - (ga->x2 - ga->x1), (ga->y2 - ga->y1)); + + if ((ga->x1 != ga->x2) && (ga->y1 != ga->y2)) + { + gdisplay_paint_area (gdisp, ga->x1, ga->y1, + (ga->x2 - ga->x1), (ga->y2 - ga->y1)); + /*gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100); + gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100); + gdisplay_paint_area (gdisp, ga->x1+random()%(ga->x2 - ga->x1), + ga->y1+random()%(ga->y2 - ga->y1), + 100,100);*/ + } list = g_slist_next (list); } @@ -1534,7 +1543,10 @@ gdisplays_flush () /* this prevents multiple recursive calls to this procedure */ if (flushing == TRUE) - return; + { + g_warning ("gdisplays_flush() called recursively."); + return; + } flushing = TRUE; @@ -1560,7 +1572,7 @@ gdisplay_hash (GDisplay *display) } - +#if 0 static void idlerender_gimage_destroy_handler (GimpImage *gimage) { @@ -1755,3 +1767,5 @@ reinit_gimage_idlerender (GimpImage* gimage) { unify_and_start_idlerender (gimage, 0, 0, gimage->width, gimage->height); } + +#endif diff --git a/app/gdisplay.h b/app/gdisplay.h index d3a651139a..62520fd725 100644 --- a/app/gdisplay.h +++ b/app/gdisplay.h @@ -40,6 +40,22 @@ /* #define HIGHPASS(x,y) ((x>y) ? y : x) */ /* unused - == MIN */ +typedef struct _IdleRenderStruct +{ + GimpImage* gimage; + int width; + int height; + int x; + int y; + int basex; + int basey; + guint idleid; + guint handlerid; + gboolean active; + +} IdleRenderStruct; + + struct _GDisplay { int ID; /* unique identifier for this gdisplay */ @@ -50,7 +66,7 @@ struct _GDisplay GtkWidget *hrule, *vrule; /* widgets for rulers */ GtkWidget *origin; /* widgets for rulers */ GtkWidget *popup; /* widget for popup menu */ - GtkWidget *statusarea; /* hbox holding the statusbar and stuff */ + GtkWidget *statusarea; /* hbox holding the statusbar and stuff */ GtkWidget *statusbar; /* widget for statusbar */ GtkWidget *progressbar; /* widget for progressbar */ GtkWidget *cursor_label; /* widget for cursor position */ @@ -81,18 +97,20 @@ struct _GDisplay Selection *select; /* Selection object */ - GdkGC *scroll_gc; /* GC for scrolling */ + GdkGC *scroll_gc; /* GC for scrolling */ GSList *update_areas; /* Update areas list */ GSList *display_areas; /* Display areas list */ GdkCursorType current_cursor; /* Currently installed cursor */ - short draw_cursor; /* should we draw software cursor ? */ - int cursor_x; /* software cursor X value */ - int cursor_y; /* software cursor Y value */ - short proximity; /* is a device in proximity of gdisplay ? */ - short have_cursor; /* is cursor currently drawn ? */ + short draw_cursor; /* should we draw software cursor ? */ + int cursor_x; /* software cursor X value */ + int cursor_y; /* software cursor Y value */ + short proximity; /* is a device in proximity of gdisplay ? */ + short have_cursor; /* is cursor currently drawn ? */ + + IdleRenderStruct idle_render; /* state of this gdisplay's render thread */ }; diff --git a/app/gimpimage.c b/app/gimpimage.c index 19011bb65a..e0ad6331b6 100644 --- a/app/gimpimage.c +++ b/app/gimpimage.c @@ -2104,7 +2104,6 @@ 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 */ diff --git a/app/gui/layers-dialog.c b/app/gui/layers-dialog.c index 53e11d23e4..06ab41f9b3 100644 --- a/app/gui/layers-dialog.c +++ b/app/gui/layers-dialog.c @@ -1447,7 +1447,10 @@ paint_mode_menu_callback (GtkWidget *w, { layer->mode = mode; - reinit_layer_idlerender(gimage, layer); + /* reinit_layer_idlerender(gimage, layer);*/ + + drawable_update (GIMP_DRAWABLE(layer), 0, 0, GIMP_DRAWABLE(layer)->width, GIMP_DRAWABLE(layer)->height); + gdisplays_flush (); } } } @@ -1485,7 +1488,9 @@ opacity_scale_update (GtkAdjustment *adjustment, { layer->opacity = opacity; - reinit_layer_idlerender (gimage, layer); + /*reinit_layer_idlerender (gimage, layer);*/ + drawable_update (GIMP_DRAWABLE(layer), 0, 0, GIMP_DRAWABLE(layer)->width, GIMP_DRAWABLE(layer)->height); + gdisplays_flush (); } } @@ -2212,14 +2217,23 @@ layer_widget_button_events (GtkWidget *widget, { /*printf("Case 1, kick-ass!\n");fflush(stdout);*/ gimage_invalidate_preview (layer_widget->gimage); - reinit_gimage_idlerender (layer_widget->gimage); + /*reinit_gimage_idlerender (layer_widget->gimage);*/ + gdisplays_update_area (layer_widget->gimage, 0, 0, + layer_widget->gimage->width, + layer_widget->gimage->height); + gdisplays_flush (); } else if (old_state != GIMP_DRAWABLE(layer_widget->layer)->visible) { + /* Invalidate the gimage preview */ /*printf("Case 2, what incredible irony!\n");fflush(stdout);*/ gimage_invalidate_preview (layer_widget->gimage); - reinit_layer_idlerender (layer_widget->gimage, - layer_widget->layer); + /*reinit_layer_idlerender (layer_widget->gimage, + layer_widget->layer);*/ + drawable_update (GIMP_DRAWABLE(layer_widget->layer), 0, 0, + GIMP_DRAWABLE(layer_widget->layer)->width, + GIMP_DRAWABLE(layer_widget->layer)->height); + gdisplays_flush (); } } else if ((widget == layer_widget->linked_widget) && diff --git a/app/layers_dialog.c b/app/layers_dialog.c index 53e11d23e4..06ab41f9b3 100644 --- a/app/layers_dialog.c +++ b/app/layers_dialog.c @@ -1447,7 +1447,10 @@ paint_mode_menu_callback (GtkWidget *w, { layer->mode = mode; - reinit_layer_idlerender(gimage, layer); + /* reinit_layer_idlerender(gimage, layer);*/ + + drawable_update (GIMP_DRAWABLE(layer), 0, 0, GIMP_DRAWABLE(layer)->width, GIMP_DRAWABLE(layer)->height); + gdisplays_flush (); } } } @@ -1485,7 +1488,9 @@ opacity_scale_update (GtkAdjustment *adjustment, { layer->opacity = opacity; - reinit_layer_idlerender (gimage, layer); + /*reinit_layer_idlerender (gimage, layer);*/ + drawable_update (GIMP_DRAWABLE(layer), 0, 0, GIMP_DRAWABLE(layer)->width, GIMP_DRAWABLE(layer)->height); + gdisplays_flush (); } } @@ -2212,14 +2217,23 @@ layer_widget_button_events (GtkWidget *widget, { /*printf("Case 1, kick-ass!\n");fflush(stdout);*/ gimage_invalidate_preview (layer_widget->gimage); - reinit_gimage_idlerender (layer_widget->gimage); + /*reinit_gimage_idlerender (layer_widget->gimage);*/ + gdisplays_update_area (layer_widget->gimage, 0, 0, + layer_widget->gimage->width, + layer_widget->gimage->height); + gdisplays_flush (); } else if (old_state != GIMP_DRAWABLE(layer_widget->layer)->visible) { + /* Invalidate the gimage preview */ /*printf("Case 2, what incredible irony!\n");fflush(stdout);*/ gimage_invalidate_preview (layer_widget->gimage); - reinit_layer_idlerender (layer_widget->gimage, - layer_widget->layer); + /*reinit_layer_idlerender (layer_widget->gimage, + layer_widget->layer);*/ + drawable_update (GIMP_DRAWABLE(layer_widget->layer), 0, 0, + GIMP_DRAWABLE(layer_widget->layer)->width, + GIMP_DRAWABLE(layer_widget->layer)->height); + gdisplays_flush (); } } else if ((widget == layer_widget->linked_widget) && diff --git a/app/undo.c b/app/undo.c index 75ae2f6f99..6f0adc76ac 100644 --- a/app/undo.c +++ b/app/undo.c @@ -1089,8 +1089,7 @@ undo_push_layer (GImage *gimage, } } -#include -#warning AIE + int undo_pop_layer (GImage *gimage, int state, @@ -1134,9 +1133,9 @@ undo_pop_layer (GImage *gimage, floating_sel_reset (lu->layer); } - printf (" undo_pop1 ");fflush(stdout); - /* drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height);*/ - reinit_layer_idlerender (gimage, lu->layer); + /*printf (" undo_pop1 ");fflush(stdout);*/ + drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height); + /*reinit_layer_idlerender (gimage, lu->layer);*/ } /* restore layer */ else @@ -1157,9 +1156,9 @@ undo_pop_layer (GImage *gimage, gimage->layer_stack = g_slist_prepend (gimage->layer_stack, lu->layer); gimage->active_layer = lu->layer; - printf (" undo_pop2 ");fflush(stdout); - /*drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height);*/ - reinit_layer_idlerender (gimage, lu->layer); + /*printf (" undo_pop2 ");fflush(stdout);*/ + drawable_update (GIMP_DRAWABLE(lu->layer), 0, 0, GIMP_DRAWABLE(lu->layer)->width, GIMP_DRAWABLE(lu->layer)->height); + /*reinit_layer_idlerender (gimage, lu->layer);*/ } return TRUE;