static void misc_draw(struct lstopo_output *loutput, struct draw_methods *methods, hwloc_obj_t level, unsigned depth, unsigned x, unsigned *retwidth, unsigned y, unsigned *retheight) { hwloc_topology_t topology = loutput->topology; int logical = loutput->logical; unsigned gridsize = loutput->gridsize; unsigned fontsize = loutput->fontsize; unsigned myheight = (fontsize ? (fontsize + gridsize) : 0), totheight; unsigned mywidth = 0, totwidth; unsigned textwidth = gridsize; char text[64]; int n; struct style style; DYNA_CHECK(); if (fontsize) { n = lstopo_obj_snprintf(text, sizeof(text), level, logical); textwidth = get_textwidth(loutput, methods, text, n, fontsize, gridsize); } RECURSE_HORIZ(level, &null_draw_methods, gridsize, gridsize); lstopo_set_object_color(methods, topology, level, 0, &style); methods->box(loutput, style.bg.r, style.bg.g, style.bg.b, depth, x, totwidth, y, totheight); if (fontsize) { methods->text(loutput, style.t.r, style.t.g, style.t.b, fontsize, depth-1, x + gridsize, y + gridsize, text); } RECURSE_HORIZ(level, methods, gridsize, gridsize); DYNA_SAVE(); }
static int prefer_vert(hwloc_topology_t topology, int logical, hwloc_obj_t level, void *output, unsigned depth, unsigned x, unsigned y, unsigned separator) { float horiz_ratio, vert_ratio; unsigned textwidth = 0; unsigned mywidth = 0, myheight = 0; unsigned totwidth, *retwidth = &totwidth, totheight, *retheight = &totheight; RECURSE_HORIZ(level, &null_draw_methods, separator, 0); horiz_ratio = (float)totwidth / totheight; RECURSE_VERT(level, &null_draw_methods, separator, 0); vert_ratio = (float)totwidth / totheight; return force_orient[level->type] == LSTOPO_ORIENT_VERT || (force_orient[level->type] != LSTOPO_ORIENT_HORIZ && prefer_ratio(vert_ratio, horiz_ratio)); }