Logo Search packages:      
Sourcecode: radare version File versions

default_layout.c

/*
 *  Grava - General purpose graphing library for Vala
 *  Copyright (C) 2007, 2008   pancake <youterm.com>
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "default_layout.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "edge.h"




struct _GravaDefaultLayoutPrivate {
      GravaGraph* graph;
};

#define GRAVA_DEFAULT_LAYOUT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GRAVA_TYPE_DEFAULT_LAYOUT, GravaDefaultLayoutPrivate))
enum  {
      GRAVA_DEFAULT_LAYOUT_DUMMY_PROPERTY
};
static gboolean grava_default_layout_d = FALSE;
static void _g_slist_free_g_object_unref (GSList* self);
static void grava_default_layout_treenodes (GravaDefaultLayout* self, GravaNode* n);
static void grava_default_layout_real_set_graph (GravaLayout* base, GravaGraph* graph);
static void grava_default_layout_real_run (GravaLayout* base, GravaGraph* graph);
static void _g_object_unref_gdestroy_notify (void* data);
static GObject * grava_default_layout_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties);
static gpointer grava_default_layout_parent_class = NULL;
static void grava_default_layout_finalize (GObject* obj);



#line 34 "default_layout.vala"
void grava_default_layout_reset_layout (GravaDefaultLayout* self) {
#line 34 "default_layout.vala"
      g_return_if_fail (self != NULL);
#line 36 "default_layout.vala"
      fprintf (stdout, "RESETING LAYOUT\n");
      {
            GSList* node_collection;
            GSList* node_it;
#line 37 "default_layout.vala"
            node_collection = self->priv->graph->nodes;
            for (node_it = node_collection; node_it != NULL; node_it = node_it->next) {
                  GravaNode* node;
#line 37 "default_layout.vala"
                  node = (GravaNode*) node_it->data;
                  {
#line 38 "default_layout.vala"
                        fprintf (stdout, "RESETING LAYOUT+++++\n");
#line 39 "default_layout.vala"
                        grava_default_layout_setxy (self, node);
                  }
            }
      }
}


#line 43 "default_layout.vala"
void grava_default_layout_reset_real (GravaDefaultLayout* self) {
#line 43 "default_layout.vala"
      g_return_if_fail (self != NULL);
      {
            GSList* node_collection;
            GSList* node_it;
#line 45 "default_layout.vala"
            node_collection = self->priv->graph->nodes;
            for (node_it = node_collection; node_it != NULL; node_it = node_it->next) {
                  GravaNode* node;
#line 45 "default_layout.vala"
                  node = (GravaNode*) node_it->data;
                  {
#line 46 "default_layout.vala"
                        self->priv->graph->nodes = g_slist_remove (self->priv->graph->nodes, node);
                  }
            }
      }
}


static void _g_slist_free_g_object_unref (GSList* self) {
      g_slist_foreach (self, (GFunc) g_object_unref, NULL);
      g_slist_free (self);
}


#line 50 "default_layout.vala"
static void grava_default_layout_treenodes (GravaDefaultLayout* self, GravaNode* n) {
      gint ox;
      GSList* nodes;
#line 50 "default_layout.vala"
      g_return_if_fail (self != NULL);
#line 50 "default_layout.vala"
      g_return_if_fail (n != NULL);
      ox = 0;
      nodes = grava_graph_outer_nodes (self->priv->graph, n);
      {
            GSList* node_collection;
            GSList* node_it;
#line 54 "default_layout.vala"
            node_collection = nodes;
            for (node_it = node_collection; node_it != NULL; node_it = node_it->next) {
                  GravaNode* node;
#line 54 "default_layout.vala"
                  node = (GravaNode*) node_it->data;
                  {
#line 55 "default_layout.vala"
                        node->y = (n->y + n->h) + self->y_offset;
#line 56 "default_layout.vala"
                        node->x = node->x + (n->w + ox);
#line 57 "default_layout.vala"
                        ox = ox + (50);
#line 58 "default_layout.vala"
                        grava_default_layout_treenodes (self, node);
                  }
            }
      }
      (nodes == NULL) ? NULL : (nodes = (_g_slist_free_g_object_unref (nodes), NULL));
}


#line 62 "default_layout.vala"
void grava_default_layout_setxy (GravaDefaultLayout* self, GravaNode* n) {
      GravaNode* _tmp1;
      char* _tmp0;
      GravaNode* _tmp2;
      GravaNode* m;
#line 62 "default_layout.vala"
      g_return_if_fail (self != NULL);
#line 62 "default_layout.vala"
      g_return_if_fail (n != NULL);
#line 64 "default_layout.vala"
      _tmp1 = NULL;
#line 61 "node.vala"
      _tmp0 = NULL;
#line 64 "default_layout.vala"
      _tmp2 = NULL;
      m = (_tmp2 = (_tmp1 = (GravaNode*) g_hash_table_lookup (self->data, _tmp0 = grava_node_get (n, "offset")), (_tmp1 == NULL) ? NULL : g_object_ref (_tmp1)), _tmp0 = (g_free (_tmp0), NULL), _tmp2);
#line 65 "default_layout.vala"
      if (m == NULL) {
            GravaNode* no;
            char* _tmp3;
            GravaNode* _tmp4;
            no = grava_node_new ();
#line 61 "node.vala"
            _tmp3 = NULL;
#line 67 "default_layout.vala"
            g_object_set ((GObject*) no, "offset", _tmp3 = grava_node_get (n, "offset"), NULL);
            _tmp3 = (g_free (_tmp3), NULL);
#line 68 "default_layout.vala"
            no->x = n->x;
#line 69 "default_layout.vala"
            no->y = n->y;
#line 70 "default_layout.vala"
            no->w = n->w;
#line 71 "default_layout.vala"
            no->h = n->h;
#line 72 "default_layout.vala"
            _tmp4 = NULL;
#line 72 "default_layout.vala"
            g_hash_table_insert (self->data, grava_node_get (n, "offset"), (_tmp4 = no, (_tmp4 == NULL) ? NULL : g_object_ref (_tmp4)));
            (no == NULL) ? NULL : (no = (g_object_unref (no), NULL));
      } else {
#line 74 "default_layout.vala"
            m->x = n->x;
#line 75 "default_layout.vala"
            m->y = n->y;
#line 76 "default_layout.vala"
            m->w = n->w;
#line 77 "default_layout.vala"
            m->h = n->h;
      }
      (m == NULL) ? NULL : (m = (g_object_unref (m), NULL));
}


#line 81 "default_layout.vala"
gboolean grava_default_layout_getxy (GravaDefaultLayout* self, GravaNode** n) {
      GravaNode* _tmp1;
      char* _tmp0;
      GravaNode* _tmp2;
      GravaNode* m;
      char* _tmp5;
      gboolean _tmp6;
#line 81 "default_layout.vala"
      g_return_val_if_fail (self != NULL, FALSE);
#line 81 "default_layout.vala"
      g_return_val_if_fail (n != NULL, FALSE);
#line 83 "default_layout.vala"
      _tmp1 = NULL;
#line 61 "node.vala"
      _tmp0 = NULL;
#line 83 "default_layout.vala"
      _tmp2 = NULL;
      m = (_tmp2 = (_tmp1 = (GravaNode*) g_hash_table_lookup (self->data, _tmp0 = grava_node_get ((*n), "offset")), (_tmp1 == NULL) ? NULL : g_object_ref (_tmp1)), _tmp0 = (g_free (_tmp0), NULL), _tmp2);
#line 84 "default_layout.vala"
      if (m != NULL) {
            char* _tmp3;
            gboolean _tmp4;
#line 85 "default_layout.vala"
            (*n)->x = m->x;
#line 86 "default_layout.vala"
            (*n)->y = m->y;
#line 87 "default_layout.vala"
            (*n)->w = m->w;
#line 88 "default_layout.vala"
            (*n)->h = m->h;
#line 61 "node.vala"
            _tmp3 = NULL;
#line 89 "default_layout.vala"
            fprintf (stdout, "TAKEND FOR %s\n", _tmp3 = grava_node_get ((*n), "offset"));
            _tmp3 = (g_free (_tmp3), NULL);
#line 90 "default_layout.vala"
            return (_tmp4 = TRUE, (m == NULL) ? NULL : (m = (g_object_unref (m), NULL)), _tmp4);
      }
#line 61 "node.vala"
      _tmp5 = NULL;
#line 92 "default_layout.vala"
      fprintf (stdout, "NOT TAKEND FOR %s\n", _tmp5 = grava_node_get ((*n), "offset"));
      _tmp5 = (g_free (_tmp5), NULL);
#line 94 "default_layout.vala"
      return (_tmp6 = FALSE, (m == NULL) ? NULL : (m = (g_object_unref (m), NULL)), _tmp6);
}


#line 97 "default_layout.vala"
void grava_default_layout_walkChild (GravaDefaultLayout* self, GravaNode* node, gint level) {
#line 97 "default_layout.vala"
      g_return_if_fail (self != NULL);
#line 97 "default_layout.vala"
      g_return_if_fail (node != NULL);
#line 99 "default_layout.vala"
      if (level < 1) {
#line 99 "default_layout.vala"
            return;
      }
      {
            GSList* edge_collection;
            GSList* edge_it;
#line 100 "default_layout.vala"
            edge_collection = self->priv->graph->edges;
            for (edge_it = edge_collection; edge_it != NULL; edge_it = edge_it->next) {
                  GravaEdge* edge;
#line 100 "default_layout.vala"
                  edge = (GravaEdge*) edge_it->data;
                  {
#line 101 "default_layout.vala"
                        if (edge->orig == node) {
#line 102 "default_layout.vala"
                              edge->dest->y = (edge->orig->y + edge->orig->h) + self->y_offset;
#line 103 "default_layout.vala"
                              grava_default_layout_walkChild (self, edge->dest, (level = level - 1));
                        }
                  }
            }
      }
}


#line 108 "default_layout.vala"
GravaNode* grava_default_layout_get_parent (GravaDefaultLayout* self, GravaNode* node) {
#line 108 "default_layout.vala"
      g_return_val_if_fail (self != NULL, NULL);
#line 108 "default_layout.vala"
      g_return_val_if_fail (node != NULL, NULL);
      {
            GSList* edge_collection;
            GSList* edge_it;
#line 110 "default_layout.vala"
            edge_collection = self->priv->graph->edges;
            for (edge_it = edge_collection; edge_it != NULL; edge_it = edge_it->next) {
                  GravaEdge* edge;
#line 110 "default_layout.vala"
                  edge = (GravaEdge*) edge_it->data;
                  {
#line 111 "default_layout.vala"
                        if (edge->dest == node) {
#line 112 "default_layout.vala"
                              return edge->orig;
                        }
                  }
            }
      }
#line 114 "default_layout.vala"
      return NULL;
}


#line 117 "default_layout.vala"
static void grava_default_layout_real_set_graph (GravaLayout* base, GravaGraph* graph) {
      GravaDefaultLayout * self;
      self = (GravaDefaultLayout*) base;
#line 117 "default_layout.vala"
      g_return_if_fail (graph != NULL);
#line 119 "default_layout.vala"
      self->priv->graph = graph;
}


#line 122 "default_layout.vala"
static void grava_default_layout_real_run (GravaLayout* base, GravaGraph* graph) {
      GravaDefaultLayout * self;
      double last_y;
      gint i;
      gint k;
      GravaNode* n;
      GravaNode* p;
      GravaNode* destn;
      gboolean found;
      self = (GravaDefaultLayout*) base;
#line 122 "default_layout.vala"
      g_return_if_fail (graph != NULL);
#line 124 "default_layout.vala"
      self->priv->graph = graph;
      last_y = 0.0;
      i = 0;
      k = 0;
      n = NULL;
      p = NULL;
      destn = NULL;
      found = FALSE;
      /* reset all node positions*/
