Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 10198) +++ trunk/src/draw.c (revision 10199) @@ -282,6 +282,9 @@ DrawEverything_holes(drawn_area); if (pcb_gui->gui) { + /* Draw pins' and pads' names */ + pcb_draw_ppv_names(PCB_SWAP_IDENT ? solder : component, drawn_area); + /* Draw element Marks */ if (PCB->PinOn) pcb_r_search(PCB->Data->element_tree, drawn_area, NULL, draw_element_mark_callback, NULL, NULL); @@ -383,6 +386,32 @@ pcb_r_search(PCB->Data->pin_tree, drawn_area, NULL, draw_hole_callback, NULL, NULL); } +/* --------------------------------------------------------------------------- + * Draws pins' and pads' names - Always draws for non-gui HIDs, + * otherwise drawing depends on PCB->PinOn and PCB->ViaOn + */ +void pcb_draw_ppv_names(pcb_layergrp_id_t group, const pcb_box_t * drawn_area) +{ + int side; + unsigned int gflg = pcb_layergrp_flags(PCB, group); + + if (PCB->PinOn || !pcb_gui->gui) { + /* draw element pins' names */ + pcb_r_search(PCB->Data->pin_tree, drawn_area, NULL, draw_pin_name_callback, NULL, NULL); + + /* draw element pads' names */ + if (gflg & PCB_LYT_TOP) { + side = PCB_COMPONENT_SIDE; + pcb_r_search(PCB->Data->pad_tree, drawn_area, NULL, draw_pad_name_callback, &side, NULL); + } + + if (gflg & PCB_LYT_BOTTOM) { + side = PCB_SOLDER_SIDE; + pcb_r_search(PCB->Data->pad_tree, drawn_area, NULL, draw_pad_name_callback, &side, NULL); + } + } +} + #include "draw_composite.c" #include "draw_ly_spec.c" Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 10198) +++ trunk/src/draw.h (revision 10199) @@ -83,6 +83,7 @@ void pcb_draw_layer(pcb_layer_t *, const pcb_box_t *); void pcb_erase_obj(int, void *, void *); void pcb_draw_ppv(pcb_layergrp_id_t group, const pcb_box_t * drawn_area); +void pcb_draw_ppv_names(pcb_layergrp_id_t group, const pcb_box_t * drawn_area); /*#define PCB_BBOX_DEBUG*/ Index: trunk/src/obj_pad.c =================================================================== --- trunk/src/obj_pad.c (revision 10198) +++ trunk/src/obj_pad.c (revision 10199) @@ -506,7 +506,7 @@ _draw_pad(Output.fgGC, pad, pcb_false, pcb_false); - if (pcb_draw_doing_pinout || PCB_FLAG_TEST(PCB_FLAG_DISPLAYNAME, pad)) + if (pcb_draw_doing_pinout) draw_pad_name(pad); } @@ -520,6 +520,18 @@ return PCB_R_DIR_FOUND_CONTINUE; } +pcb_r_dir_t draw_pad_name_callback(const pcb_box_t * b, void *cl) +{ + pcb_pad_t *pad = (pcb_pad_t *) b; + int *side = cl; + + if (PCB_ON_SIDE(pad, *side)) { + if (PCB_FLAG_TEST(PCB_FLAG_DISPLAYNAME, pad)) + draw_pad_name(pad); + } + return PCB_R_DIR_FOUND_CONTINUE; +} + pcb_r_dir_t clear_pad_callback(const pcb_box_t * b, void *cl) { pcb_pad_t *pad = (pcb_pad_t *) b; Index: trunk/src/obj_pad_draw.h =================================================================== --- trunk/src/obj_pad_draw.h (revision 10198) +++ trunk/src/obj_pad_draw.h (revision 10199) @@ -30,6 +30,7 @@ /* Include rtree.h for these */ #ifdef PCB_RTREE_H pcb_r_dir_t draw_pad_callback(const pcb_box_t * b, void *cl); +pcb_r_dir_t draw_pad_name_callback(const pcb_box_t * b, void *cl); pcb_r_dir_t clear_pad_callback(const pcb_box_t * b, void *cl); #endif Index: trunk/src/obj_pinvia.c =================================================================== --- trunk/src/obj_pinvia.c (revision 10198) +++ trunk/src/obj_pinvia.c (revision 10199) @@ -1013,8 +1013,8 @@ pcb_gui->thindraw_pcb_pv(Output.fgGC, Output.fgGC, pv, draw_hole, pcb_false); else pcb_gui->fill_pcb_pv(Output.fgGC, Output.bgGC, pv, draw_hole, pcb_false); - - if (!PCB_FLAG_TEST(PCB_FLAG_HOLE, pv) && PCB_FLAG_TEST(PCB_FLAG_DISPLAYNAME, pv)) + + if (!PCB_FLAG_TEST(PCB_FLAG_HOLE, pv) && pcb_draw_doing_pinout) _draw_pv_name(pv); } @@ -1030,6 +1030,18 @@ return PCB_R_DIR_FOUND_CONTINUE; } +void draw_pin_name(pcb_pin_t *pin) +{ + if (!PCB_FLAG_TEST(PCB_FLAG_HOLE, pin) && PCB_FLAG_TEST(PCB_FLAG_DISPLAYNAME, pin)) + _draw_pv_name(pin); +} + +pcb_r_dir_t draw_pin_name_callback(const pcb_box_t * b, void *cl) +{ + draw_pin_name((pcb_pin_t *) b); + return PCB_R_DIR_FOUND_CONTINUE; +} + pcb_r_dir_t clear_pin_callback(const pcb_box_t * b, void *cl) { pcb_pin_t *pin = (pcb_pin_t *) b; Index: trunk/src/obj_pinvia_draw.h =================================================================== --- trunk/src/obj_pinvia_draw.h (revision 10198) +++ trunk/src/obj_pinvia_draw.h (revision 10199) @@ -29,6 +29,7 @@ /* Include rtree.h for these */ #ifdef PCB_RTREE_H pcb_r_dir_t draw_pin_callback(const pcb_box_t * b, void *cl); +pcb_r_dir_t draw_pin_name_callback(const pcb_box_t * b, void *cl); pcb_r_dir_t clear_pin_callback(const pcb_box_t * b, void *cl); pcb_r_dir_t draw_via_callback(const pcb_box_t * b, void *cl); pcb_r_dir_t draw_hole_callback(const pcb_box_t * b, void *cl);