static void normal_draw(struct lstopo_output *loutput, hwloc_obj_t level, unsigned depth, unsigned x, unsigned y) { struct lstopo_obj_userdata *lud = level->userdata; unsigned gridsize = loutput->gridsize; unsigned fontsize = loutput->fontsize; if (loutput->drawing == LSTOPO_DRAWING_PREPARE) { /* compute children size and position, our size, and save it */ prepare_text(loutput, level); lud->width = lud->textwidth + gridsize + FONTGRIDSIZE; lud->height = gridsize + (fontsize + FONTGRIDSIZE) * lud->ntext; place_children(loutput, level, gridsize, gridsize + (fontsize + FONTGRIDSIZE) * lud->ntext); } else { /* LSTOPO_DRAWING_DRAW */ struct draw_methods *methods = loutput->methods; struct lstopo_style style; unsigned totwidth, totheight; /* restore our size that was computed during prepare */ totwidth = lud->width; totheight = lud->height; lstopo_set_object_color(loutput, level, &style); methods->box(loutput, &style.bg, depth, x, totwidth, y, totheight); draw_text(loutput, level, &style.t, depth-1, x + gridsize, y + gridsize); /* Draw sublevels for real */ draw_children(loutput, level, depth-1, x, y); } }
void pane::place(const point& origin, const point& size) { DBG_GUI_L << LOG_HEADER << '\n'; widget::place(origin, size); assert(origin.x == 0); assert(origin.y == 0); place_children(); }
static void pci_device_draw(struct lstopo_output *loutput, hwloc_obj_t level, unsigned depth, unsigned x, unsigned y) { struct lstopo_obj_userdata *lud = level->userdata; unsigned gridsize = loutput->gridsize; unsigned fontsize = loutput->fontsize; unsigned overlaidoffset = 0; if (lud->pci_collapsed > 1) { /* additional depths and height for overlaid boxes */ depth -= 2; if (lud->pci_collapsed > 2) { overlaidoffset = gridsize; } else { overlaidoffset = gridsize/2; } } if (loutput->drawing == LSTOPO_DRAWING_PREPARE) { /* compute children size and position, our size, and save it */ prepare_text(loutput, level); lud->width = lud->textwidth + gridsize + overlaidoffset + FONTGRIDSIZE; lud->height = fontsize + gridsize + overlaidoffset + FONTGRIDSIZE; place_children(loutput, level, gridsize, fontsize + gridsize + FONTGRIDSIZE); } else { /* LSTOPO_DRAWING_DRAW */ struct draw_methods *methods = loutput->methods; struct lstopo_style style; unsigned totwidth, totheight; /* restore our size that was computed during prepare */ totwidth = lud->width; totheight = lud->height; lstopo_set_object_color(loutput, level, &style); if (lud->pci_collapsed > 1) { methods->box(loutput, &style.bg, depth+2, x + overlaidoffset, totwidth - overlaidoffset, y + overlaidoffset, totheight - overlaidoffset); if (lud->pci_collapsed > 2) methods->box(loutput, &style.bg, depth+1, x + overlaidoffset/2, totwidth - overlaidoffset, y + overlaidoffset/2, totheight - overlaidoffset); methods->box(loutput, &style.bg, depth, x, totwidth - overlaidoffset, y, totheight - overlaidoffset); } else { methods->box(loutput, &style.bg, depth, x, totwidth, y, totheight); } draw_text(loutput, level, &style.t, depth-1, x + gridsize, y + gridsize); /* Draw sublevels for real */ draw_children(loutput, level, depth-1, x, y); } }
static void cache_draw(struct lstopo_output *loutput, hwloc_obj_t level, unsigned depth, unsigned x, unsigned y) { struct lstopo_obj_userdata *lud = level->userdata; unsigned gridsize = loutput->gridsize; unsigned fontsize = loutput->fontsize; unsigned myheight = fontsize + gridsize + FONTGRIDSIZE; /* totheight also contains children outside of this actual cache box */ if (loutput->drawing == LSTOPO_DRAWING_PREPARE) { /* compute children size and position, our size, and save it */ prepare_text(loutput, level); lud->width = lud->textwidth + gridsize + FONTGRIDSIZE; lud->height = myheight; place_children(loutput, level, 0, myheight + gridsize); } else { /* LSTOPO_DRAWING_DRAW */ struct draw_methods *methods = loutput->methods; struct lstopo_style style; unsigned totwidth; unsigned myoff = 0; /* restore our size that was computed during prepare */ totwidth = lud->width; if (lud->above_children.kinds) { /* display above_children even above the cache itself */ myoff = lud->above_children.height + gridsize; lud->above_children.yrel = 0; } lstopo_set_object_color(loutput, level, &style); methods->box(loutput, &style.bg, depth, x, totwidth, y + myoff, myheight); draw_text(loutput, level, &style.t, depth-1, x + gridsize, y + gridsize + myoff); /* Draw sublevels for real */ draw_children(loutput, level, depth-1, x, y); } }
static void bridge_draw(struct lstopo_output *loutput, hwloc_obj_t level, unsigned depth, unsigned x, unsigned y) { struct lstopo_obj_userdata *lud = level->userdata; unsigned gridsize = loutput->gridsize; unsigned fontsize = loutput->fontsize; unsigned speedwidth = fontsize ? fontsize + gridsize : 0; if (loutput->drawing == LSTOPO_DRAWING_PREPARE) { /* compute children size and position, our size, and save it */ lud->width = 2*gridsize + gridsize + speedwidth; lud->height = gridsize + FONTGRIDSIZE; place_children(loutput, level, 3*gridsize + speedwidth, 0); } else { /* LSTOPO_DRAWING_DRAW */ struct draw_methods *methods = loutput->methods; struct lstopo_style style; /* Square and left link */ lstopo_set_object_color(loutput, level, &style); methods->box(loutput, &style.bg, depth, x, gridsize, y + BRIDGE_HEIGHT/2 - gridsize/2, gridsize); methods->line(loutput, &BLACK_COLOR, depth, x + gridsize, y + BRIDGE_HEIGHT/2, x + 2*gridsize, y + BRIDGE_HEIGHT/2); if (level->io_arity > 0) { hwloc_obj_t child = NULL; unsigned ymax = -1; unsigned ymin = (unsigned) -1; int ncstate; while ((child=next_child(loutput, level, LSTOPO_CHILD_KIND_ALL, child, &ncstate)) != NULL) { struct lstopo_obj_userdata *clud = child->userdata; unsigned ymid = y + clud->yrel + BRIDGE_HEIGHT/2; /* Line to PCI device */ methods->line(loutput, &BLACK_COLOR, depth-1, x+2*gridsize, ymid, x+3*gridsize+speedwidth, ymid); if (ymin == (unsigned) -1) ymin = ymid; ymax = ymid; /* Negotiated link speed */ if (fontsize) { float speed = 0.; if (child->type == HWLOC_OBJ_PCI_DEVICE) speed = child->attr->pcidev.linkspeed; if (child->type == HWLOC_OBJ_BRIDGE && child->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_PCI) speed = child->attr->bridge.upstream.pci.linkspeed; if (loutput->show_attrs[HWLOC_OBJ_BRIDGE] && speed != 0.) { char text[4]; if (speed >= 10.) snprintf(text, sizeof(text), "%.0f", child->attr->pcidev.linkspeed); else snprintf(text, sizeof(text), "%0.1f", child->attr->pcidev.linkspeed); methods->text(loutput, &style.t2, fontsize, depth-1, x + 3*gridsize, ymid - BRIDGE_HEIGHT/2, text); } } } methods->line(loutput, &BLACK_COLOR, depth-1, x+2*gridsize, ymin, x+2*gridsize, ymax); /* Draw sublevels for real */ draw_children(loutput, level, depth-1, x, y); } } }