Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 17999) +++ trunk/src/board.c (revision 18000) @@ -39,6 +39,7 @@ #include "event.h" #include "safe_fs.h" #include "tool.h" +#include "layer.h" pcb_board_t *PCB; @@ -161,7 +162,7 @@ /* copy default settings */ for (i = 0; i < PCB_MAX_LAYER; i++) - ptr->Data->Layer[i].meta.real.color = conf_core.appearance.color.layer[i]; + ptr->Data->Layer[i].meta.real.color = pcb_layer_default_color(i, pcb_layer_flags(ptr, i)); } typedef struct { Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 17999) +++ trunk/src/layer.c (revision 18000) @@ -484,6 +484,20 @@ ar->link.parent = &dst->Arc.lst; } +const char *pcb_layer_default_color(int idx, pcb_layer_type_t lyt) +{ + const int clrs = sizeof(conf_core.appearance.color.layer) / sizeof(conf_core.appearance.color.layer[0]); + + if (lyt & PCB_LYT_MASK) + return conf_core.appearance.color.mask; + if (lyt & PCB_LYT_PASTE) + return conf_core.appearance.color.paste; + if (lyt & PCB_LYT_SILK) + return conf_core.appearance.color.element; + + return conf_core.appearance.color.layer[idx % clrs]; +} + /* Initialize a new layer with safe initial values */ static void layer_init(pcb_board_t *pcb, pcb_layer_t *lp, pcb_layer_id_t idx, pcb_layergrp_id_t gid, pcb_data_t *parent) { @@ -491,7 +505,7 @@ lp->meta.real.grp = gid; lp->meta.real.vis = 1; lp->name = pcb_strdup("New Layer"); - lp->meta.real.color = conf_core.appearance.color.layer[idx]; + lp->meta.real.color = pcb_layer_default_color(idx, (gid >= 0) ? pcb->LayerGroups.grp[gid].ltype : 0); if ((gid >= 0) && (pcb->LayerGroups.grp[gid].len == 0)) { /*When adding the first layer in a group, set up comb flags automatically */ switch((pcb->LayerGroups.grp[gid].ltype) & PCB_LYT_ANYTHING) { case PCB_LYT_MASK: lp->comb = PCB_LYC_AUTO | PCB_LYC_SUB; break; Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 17999) +++ trunk/src/layer.h (revision 18000) @@ -249,6 +249,9 @@ /* Return the name of a layer (resolving the true name of virtual layers too) */ const char *pcb_layer_name(pcb_data_t *data, pcb_layer_id_t id); +/* Return the default color for a new layer from the config */ +const char *pcb_layer_default_color(int idx, pcb_layer_type_t lyt); + /* Rename an existing layer by idx */ int pcb_layer_rename(pcb_data_t *data, pcb_layer_id_t layer, const char *lname);