#line 132 "default_layout.vala"
      last_y = (double) 50;
      /* Tots vertical, un sota l'altr ordenats per base addr*/
      {
            GSList* node_collection;
            GSList* node_it;
#line 135 "default_layout.vala"
            node_collection = graph->nodes;
            for (node_it = node_collection; node_it != NULL; node_it = node_it->next) {
                  GravaNode* node;
#line 135 "default_layout.vala"
                  node = (GravaNode*) node_it->data;
                  {
#line 136 "default_layout.vala"
                        if (!node->visible) {
#line 136 "default_layout.vala"
                              continue;
                        }
                        /* reset node positions*/
#line 138 "default_layout.vala"
                        node->x = (double) 50;
#line 139 "default_layout.vala"
                        grava_node_fit (node);
#line 140 "default_layout.vala"
                        node->y = last_y;
#line 141 "default_layout.vala"
                        last_y = (node->y + node->h) + 50;
#line 142 "default_layout.vala"
                        if (grava_default_layout_d) {
                              char* _tmp0;
#line 61 "node.vala"
                              _tmp0 = NULL;
#line 142 "default_layout.vala"
                              fprintf (stdout, " at %f %s %x\n", node->y, _tmp0 = grava_node_get (node, "label"), node->baseaddr);
                              _tmp0 = (g_free (_tmp0), NULL);
                        }
                  }
            }
      }
      /* Per cada node. Segueixo la condició certa, tots els nodes que estiguin
       entre el node que estic mirant i el de la condicio certa els desplaço a la dreta.
       Tambe  apropo  el node desti a l'origen.
      
       Entre el node que miro i el desti vol dir que la x sigui la mateixa.
      */
