diff options
author | Stefan Kost <ensonic@users.sf.net> | 2010-10-12 18:24:30 +0300 |
---|---|---|
committer | Stefan Kost <ensonic@users.sf.net> | 2010-10-12 18:24:30 +0300 |
commit | 924a270f2c5bc2d377573c57559ff8d324f9704b (patch) | |
tree | c69fffb46b45a12d97c3501b817682087209b1f1 | |
parent | 4a17ecfa862ac08a915aabafc8730bb550d8f040 (diff) |
ui: keep the graph local to refresh_layout
Remove the instance AGraph var. Create/update/free the graph completely in
refresh_layout().
-rw-r--r-- | src/ui/main-window.c | 66 |
1 files changed, 30 insertions, 36 deletions
diff --git a/src/ui/main-window.c b/src/ui/main-window.c index 4f9681e..fc9ce70 100644 --- a/src/ui/main-window.c +++ b/src/ui/main-window.c @@ -112,8 +112,7 @@ struct _GstTLMainWindowPrivate { GtkToggleButton *record_button, *replay_button; GtkButton *stop_button; - /* the graph */ - Agraph_t *graph; + /* graphviz context */ GVC_t *gvc; /* arrays pointing to GstTLElement, GstTLPad, GstTLLink */ GPtrArray *elements; @@ -216,31 +215,8 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode) * - never add ghost-proxy pad links * - modify pad->proxypad link to pad->ghostpad links */ - - // destroy old graph - gvFreeLayout (self->priv->gvc,self->priv->graph); - agclose (self->priv->graph); - // reset graph items - arr = self->priv->elements; - for (i = 0; i < arr->len; i++) { - GstTLElement *item = arr->pdata[i]; - if(item) - item->graph = NULL; - } - arr = self->priv->pads; - for (i = 0; i < arr->len; i++) { - GstTLPad *item = arr->pdata[i]; - if(item) - item->node = NULL; - } - arr = self->priv->links; - for (i = 0; i < arr->len; i++) { - GstTLLink *item = arr->pdata[i]; - if(item) - item->edge = NULL; - } - - self->priv->graph = root = agopen ("pipelines", AGDIGRAPH); + + root = agopen ("pipelines", AGDIGRAPH); /* set default attributes */ agsafeset (root, "rankdir", "LR", "LR"); agsafeset (root, "labelloc", "t", "t"); @@ -253,7 +229,7 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode) agnodeattr (root, "margin", "0.0,0.0"); agnodeattr (root, "shape", "box"); - TRACE("refresh layout, root=%p, mode=%d",self->priv->graph,mode); + TRACE("refresh layout, root=%p, mode=%d",root,mode); // add elements/bins arr = self->priv->elements; @@ -395,9 +371,9 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode) gchar __fname[50]; sprintf (__fname, "/tmp/gsttl_%03d.dot", __ct); - gvRenderFilename (self->priv->gvc, self->priv->graph, "dot", __fname); + gvRenderFilename (self->priv->gvc, root, "dot", __fname); //sprintf (__fname, "/tmp/gsttl_%03d.png", __ct); - //gvRenderFilename (self->priv->gvc, self->priv->graph, "png", "/tmp/gsttlgraph.png"); + //gvRenderFilename (self->priv->gvc, root, "png", "/tmp/gsttlgraph.png"); __ct++; } #endif @@ -713,6 +689,29 @@ refresh_layout (GstTLMainWindow *self, GstTLRefreshMode mode) } g_slice_free1 (sizeof(guint)*self->priv->elements->len, bin_z_order); + + // destroy graph + gvFreeLayout (self->priv->gvc,root); + agclose (root); + // reset graph items + arr = self->priv->elements; + for (i = 0; i < arr->len; i++) { + GstTLElement *item = arr->pdata[i]; + if(item) + item->graph = NULL; + } + arr = self->priv->pads; + for (i = 0; i < arr->len; i++) { + GstTLPad *item = arr->pdata[i]; + if(item) + item->node = NULL; + } + arr = self->priv->links; + for (i = 0; i < arr->len; i++) { + GstTLLink *item = arr->pdata[i]; + if(item) + item->edge = NULL; + } } /* event handler */ @@ -1203,9 +1202,6 @@ gsttl_main_window_finalize (GObject *object) } g_ptr_array_free (self->priv->links, TRUE); - gvFreeLayout (self->priv->gvc,self->priv->graph); - agclose (self->priv->graph); - gvFreeContext (self->priv->gvc); } @@ -1223,9 +1219,7 @@ gsttl_main_window_init (GstTLMainWindow *self) self->priv->zoom = 1.0; self->priv->gvc = gvContext (); - // FIXME: do we want to hook pipeline creation and create a subgraph per pipe? - // gst_bin_new() could also help us with other issues - self->priv->graph = agopen ("pipelines", AGDIGRAPH); + self->priv->elements = g_ptr_array_new (); self->priv->pads = g_ptr_array_new (); self->priv->links = g_ptr_array_new (); |