Index: trunk/src/draw.c =================================================================== --- trunk/src/draw.c (revision 10964) +++ trunk/src/draw.c (revision 10965) @@ -454,6 +454,10 @@ info.layer = Layer; lflg = pcb_layer_flags_(PCB, Layer); + if (PCB_LAYERFLG_ON_VISIBLE_SIDE(lflg)) + Output.active_padGC = Output.padGC; + else + Output.active_padGC = Output.backpadGC; if (lflg & PCB_LYT_COPPER) { /* print the non-clearing polys */ @@ -465,7 +469,7 @@ } if (conf_core.editor.check_planes) - return; + goto out; if (lflg & PCB_LYT_COPPER) { /* draw all visible lines this layer - with terminal gfx */ @@ -497,6 +501,9 @@ pcb_gui->set_line_width(Output.fgGC, PCB->minWid); pcb_gui->draw_rect(Output.fgGC, 0, 0, PCB->MaxWidth, PCB->MaxHeight); } + + out:; + Output.active_padGC = NULL; } /* --------------------------------------------------------------------------- @@ -637,6 +644,7 @@ pcb_gui = hid; Output.fgGC = pcb_gui->make_gc(); Output.padGC = pcb_gui->make_gc(); + Output.backpadGC = pcb_gui->make_gc(); Output.padselGC = pcb_gui->make_gc(); Output.bgGC = pcb_gui->make_gc(); Output.pmGC = pcb_gui->make_gc(); @@ -644,6 +652,7 @@ hid->set_color(Output.pmGC, "erase"); hid->set_color(Output.bgGC, "drill"); hid->set_color(Output.padGC, conf_core.appearance.color.pin); + hid->set_color(Output.backpadGC, conf_core.appearance.color.invisible_objects); hid->set_color(Output.padselGC, conf_core.appearance.color.pin_selected); return old_gui; @@ -653,6 +662,7 @@ { pcb_gui->destroy_gc(Output.fgGC); pcb_gui->destroy_gc(Output.padGC); + pcb_gui->destroy_gc(Output.backpadGC); pcb_gui->destroy_gc(Output.padselGC); pcb_gui->destroy_gc(Output.bgGC); pcb_gui->destroy_gc(Output.pmGC); @@ -771,3 +781,4 @@ if (pcb_gui->gui) pcb_draw_doing_pinout--; } + Index: trunk/src/draw.h =================================================================== --- trunk/src/draw.h (revision 10964) +++ trunk/src/draw.h (revision 10965) @@ -38,7 +38,7 @@ typedef struct { /* holds information about output window */ pcb_hid_gc_t bgGC, /* background and foreground; */ fgGC, /* changed from some routines */ - padGC, padselGC, /* pads are drawn with this gc */ + active_padGC, backpadGC, padGC, padselGC, /* pads are drawn with this gc */ pmGC; /* depth 1 pixmap GC to store clip */ } pcb_output_t; Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 10964) +++ trunk/src/obj_arc.c (revision 10965) @@ -801,7 +801,7 @@ if (!conf_core.editor.thin_draw) { if ((arc->term != NULL) && (allow_term_gfx) && !PCB_FLAG_TEST(PCB_FLAG_FOUND, arc) && !PCB_FLAG_TEST(PCB_FLAG_WARN, arc)) { - pcb_hid_gc_t gc = PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc) ? Output.padselGC : Output.padGC; + pcb_hid_gc_t gc = PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc) ? Output.padselGC : Output.active_padGC; pcb_gui->set_line_width(gc, arc->Thickness); pcb_gui->draw_arc(gc, arc->X, arc->Y, arc->Width, arc->Height, arc->StartAngle, arc->Delta); pcb_gui->set_line_width(Output.fgGC, arc->Thickness/4); Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 10964) +++ trunk/src/obj_line.c (revision 10965) @@ -929,7 +929,7 @@ pcb_gui->set_line_cap(Output.fgGC, Trace_Cap); if (!conf_core.editor.thin_draw) { if ((line->term != NULL) && (allow_term_gfx) && !PCB_FLAG_TEST(PCB_FLAG_FOUND, line) && !PCB_FLAG_TEST(PCB_FLAG_WARN, line)) { - pcb_hid_gc_t gc = PCB_FLAG_TEST(PCB_FLAG_SELECTED, line) ? Output.padselGC : Output.padGC; + pcb_hid_gc_t gc = PCB_FLAG_TEST(PCB_FLAG_SELECTED, line) ? Output.padselGC : Output.active_padGC; pcb_gui->set_line_width(gc, line->Thickness); pcb_gui->draw_line(gc, line->Point1.X, line->Point1.Y, line->Point2.X, line->Point2.Y); pcb_gui->set_line_width(Output.fgGC, line->Thickness/4); Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 10964) +++ trunk/src/obj_poly.c (revision 10965) @@ -859,7 +859,7 @@ pcb_vnode_t *n, *head; int i; - pcb_hid_gc_t gc = PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon) ? Output.padselGC : Output.padGC; + pcb_hid_gc_t gc = PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon) ? Output.padselGC : Output.active_padGC; pcb_gui->fill_pcb_polygon(gc, polygon, drawn_area); head = &polygon->Clipped->contours->head;