#line 151 "default_layout.vala"
      for (i = 0; i < g_slist_length (graph->nodes); i++) {
            GravaNode* _tmp2;
            GravaNode* _tmp1;
            GravaNode* _tmp4;
            char* _tmp3;
            GravaNode* _tmp5;
            GravaNode* m;
            gboolean _tmp9;
            _tmp2 = NULL;
#line 152 "default_layout.vala"
            _tmp1 = NULL;
#line 152 "default_layout.vala"
            n = (_tmp2 = (_tmp1 = (GravaNode*) g_slist_nth_data (graph->nodes, (guint) i), (_tmp1 == NULL) ? NULL : g_object_ref (_tmp1)), (n == NULL) ? NULL : (n = (g_object_unref (n), NULL)), _tmp2);
            /*
            if (getxy(ref n))
            continue;
            */
#line 157 "default_layout.vala"
            _tmp4 = NULL;
#line 61 "node.vala"
            _tmp3 = NULL;
#line 157 "default_layout.vala"
            _tmp5 = NULL;
            m = (_tmp5 = (_tmp4 = (GravaNode*) g_hash_table_lookup (self->data, _tmp3 = grava_node_get (n, "offset")), (_tmp4 == NULL) ? NULL : g_object_ref (_tmp4)), _tmp3 = (g_free (_tmp3), NULL), _tmp5);
#line 158 "default_layout.vala"
            if (m != NULL) {
#line 159 "default_layout.vala"
                  n->x = m->x;
#line 160 "default_layout.vala"
                  n->y = m->y;
#line 161 "default_layout.vala"
                  n->w = m->w;
#line 162 "default_layout.vala"
                  n->h = m->h;
#line 163 "default_layout.vala"
            //    fprintf (stdout, "FUCKA! %f %f\n", n->x, n->y);
                  (m == NULL) ? NULL : (m = (g_object_unref (m), NULL));
#line 164 "default_layout.vala"
                  continue;
            }
#line 166 "default_layout.vala"
            //fprintf (stdout, "---- not ounfd !\n");
            /*/ busco l'edge verd d'aquest node
            /*/
#line 170 "default_layout.vala"
            found = FALSE;
            {
                  GSList* edge_collection;
                  GSList* edge_it;
#line 171 "default_layout.vala"
                  edge_collection = graph->edges;
                  for (edge_it = edge_collection; edge_it != NULL; edge_it = edge_it->next) {
                        GravaEdge* edge;
#line 171 "default_layout.vala"
                        edge = (GravaEdge*) edge_it->data;
                        {
                              gboolean _tmp6;
                              _tmp6 = FALSE;
#line 172 "default_layout.vala"
                              if (edge->orig == n) {
#line 172 "default_layout.vala"
                                    _tmp6 = edge->jmpcnd == TRUE;
                              } else {
#line 172 "default_layout.vala"
                                    _tmp6 = FALSE;
                              }
#line 172 "default_layout.vala"
                              if (_tmp6) {
                                    GravaNode* _tmp8;
                                    GravaNode* _tmp7;
#line 173 "default_layout.vala"
                                    if (grava_default_layout_d) {
#line 173 "default_layout.vala"
                                          fprintf (stdout, "0x%x ----> 0x%x\n", edge->orig->baseaddr, edge->dest->baseaddr);
                                    }
                                    _tmp8 = NULL;
#line 174 "default_layout.vala"
                                    _tmp7 = NULL;
#line 174 "default_layout.vala"
                                    destn = (_tmp8 = (_tmp7 = edge->dest, (_tmp7 == NULL) ? NULL : g_object_ref (_tmp7)), (destn == NULL) ? NULL : (destn = (g_object_unref (destn), NULL)), _tmp8);
#line 175 "default_layout.vala"
                                    found = TRUE;
#line 176 "default_layout.vala"
                                    break;
                              }
                        }
                  }
            }
            /*/ n es el node origen.
            / destn es el node desti
            /*/
#line 183 "default_layout.vala"
            last_y = (n->y + n->h) + 10;
            _tmp9 = FALSE;
#line 188 "default_layout.vala"
            if ((found == TRUE)) {
#line 188 "default_layout.vala"
                  _tmp9 = (n->baseaddr < destn->baseaddr);
            } else {
#line 188 "default_layout.vala"
                  _tmp9 = FALSE;
            }
            /* Si la base del node origen es < que le desti .
             sempre anem avall.
            */
#line 188 "default_layout.vala"
            if (_tmp9) {
                  double maxw;
                  /*/ Busco el node mes ample.
                  /*/
                  maxw = (double) 0;
#line 192 "default_layout.vala"
                  for (k = (i + 1); k < g_slist_length (graph->nodes); k++) {
                        GravaNode* _tmp11;
                        GravaNode* _tmp10;
                        gboolean _tmp12;
                        _tmp11 = NULL;
#line 193 "default_layout.vala"
                        _tmp10 = NULL;
#line 193 "default_layout.vala"
                        p = (_tmp11 = (_tmp10 = (GravaNode*) g_slist_nth_data (graph->nodes, (guint) k), (_tmp10 == NULL) ? NULL : g_object_ref (_tmp10)), (p == NULL) ? NULL : (p = (g_object_unref (p), NULL)), _tmp11);
                        _tmp12 = FALSE;
#line 194 "default_layout.vala"
                        if ((p->x == n->x)) {
#line 194 "default_layout.vala"
                              _tmp12 = (p->w > maxw);
                        } else {
#line 194 "default_layout.vala"
                              _tmp12 = FALSE;
                        }
#line 194 "default_layout.vala"
                        if (_tmp12) {
#line 195 "default_layout.vala"
                              maxw = p->w;
                        }
                  }
                  /*/ Desplaço
                  /*/
#line 199 "default_layout.vala"
                  for (k = (i + 1); k < g_slist_length (graph->nodes); k++) {
                        GravaNode* _tmp14;
                        GravaNode* _tmp13;
                        _tmp14 = NULL;
#line 200 "default_layout.vala"
                        _tmp13 = NULL;
#line 200 "default_layout.vala"
                        p = (_tmp14 = (_tmp13 = (GravaNode*) g_slist_nth_data (graph->nodes, (guint) k), (_tmp13 == NULL) ? NULL : g_object_ref (_tmp13)), (p == NULL) ? NULL : (p = (g_object_unref (p), NULL)), _tmp14);
#line 202 "default_layout.vala"
                        if (grava_default_layout_d) {
#line 202 "default_layout.vala"
                              fprintf (stdout, "Displacing 0x%x\n", p->baseaddr);
                        }
                        /* El node estava entre el node origen i el desti*/
#line 205 "default_layout.vala"
                        if (p->x == n->x) {
#line 206 "default_layout.vala"
                              p->x = p->x + ((maxw + 10));
                        }
                        /*/ Es ja el node desti.*/
#line 209 "default_layout.vala"
                        if (p == destn) {
#line 210 "default_layout.vala"
                              if (grava_default_layout_d) {
#line 210 "default_layout.vala"
                                    fprintf (stdout, "AT 0x%x\n", p->baseaddr);
                              }
#line 211 "default_layout.vala"
                              destn->x = n->x;
#line 212 "default_layout.vala"
                              destn->y = (n->y + n->h) + 50;
#line 213 "default_layout.vala"
                              break;
                        }
                  }
            }
#line 217 "default_layout.vala"
            grava_default_layout_setxy (self, n);
            (m == NULL) ? NULL : (m = (g_object_unref (m), NULL));
      }
      (n == NULL) ? NULL : (n = (g_object_unref (n), NULL));
      (p == NULL) ? NULL : (p = (g_object_unref (p), NULL));
      (destn == NULL) ? NULL : (destn = (g_object_unref (destn), NULL));
