Index: trunk/src/obj_arc.c =================================================================== --- trunk/src/obj_arc.c (revision 14914) +++ trunk/src/obj_arc.c (revision 14915) @@ -890,8 +890,12 @@ if (PCB_FLAG_TEST(PCB_FLAG_WARN, arc)) color = conf_core.appearance.color.warn; else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED | PCB_FLAG_FOUND, arc)) { - if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc)) - color = layer->meta.real.selected_color; + if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, arc)) { + if (layer->is_bound) + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 1); + else + color = layer->meta.real.selected_color; + } else color = conf_core.appearance.color.connected; } @@ -899,7 +903,7 @@ color = (arc->override_color); } else if (layer->is_bound) - PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer); + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 0); else color = layer->meta.real.color; Index: trunk/src/obj_common.h =================================================================== --- trunk/src/obj_common.h (revision 14914) +++ trunk/src/obj_common.h (revision 14915) @@ -174,8 +174,9 @@ /* set const char *dst to a color, depending on the bound layer type: top silk and copper get the color of the first crresponding layer - from current PCB, the rest get the far-side color */ -#define PCB_OBJ_COLOR_ON_BOUND_LAYER(dst, layer) \ + from current PCB, the rest get the far-side color; + set the selected color if sel is true */ +#define PCB_OBJ_COLOR_ON_BOUND_LAYER(dst, layer, sel) \ do { \ if (layer->meta.bound.type & PCB_LYT_TOP) { \ pcb_layer_id_t lid = -1; \ @@ -182,7 +183,10 @@ pcb_layergrp_t *g; \ pcb_layergrp_id_t grp = -1; \ if (layer->meta.bound.type & PCB_LYT_SILK) { \ - dst = conf_core.appearance.color.element; \ + if (sel) \ + dst = conf_core.appearance.color.element_selected; \ + else \ + dst = conf_core.appearance.color.element; \ break; \ } \ else if (layer->meta.bound.type & PCB_LYT_COPPER) \ @@ -191,11 +195,17 @@ if ((g != NULL) && (g->len > 0)) \ lid = g->lid[0]; \ if ((lid >= 0) && (lid <= PCB_MAX_LAYER)) { \ - dst = conf_core.appearance.color.layer[lid]; \ + if (sel) \ + dst = conf_core.appearance.color.layer_selected[lid]; \ + else \ + dst = conf_core.appearance.color.layer[lid]; \ break; \ } \ } \ - dst = conf_core.appearance.color.invisible_objects; \ + if (sel) \ + dst = conf_core.appearance.color.element_selected; \ + else \ + dst = conf_core.appearance.color.invisible_objects; \ } while(0) /* check if an object has clearance to polygon */ Index: trunk/src/obj_line.c =================================================================== --- trunk/src/obj_line.c (revision 14914) +++ trunk/src/obj_line.c (revision 14915) @@ -1033,8 +1033,12 @@ if (PCB_FLAG_TEST(PCB_FLAG_WARN, line)) color = conf_core.appearance.color.warn; else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED | PCB_FLAG_FOUND, line)) { - if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, line)) - color = layer->meta.real.selected_color; + if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, line)) { + if (layer->is_bound) + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 1); + else + color = layer->meta.real.selected_color; + } else color = conf_core.appearance.color.connected; } @@ -1042,7 +1046,7 @@ color = (line->override_color); } else if (layer->is_bound) - PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer); + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 0); else color = layer->meta.real.color; Index: trunk/src/obj_poly.c =================================================================== --- trunk/src/obj_poly.c (revision 14914) +++ trunk/src/obj_poly.c (revision 14915) @@ -1069,8 +1069,12 @@ if (PCB_FLAG_TEST(PCB_FLAG_WARN, polygon)) color = conf_core.appearance.color.warn; - else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon)) - color = layer->meta.real.selected_color; + else if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, polygon)) { + if (layer->is_bound) + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 1); + else + color = layer->meta.real.selected_color; + } else if (PCB_FLAG_TEST(PCB_FLAG_FOUND, polygon)) color = conf_core.appearance.color.connected; else if (PCB_FLAG_TEST(PCB_FLAG_ONPOINT, polygon)) { @@ -1082,7 +1086,7 @@ color = (polygon->override_color); } else if (layer->is_bound) - PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer); + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 0); else color = layer->meta.real.color; pcb_gui->set_color(pcb_draw_out.fgGC, color); Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 14914) +++ trunk/src/obj_text.c (revision 14915) @@ -934,14 +934,21 @@ int min_silk_line; unsigned int flg = 0; - if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, text)) - pcb_gui->set_color(pcb_draw_out.fgGC, layer->meta.real.selected_color); + if (PCB_FLAG_TEST(PCB_FLAG_SELECTED, text)) { + if (layer->is_bound) { + const char *color; + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 1); + pcb_gui->set_color(pcb_draw_out.fgGC, color); + } + else + pcb_gui->set_color(pcb_draw_out.fgGC, layer->meta.real.selected_color); + } else if (PCB_HAS_COLOROVERRIDE(text)) { pcb_gui->set_color(pcb_draw_out.fgGC, text->override_color); } else if (layer->is_bound) { const char *color; - PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer); + PCB_OBJ_COLOR_ON_BOUND_LAYER(color, layer, 0); pcb_gui->set_color(pcb_draw_out.fgGC, color); } else