/* addLabelBB:
*/
-static box addLabelBB(box bb, textlabel_t * lp)
+static box addLabelBB(box bb, textlabel_t * lp, boolean flipxy)
{
- int width = ROUND(lp->dimen.x);
- int height = ROUND(lp->dimen.y);
+ int width, height;
point p = lp->p;
int min, max;
+ if (flipxy) {
+ height = ROUND(lp->dimen.x);
+ width = ROUND(lp->dimen.y);
+ }
+ else {
+ width = ROUND(lp->dimen.x);
+ height = ROUND(lp->dimen.y);
+ }
min = p.x - width / 2;
max = p.x + width / 2;
if (min < bb.LL.x)
*/
void updateBB(graph_t * g, textlabel_t * lp)
{
- GD_bb(g) = addLabelBB(GD_bb(g), lp);
+ GD_bb(g) = addLabelBB(GD_bb(g), lp, GD_flip(g));
}
/* compute_bb:
}
}
if (ED_label(e) && ED_label(e)->set)
- bb = addLabelBB(bb, ED_label(e));
+ bb = addLabelBB(bb, ED_label(e), GD_flip(g));
}
}
n = e0->tail;
r = ND_rank(n);
if (r == GD_maxrank(g)) {
- sizey = ND_coord_i(GD_rank(g)[r-1].v[0]).y - ND_coord_i(n).y;
+ if (r > 0)
+ sizey = ND_coord_i(GD_rank(g)[r-1].v[0]).y - ND_coord_i(n).y;
+ else
+ sizey = ND_ht_i(n);
}
else if (r == GD_minrank(g)) {
sizey = ND_coord_i(n).y - ND_coord_i(GD_rank(g)[r+1].v[0]).y;
sizey = MIN(upy, dwny);
}
makeSelfEdge(P, edges, ind, cnt, sd.Multisep, sizey, &sinfo);
+ for (i = 0; i < cnt; i++) {
+ e = edges[ind+i];
+ if (ED_label(e))
+ updateBB(g, ED_label(e));
+ }
}
else if (ND_rank(e0->tail) == ND_rank(e0->head)) {
make_flat_edge(&sd, P, edges, ind, cnt);
for (j = 0; j < auxbz->size; j++) {
bz->list[j] = transform(auxbz->list[j], del, GD_flip(g));
}
- if (ED_label(e))
+ if (ED_label(e)) {
ED_label(e)->p = transform(ED_label(auxe)->p, del, GD_flip(g));
+ updateBB(g, ED_label(e));
+ }
}
cleanupCloneGraph (auxg);