Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 11010) +++ trunk/src/draw.c (revision 11011) @@ -740,12 +740,20 @@ } } -void pcb_term_label_setup(pcb_text_t *text, pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab) +static const char *lab_with_intconn(int intconn, const char *lab, char *buff, int bufflen) { + if (intconn <= 0) + return lab; + pcb_snprintf(buff, bufflen, "%s[%d]", lab, intconn); + return buff; +} + +static void pcb_term_label_setup_(pcb_text_t *text, pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *label) +{ pcb_bool flip_x = conf_core.editor.view.flip_x; pcb_bool flip_y = conf_core.editor.view.flip_y; - text->TextString = (char *)lab; + text->TextString = (char *)label; text->Flags = (flip_x ^ flip_y) ? pcb_flag_make(PCB_FLAG_ONSOLDER) : pcb_no_flags(); text->X = x; text->Y = y; @@ -777,13 +785,26 @@ } } -void pcb_term_label_draw(pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab) +void pcb_term_label_setup(pcb_text_t *text, pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab, int intconn) { + const char *label; + char buff[128]; + + label = lab_with_intconn(intconn, lab, buff, sizeof(buff)); + pcb_term_label_setup_(text, x, y, scale, vert, centered, label); +} + + +void pcb_term_label_draw(pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab, int intconn) +{ pcb_text_t text; + const char *label; + char buff[128]; + label = lab_with_intconn(intconn, lab, buff, sizeof(buff)); pcb_gui->set_color(Output.fgGC, conf_core.appearance.color.pin_name); - pcb_term_label_setup(&text, x, y, scale, vert, centered, lab); + pcb_term_label_setup_(&text, x, y, scale, vert, centered, label); if (pcb_gui->gui) pcb_draw_doing_pinout++; Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 11010) +++ trunk/src/draw.h (revision 11011) @@ -111,11 +111,11 @@ int pcb_draw_layergrp_is_comp(pcb_layergrp_t *g); /* Draw (render) a terminal label */ -void pcb_term_label_draw(pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab); +void pcb_term_label_draw(pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab, int intconn); /* Similar to pcb_term_label_draw(), but doesn't draw only sets up text with its bounding box */ -void pcb_term_label_setup(pcb_text_t *text, pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab); +void pcb_term_label_setup(pcb_text_t *text, pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab, int intconn); /* Schedule an object to be called again at the end for drawing its labels Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 11010) +++ trunk/src/obj_arc.c (revision 11011) @@ -775,7 +775,7 @@ pcb_bool_t vert; arc_label_pos(arc, &x0, &y0, &vert); - pcb_term_label_setup(&text, x0, y0, 100.0, vert, pcb_true, arc->term); + pcb_term_label_setup(&text, x0, y0, 100.0, vert, pcb_true, arc->term, PCB_FLAG_INTCONN_GET(arc)); pcb_draw_invalidate(&text); } } @@ -787,7 +787,7 @@ pcb_bool_t vert; arc_label_pos(arc, &x0, &y0, &vert); - pcb_term_label_draw(x0, y0, 100.0, vert, pcb_true, arc->term); + pcb_term_label_draw(x0, y0, 100.0, vert, pcb_true, arc->term, PCB_FLAG_INTCONN_GET(arc)); } } Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 11010) +++ trunk/src/obj_line.c (revision 11011) @@ -910,7 +910,7 @@ if (line->term != NULL) { pcb_text_t text; pcb_term_label_setup(&text, (line->Point1.X + line->Point2.X)/2, (line->Point1.Y + line->Point2.Y)/2, - 100.0, is_line_term_vert(line), pcb_true, line->term); + 100.0, is_line_term_vert(line), pcb_true, line->term, PCB_FLAG_INTCONN_GET(line)); pcb_draw_invalidate(&text); } } @@ -919,7 +919,7 @@ { if (line->term != NULL) pcb_term_label_draw((line->Point1.X + line->Point2.X)/2, (line->Point1.Y + line->Point2.Y)/2, - 100.0, is_line_term_vert(line), pcb_true, line->term); + 100.0, is_line_term_vert(line), pcb_true, line->term, PCB_FLAG_INTCONN_GET(line)); } Index: trunk/src/obj_pinvia.c =================================================================== --- trunk/src/obj_pinvia.c (revision 11010) +++ trunk/src/obj_pinvia.c (revision 11011) @@ -976,7 +976,6 @@ pcb_box_t box; pcb_bool vert; pcb_coord_t x_off, y_off; - char buff[128]; const char *pn; double scale; pcb_bool flip_x = conf_core.editor.view.flip_x; @@ -996,11 +995,6 @@ pn = "n/a"; } - if (PCB_FLAG_INTCONN_GET(pv) > 0) - pcb_snprintf(buff, sizeof(buff), "%s[%d]", pn, PCB_FLAG_INTCONN_GET(pv)); - else - strcpy(buff, pn); - vert = PCB_FLAG_TEST(PCB_FLAG_EDGE2, pv); if (vert) { x_off = -pv->Thickness / 2 + conf_core.appearance.pinout.text_offset_y; @@ -1018,7 +1012,7 @@ /* Set font height to approx 56% of pin thickness */ scale = 56 * pv->Thickness / PCB_FONT_CAPHEIGHT; - pcb_term_label_draw(box.X1, box.Y1, scale, vert, pcb_false, buff); + pcb_term_label_draw(box.X1, box.Y1, scale, vert, pcb_false, pn, PCB_FLAG_INTCONN_GET(pv)); } static void _draw_pv(pcb_pin_t *pv, pcb_bool draw_hole) Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 11010) +++ trunk/src/obj_poly.c (revision 11011) @@ -836,7 +836,7 @@ if (poly->term != NULL) { pcb_text_t text; pcb_term_label_setup(&text, (poly->BoundingBox.X1 + poly->BoundingBox.X2)/2, (poly->BoundingBox.Y1 + poly->BoundingBox.Y2)/2, - 100.0, is_poly_term_vert(poly), pcb_true, poly->term); + 100.0, is_poly_term_vert(poly), pcb_true, poly->term, PCB_FLAG_INTCONN_GET(poly)); pcb_draw_invalidate(&text); } } @@ -845,7 +845,7 @@ { if (poly->term != NULL) pcb_term_label_draw((poly->BoundingBox.X1 + poly->BoundingBox.X2)/2, (poly->BoundingBox.Y1 + poly->BoundingBox.Y2)/2, - 100.0, is_poly_term_vert(poly), pcb_true, poly->term); + 100.0, is_poly_term_vert(poly), pcb_true, poly->term, PCB_FLAG_INTCONN_GET(poly)); } void pcb_poly_draw_(pcb_polygon_t *polygon, const pcb_box_t *drawn_area, int allow_term_gfx) Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 11010) +++ trunk/src/obj_subc.c (revision 11011) @@ -955,7 +955,7 @@ pcb_gui->set_draw_xor(Output.fgGC, 0); if (subc->refdes != NULL) - pcb_term_label_draw(bb->X1, bb->Y1, 50.0, 0, 0, subc->refdes); + pcb_term_label_draw(bb->X1, bb->Y1, 50.0, 0, 0, subc->refdes, PCB_FLAG_INTCONN_GET(subc)); return PCB_R_DIR_FOUND_CONTINUE; } Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 11010) +++ trunk/src/obj_text.c (revision 11011) @@ -743,7 +743,7 @@ if (txt->term != NULL) { pcb_text_t text; pcb_term_label_setup(&text, (txt->BoundingBox.X1 + txt->BoundingBox.X2)/2, (txt->BoundingBox.Y1 + txt->BoundingBox.Y2)/2, - 100.0, is_text_term_vert(txt), pcb_true, txt->term); + 100.0, is_text_term_vert(txt), pcb_true, txt->term, PCB_FLAG_INTCONN_GET(txt)); pcb_draw_invalidate(&text); } } @@ -752,7 +752,7 @@ { if (text->term != NULL) pcb_term_label_draw((text->BoundingBox.X1 + text->BoundingBox.X2)/2, (text->BoundingBox.Y1 + text->BoundingBox.Y2)/2, - 100.0, is_text_term_vert(text), pcb_true, text->term); + 100.0, is_text_term_vert(text), pcb_true, text->term, PCB_FLAG_INTCONN_GET(text)); }