#line 220 "default_layout.vala"
      return;
}


#line 21 "default_layout.vala"
GravaDefaultLayout* grava_default_layout_construct (GType object_type) {
      GravaDefaultLayout * self;
      self = g_object_newv (object_type, 0, NULL);
      return self;
}


#line 21 "default_layout.vala"
GravaDefaultLayout* grava_default_layout_new (void) {
#line 21 "default_layout.vala"
      return grava_default_layout_construct (GRAVA_TYPE_DEFAULT_LAYOUT);
}


#line 182 "gobject-2.0.vapi"
static void _g_object_unref_gdestroy_notify (void* data) {
      g_object_unref (data);
}


/* debug output*/
static GObject * grava_default_layout_constructor (GType type, guint n_construct_properties, GObjectConstructParam * construct_properties) {
      GObject * obj;
      GravaDefaultLayoutClass * klass;
      GObjectClass * parent_class;
      GravaDefaultLayout * self;
      klass = GRAVA_DEFAULT_LAYOUT_CLASS (g_type_class_peek (GRAVA_TYPE_DEFAULT_LAYOUT));
      parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass));
      obj = parent_class->constructor (type, n_construct_properties, construct_properties);
      self = GRAVA_DEFAULT_LAYOUT (obj);
      {
            GHashTable* _tmp0;
            _tmp0 = NULL;
#line 31 "default_layout.vala"
            self->data = (_tmp0 = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, _g_object_unref_gdestroy_notify), (self->data == NULL) ? NULL : (self->data = (g_hash_table_unref (self->data), NULL)), _tmp0);
      }
      return obj;
}


