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, <i, 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; }