Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 17197) +++ trunk/src/draw.c (revision 17198) @@ -72,6 +72,7 @@ static void DrawLayerGroup(int, const pcb_box_t *, int); static void pcb_draw_obj_label(pcb_layergrp_id_t gid, pcb_any_obj_t *obj); static void pcb_draw_pstk_marks(const pcb_box_t *drawn_area); +static void pcb_draw_pstk_labels(const pcb_box_t *drawn_area); static void pcb_draw_pstk_holes(pcb_layergrp_id_t group, const pcb_box_t *drawn_area, pcb_pstk_draw_hole_t holetype); /* In draw_ly_spec.c: */ @@ -349,13 +350,20 @@ /* Draw subc Marks */ pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, pcb_draw_out.direct, drawn_area); pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, pcb_draw_out.direct, drawn_area); - + + pcb_gui->set_line_cap(pcb_draw_out.fgGC, Trace_Cap); + pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 1); + if (PCB->SubcOn) pcb_r_search(PCB->Data->subc_tree, drawn_area, NULL, draw_subc_mark_callback, NULL, NULL); - if (PCB->padstack_mark_on) + if ((PCB->padstack_mark_on) && (conf_core.appearance.padstack.cross_thick > 0)) { + pcb_gui->set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); pcb_draw_pstk_marks(drawn_area); + } + pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, pcb_draw_out.direct, drawn_area); /* Draw rat lines on top */ @@ -370,6 +378,14 @@ /* Draw pins' and pads' names */ pcb_gui->set_drawing_mode(PCB_HID_COMP_RESET, pcb_draw_out.direct, drawn_area); pcb_gui->set_drawing_mode(PCB_HID_COMP_POSITIVE, pcb_draw_out.direct, drawn_area); + pcb_gui->set_line_cap(pcb_draw_out.fgGC, Trace_Cap); + pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); + if (PCB->SubcOn) + pcb_r_search(PCB->Data->subc_tree, drawn_area, NULL, draw_subc_label_callback, NULL, NULL); + if (PCB->padstack_mark_on) { + pcb_gui->set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); + pcb_draw_pstk_labels(drawn_area); + } pcb_draw_pstk_names(conf_core.editor.show_solder_side ? solder : component, drawn_area); pcb_gui->set_drawing_mode(PCB_HID_COMP_FLUSH, pcb_draw_out.direct, drawn_area); } @@ -422,6 +438,13 @@ pcb_r_search(PCB->Data->padstack_tree, drawn_area, NULL, pcb_pstk_draw_mark_callback, &ctx, NULL); } +static void pcb_draw_pstk_labels(const pcb_box_t *drawn_area) +{ + pcb_pstk_draw_t ctx; + ctx.pcb = PCB; + pcb_r_search(PCB->Data->padstack_tree, drawn_area, NULL, pcb_pstk_draw_label_callback, &ctx, NULL); +} + static void pcb_draw_pstk_holes(pcb_layergrp_id_t group, const pcb_box_t *drawn_area, pcb_pstk_draw_hole_t holetype) { pcb_pstk_draw_t ctx; Index: trunk/src/obj_pstk.c =================================================================== --- trunk/src/obj_pstk.c (revision 17197) +++ trunk/src/obj_pstk.c (revision 17198) @@ -439,15 +439,17 @@ mark += proto->hdia/2; /* draw the cross using xor */ - if (conf_core.appearance.padstack.cross_thick > 0) { - set_ps_annot_color(pcb_draw_out.fgGC, ps); - pcb_gui->set_line_width(pcb_draw_out.fgGC, -conf_core.appearance.padstack.cross_thick); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 1); - pcb_gui->draw_line(pcb_draw_out.fgGC, ps->x-mark, ps->y, ps->x+mark, ps->y); - pcb_gui->draw_line(pcb_draw_out.fgGC, ps->x, ps->y-mark, ps->x, ps->y+mark); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); - } + set_ps_annot_color(pcb_draw_out.fgGC, ps); + pcb_gui->draw_line(pcb_draw_out.fgGC, ps->x-mark, ps->y, ps->x+mark, ps->y); + pcb_gui->draw_line(pcb_draw_out.fgGC, ps->x, ps->y-mark, ps->x, ps->y+mark); + return PCB_R_DIR_FOUND_CONTINUE; +} + +pcb_r_dir_t pcb_pstk_draw_label_callback(const pcb_box_t *b, void *cl) +{ + pcb_pstk_t *ps = (pcb_pstk_t *)b; + /* draw the label if enabled, after everything else is drawn */ if (ps->term != NULL) { if (pcb_draw_doing_pinout) @@ -458,7 +460,6 @@ return PCB_R_DIR_FOUND_CONTINUE; } - pcb_r_dir_t pcb_pstk_draw_hole_callback(const pcb_box_t *b, void *cl) { pcb_pstk_draw_t *ctx = cl; Index: trunk/src/obj_pstk_draw.h =================================================================== --- trunk/src/obj_pstk_draw.h (revision 17197) +++ trunk/src/obj_pstk_draw.h (revision 17198) @@ -58,6 +58,7 @@ void pcb_pstk_draw(pcb_pstk_t *ps, pcb_bool draw_hole); pcb_r_dir_t pcb_pstk_draw_mark_callback(const pcb_box_t *b, void *cl); +pcb_r_dir_t pcb_pstk_draw_label_callback(const pcb_box_t *b, void *cl); void pcb_pstk_draw_label(pcb_pstk_t *ps); void pcb_pstk_invalidate_erase(pcb_pstk_t *ps); void pcb_pstk_invalidate_draw(pcb_pstk_t *ps); Index: trunk/src/obj_subc.c =================================================================== --- trunk/src/obj_subc.c (revision 17197) +++ trunk/src/obj_subc.c (revision 17198) @@ -1531,24 +1531,24 @@ if (freq > 32) freq = 32; - pcb_gui->set_color(pcb_draw_out.fgGC, conf_core.appearance.color.element); - pcb_gui->set_line_cap(pcb_draw_out.fgGC, Trace_Cap); - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 1); pcb_gui->set_color(pcb_draw_out.fgGC, selected ? conf_core.appearance.color.subc_selected : conf_core.appearance.color.subc); pcb_subc_draw_origin(pcb_draw_out.fgGC, subc, 0, 0); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); if (freq >= 0) { - pcb_gui->set_line_width(pcb_draw_out.fgGC, 0); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 1); pcb_draw_dashed_line(pcb_draw_out.fgGC, bb->X1, bb->Y1, bb->X2, bb->Y1, freq); pcb_draw_dashed_line(pcb_draw_out.fgGC, bb->X1, bb->Y1, bb->X1, bb->Y2, freq); pcb_draw_dashed_line(pcb_draw_out.fgGC, bb->X2, bb->Y2, bb->X2, bb->Y1, freq); pcb_draw_dashed_line(pcb_draw_out.fgGC, bb->X2, bb->Y2, bb->X1, bb->Y2, freq); - pcb_gui->set_draw_xor(pcb_draw_out.fgGC, 0); } + return PCB_R_DIR_FOUND_CONTINUE; +} + +pcb_r_dir_t draw_subc_label_callback(const pcb_box_t *b, void *cl) +{ + pcb_subc_t *subc = (pcb_subc_t *) b; + pcb_box_t *bb = &subc->BoundingBox; + if (subc->refdes != NULL) { pcb_coord_t x0, y0, dx, dy; pcb_font_t *font = &PCB->fontkit.dflt; @@ -1600,7 +1600,6 @@ else pcb_term_label_draw(x0, y0, 50.0, 0, 0, subc->refdes, subc->intconn); } - return PCB_R_DIR_FOUND_CONTINUE; } Index: trunk/src/obj_subc.h =================================================================== --- trunk/src/obj_subc.h (revision 17197) +++ trunk/src/obj_subc.h (revision 17198) @@ -99,6 +99,7 @@ #include "rtree.h" pcb_r_dir_t draw_subc_mark_callback(const pcb_box_t *b, void *cl); +pcb_r_dir_t draw_subc_label_callback(const pcb_box_t *b, void *cl); void DrawSubc(pcb_subc_t *sc); void EraseSubc(pcb_subc_t *sc);