Exemple #1
0
GtLayout* gt_layout_new_with_twc(GtDiagram *diagram,
                                 unsigned int width,
                                 GtStyle *style,
                                 GtTextWidthCalculator *twc,
                                 GtError *err)
{
  GtLayout *layout;
  GtLayoutTraverseInfo lti;
  gt_assert(diagram && style && twc && err);
  if (check_width(width, style, err) < 0)
    return NULL;
  layout = gt_calloc(1, sizeof (GtLayout));
  layout->twc = twc;
  layout->style = style;
  layout->width = width;
  layout->viewrange = gt_diagram_get_range(diagram);
  layout->nof_tracks = 0;
  lti.layout = layout;
  lti.twc = twc;
  layout->own_twc = false;
  (void) gt_diagram_build(diagram);
  layout->custom_tracks = gt_array_ref(gt_diagram_get_custom_tracks(diagram));
  /* XXX: use other container type here! */
  layout->tracks = gt_hashmap_new(HASH_STRING, gt_free_func,
                                  (GtFree) gt_track_delete);
  (void) gt_hashmap_foreach(gt_diagram_get_blocks(diagram),
                            layout_tracks,
                            &lti,
                            NULL);
  return layout;
}
GtHashmap* gt_diagram_get_blocks(GtDiagram *diagram, GtError *err)
{
  GtHashmap *ret;
  int had_err = 0;
  gt_assert(diagram);
  gt_rwlock_wrlock(diagram->lock);
  had_err = gt_diagram_build((GtDiagram*) diagram, err);
  if (had_err)
    ret = NULL;
  else
    ret = diagram->blocks;
  gt_rwlock_unlock(diagram->lock);
  return ret;
}