static void grava_default_layout_class_init (GravaDefaultLayoutClass * klass) {
      grava_default_layout_parent_class = g_type_class_peek_parent (klass);
      g_type_class_add_private (klass, sizeof (GravaDefaultLayoutPrivate));
      G_OBJECT_CLASS (klass)->constructor = grava_default_layout_constructor;
      G_OBJECT_CLASS (klass)->finalize = grava_default_layout_finalize;
      GRAVA_LAYOUT_CLASS (klass)->set_graph = grava_default_layout_real_set_graph;
      GRAVA_LAYOUT_CLASS (klass)->run = grava_default_layout_real_run;
}


static void grava_default_layout_instance_init (GravaDefaultLayout * self) {
      self->priv = GRAVA_DEFAULT_LAYOUT_GET_PRIVATE (self);
      self->y_offset = (double) 100;
      self->x_offset = (double) 50;
}


static void grava_default_layout_finalize (GObject* obj) {
      GravaDefaultLayout * self;
      self = GRAVA_DEFAULT_LAYOUT (obj);
      (self->data == NULL) ? NULL : (self->data = (g_hash_table_unref (self->data), NULL));
      G_OBJECT_CLASS (grava_default_layout_parent_class)->finalize (obj);
}


GType grava_default_layout_get_type (void) {
      static GType grava_default_layout_type_id = 0;
      if (grava_default_layout_type_id == 0) {
            static const GTypeInfo g_define_type_info = { sizeof (GravaDefaultLayoutClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) grava_default_layout_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (GravaDefaultLayout), 0, (GInstanceInitFunc) grava_default_layout_instance_init, NULL };
            grava_default_layout_type_id = g_type_register_static (GRAVA_TYPE_LAYOUT, "GravaDefaultLayout", &g_define_type_info, 0);
      }
      return grava_default_layout_type_id;
}





Generated by  Doxygen 1.6.0   Back to index