[gnome-photos/wip/rishi/edit-mode: 10/28] gegl-gtk-view-helper: Remove the processor
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos/wip/rishi/edit-mode: 10/28] gegl-gtk-view-helper: Remove the processor
- Date: Wed, 3 Jun 2015 23:40:14 +0000 (UTC)
commit 65a903ac7c3e1c7ae46f9626919f160f0e89e380
Author: Debarshi Ray <debarshir gnome org>
Date: Thu Jan 29 19:25:58 2015 +0100
gegl-gtk-view-helper: Remove the processor
We are already processing the graph inside BaseItem, and doing so
inside the widget was unnecessary. It will actually cause problems
when we add GEGL operations to our pipeline because two different
processors will try to process the same graph simultaneously.
src/gegl-gtk-view-helper.c | 119 --------------------------------------------
src/gegl-gtk-view-helper.h | 5 --
2 files changed, 0 insertions(+), 124 deletions(-)
---
diff --git a/src/gegl-gtk-view-helper.c b/src/gegl-gtk-view-helper.c
index 22bda9a..91f97db 100644
--- a/src/gegl-gtk-view-helper.c
+++ b/src/gegl-gtk-view-helper.c
@@ -42,8 +42,6 @@ static guint view_helper_signals[N_SIGNALS] = { 0 };
static void
finalize(GObject *gobject);
void
-trigger_processing(ViewHelper *self, GeglRectangle roi);
-void
trigger_redraw(ViewHelper *self, GeglRectangle *redraw_rect);
@@ -87,11 +85,6 @@ view_helper_init(ViewHelper *self)
self->autoscale_policy = GEGL_GTK_VIEW_AUTOSCALE_CONTENT;
self->block = FALSE;
- self->monitor_id = 0;
- self->processor = NULL;
- self->processing_queue = g_queue_new();
- self->currently_processed_rect = NULL;
-
self->widget_allocation = invalid_gdkrect;
}
@@ -100,22 +93,8 @@ finalize(GObject *gobject)
{
ViewHelper *self = VIEW_HELPER(gobject);
- if (self->monitor_id) {
- g_source_remove(self->monitor_id);
- self->monitor_id = 0;
- }
-
if (self->node)
g_object_unref(self->node);
-
- if (self->processor)
- g_object_unref(self->processor);
-
- g_queue_free_full(self->processing_queue, g_free);
-
- if (self->currently_processed_rect) {
- g_free(self->currently_processed_rect);
- }
}
/* Transform a rectangle from model to view coordinates. */
@@ -164,55 +143,6 @@ update_autoscale(ViewHelper *self)
}
-static void
-invalidated_event(GeglNode *node,
- GeglRectangle *rect,
- ViewHelper *self)
-{
- trigger_processing(self, *rect);
-}
-
-static gboolean
-task_monitor(ViewHelper *self)
-{
- gboolean processing_done;
-
- if (!self->processor || !self->node) {
- return FALSE;
- }
-
- // PERFORMANCE: combine all the rects added to the queue during a single
- // iteration of the main loop somehow
-
- if (!self->currently_processed_rect) {
-
- if (g_queue_is_empty(self->processing_queue)) {
- // Unregister worker
- self->monitor_id = 0;
- return FALSE;
- }
- else {
- // Fetch next rect to process
- self->currently_processed_rect = (GeglRectangle *)g_queue_pop_tail(self->processing_queue);
- g_assert(self->currently_processed_rect);
- gegl_processor_set_rectangle(self->processor, self->currently_processed_rect);
- }
- }
-
- processing_done = !gegl_processor_work(self->processor, NULL);
-
- if (processing_done) {
- // Go to next region
- if (self->currently_processed_rect) {
- g_free(self->currently_processed_rect);
- }
- self->currently_processed_rect = NULL;
- }
-
- return TRUE;
-}
-
-
/* When the GeglNode has been computed,
* find out if the size of the vie changed and
* emit the "size-changed" signal to notify view
@@ -295,43 +225,6 @@ view_helper_set_allocation(ViewHelper *self, GdkRectangle *allocation)
update_autoscale(self);
}
-/* Trigger processing of the GeglNode */
-void
-trigger_processing(ViewHelper *self, GeglRectangle roi)
-{
- GeglRectangle *rect;
-
- //GeglRectangle roi;
-
- // PERFORMANCE: determine the area that the view widget is interested in,
- // and calculate the intersection with the invalidated rect
- // and only pass this value as the ROI
- // Would then also have to follow changes in view transformation
-
- if (!self->node)
- return;
-
-// roi.x = self->x / self->scale;
-// roi.y = self->y / self->scale;
-
-// roi.width = ceil(self->widget_allocation.width / self->scale + 1);
-// roi.height = ceil(self->widget_allocation.height / self->scale + 1);
-
- if (self->monitor_id == 0) {
- self->monitor_id = g_idle_add_full(G_PRIORITY_LOW,
- (GSourceFunc) task_monitor, self,
- NULL);
- }
-
- // Add the invalidated region to the dirty
- rect = g_new(GeglRectangle, 1);
- rect->x = roi.x;
- rect->y = roi.y;
- rect->width = roi.width;
- rect->height = roi.height;
- g_queue_push_head(self->processing_queue, rect);
-}
-
void
trigger_redraw(ViewHelper *self, GeglRectangle *redraw_rect)
{
@@ -355,26 +248,14 @@ view_helper_set_node(ViewHelper *self, GeglNode *node)
g_object_unref(self->node);
if (node) {
- GeglRectangle bbox;
-
g_object_ref(node);
self->node = node;
g_signal_connect_object(self->node, "computed",
G_CALLBACK(computed_event),
self, 0);
- g_signal_connect_object(self->node, "invalidated",
- G_CALLBACK(invalidated_event),
- self, 0);
-
- if (self->processor)
- g_object_unref(self->processor);
-
- bbox = gegl_node_get_bounding_box(self->node);
- self->processor = gegl_node_new_processor(self->node, &bbox);
update_autoscale(self);
- trigger_processing(self, bbox);
} else
self->node = NULL;
diff --git a/src/gegl-gtk-view-helper.h b/src/gegl-gtk-view-helper.h
index 022ac5e..fcf0e00 100644
--- a/src/gegl-gtk-view-helper.h
+++ b/src/gegl-gtk-view-helper.h
@@ -48,11 +48,6 @@ struct _ViewHelper {
gboolean block; /* blocking render */
GeglGtkViewAutoscale autoscale_policy;
- guint monitor_id;
- GeglProcessor *processor;
- GQueue *processing_queue; /* Queue of rectangles that needs to be processed */
- GeglRectangle *currently_processed_rect;
-
GdkRectangle widget_allocation; /* The allocated size of the widget */
};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]