[gimp/soc-2011-warp] imagemap: implement queuing for apply_region, not sure if it works or not, due to problem in other a
- From: Michael Murà <mmure src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/soc-2011-warp] imagemap: implement queuing for apply_region, not sure if it works or not, due to problem in other a
- Date: Mon, 1 Aug 2011 16:29:12 +0000 (UTC)
commit f7aeae348abb7f57ad3c326d02b7321c1ad8a67c
Author: Michael Murà <batolettre gmail com>
Date: Mon Aug 1 18:28:19 2011 +0200
imagemap: implement queuing for apply_region, not sure if it works or not, due to problem in other area
app/core/gimpimagemap.c | 24 ++++++++++++++++++++++--
1 files changed, 22 insertions(+), 2 deletions(-)
---
diff --git a/app/core/gimpimagemap.c b/app/core/gimpimagemap.c
index b4c52b3..b4006a8 100644
--- a/app/core/gimpimagemap.c
+++ b/app/core/gimpimagemap.c
@@ -35,6 +35,7 @@
#include <glib-object.h>
#include <gegl.h>
+#include "gegl-utils.h"
#include "core-types.h"
@@ -89,6 +90,7 @@ struct _GimpImageMap
GeglNode *output;
GeglProcessor *processor;
gboolean gegl_caching;
+ GeglRectangle queue;
guint idle_id;
@@ -210,6 +212,8 @@ gimp_image_map_init (GimpImageMap *image_map)
g_timer_stop (image_map->timer);
image_map->gegl_caching = FALSE;
+
+ gegl_rectangle_set (&image_map->queue, 0, 0, 0, 0);
}
static void
@@ -625,8 +629,14 @@ gimp_image_map_apply_real (GimpImageMap *image_map,
gboolean reallocate;
g_return_if_fail (GIMP_IS_IMAGE_MAP (image_map));
- /* If we're still working, remove the timer */
- gimp_image_map_cancel_any_idle_jobs (image_map);
+ /* If we're still working, queue the region to render and return. */
+ if (image_map->idle_id)
+ {
+ gegl_rectangle_bounding_box (&image_map->queue, &image_map->queue, to_render);
+ return;
+ }
+
+ gegl_rectangle_set (&image_map->queue, 0, 0, 0, 0);
/* If undo tiles don't exist, or change size, (re)allocate */
reallocate = gimp_image_map_update_undo_tiles (image_map,
@@ -890,6 +900,11 @@ gimp_image_map_do (GimpImageMap *image_map)
g_signal_emit (image_map, image_map_signals[FLUSH], 0);
+ if (!gegl_rectangle_is_empty (&image_map->queue))
+ {
+ gimp_image_map_apply_region (image_map, &image_map->queue);
+ }
+
return FALSE;
}
}
@@ -963,6 +978,11 @@ gimp_image_map_do (GimpImageMap *image_map)
g_signal_emit (image_map, image_map_signals[FLUSH], 0);
+ if (!gegl_rectangle_is_empty (&image_map->queue))
+ {
+ gimp_image_map_apply_region (image_map, &image_map->queue);
+ }
+
return FALSE;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]