Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 10736) +++ trunk/src/draw.c (revision 10737) @@ -702,22 +702,42 @@ } } -void pcb_term_label_draw(pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, const char *lab) +static void label_setup(pcb_text_t *text, pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, const char *lab) { - pcb_text_t text; pcb_bool flip_x = conf_core.editor.view.flip_x; pcb_bool flip_y = conf_core.editor.view.flip_y; pcb_gui->set_color(Output.fgGC, conf_core.appearance.color.pin_name); - text.TextString = (char *)lab; - text.Flags = (flip_x ^ flip_y) ? pcb_flag_make(PCB_FLAG_ONSOLDER) : pcb_no_flags(); - text.X = x; - text.Y = y; - text.fid = 0; - text.Scale = scale; - text.Direction = (vert ? 1 : 0) + (flip_x ? 2 : 0); + text->TextString = (char *)lab; + text->Flags = (flip_x ^ flip_y) ? pcb_flag_make(PCB_FLAG_ONSOLDER) : pcb_no_flags(); + text->X = x; + text->Y = y; + text->fid = 0; + text->Scale = scale; + text->Direction = (vert ? 1 : 0) + (flip_x ? 2 : 0); +} +void pcb_term_label_draw(pcb_coord_t x, pcb_coord_t y, double scale, pcb_bool vert, pcb_bool centered, const char *lab) +{ + pcb_text_t text; + + label_setup(&text, x, y, scale, vert, lab); + + if (centered) { + pcb_coord_t dx, dy; + pcb_text_bbox(NULL, &text); + dx = (text.BoundingBox.X2 - text.BoundingBox.X1) / 2; + dy = (text.BoundingBox.Y2 - text.BoundingBox.Y1) / 2; + text.X -= dx; + text.Y -= dy; + text.BoundingBox.X1 -= dx; + text.BoundingBox.X2 -= dx; + text.BoundingBox.Y1 -= dy; + text.BoundingBox.Y2 -= dy; + pcb_text_bbox(NULL, &text); + } + if (pcb_gui->gui) pcb_draw_doing_pinout++; pcb_text_draw(&text, 0); Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 10736) +++ trunk/src/draw.h (revision 10737) @@ -111,7 +111,7 @@ 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, 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); /* Schedule an object to be called again at the end for drawing its labels on top of everything. */ Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 10736) +++ trunk/src/obj_line.c (revision 10737) @@ -895,7 +895,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, 0, line->term); + 100.0, pcb_false, pcb_true, line->term); } Index: trunk/src/obj_pinvia.c =================================================================== --- trunk/src/obj_pinvia.c (revision 10736) +++ trunk/src/obj_pinvia.c (revision 10737) @@ -1010,7 +1010,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, buff); + pcb_term_label_draw(box.X1, box.Y1, scale, vert, pcb_false, buff); } static void _draw_pv(pcb_pin_t *pv, pcb_bool draw_hole)