diff --git a/src/draw.c b/src/draw.c index 5645c617..c7fb90a9 100644 --- a/src/draw.c +++ b/src/draw.c @@ -664,8 +664,8 @@ void draw_symbol(int what,int c, int n,int layer,short tmp_flip, short rot, what = NOW; disabled = 1; } - if( (xctx->inst[n].flags & HIDE_INST) || - (xctx->hide_symbols==1 && (xctx->inst[n].ptr+ xctx->sym)->prop_ptr && + if( (xctx->inst[n].flags & HIDE_INST) || ((xctx->inst[n].ptr + xctx->sym)->flags & HIDE_INST) || + (xctx->hide_symbols==1 && (xctx->inst[n].ptr + xctx->sym)->type && !strcmp( (xctx->inst[n].ptr+ xctx->sym)->type, "subcircuit") ) || (xctx->hide_symbols == 2) ) { hide = 1; @@ -720,7 +720,8 @@ void draw_symbol(int what,int c, int n,int layer,short tmp_flip, short rot, y0=xctx->inst[n].y0 + yoffset; symptr = (xctx->inst[n].ptr+ xctx->sym); - if( (layer != PINLAYER && !xctx->enable_layer[layer]) ) goto draw_texts; + if(layer == cadlayers) goto draw_texts; + if( (layer != PINLAYER && !xctx->enable_layer[layer]) ) return; if(!hide) { for(j=0;j< symptr->lines[layer]; ++j) @@ -821,7 +822,7 @@ void draw_symbol(int what,int c, int n,int layer,short tmp_flip, short rot, draw_texts: - if(xctx->sym_txt && !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers - 1)) { + if(xctx->sym_txt && !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers)) { if(c != layer) c_for_text = c; else if(xctx->inst[n].flags & PIN_OR_LABEL) c_for_text = TEXTWIRELAYER; else c_for_text = TEXTLAYER; @@ -921,7 +922,7 @@ void draw_temp_symbol(int what, GC gc, int n,int layer,short tmp_flip, short rot if(xctx->inst[n].ptr == -1) return; if(!has_x) return; - if( (xctx->inst[n].flags & HIDE_INST) || + if( (xctx->inst[n].flags & HIDE_INST) || ((xctx->inst[n].ptr + xctx->sym)->flags & HIDE_INST) || (xctx->hide_symbols==1 && (xctx->inst[n].ptr+ xctx->sym)->prop_ptr && !strcmp( (xctx->inst[n].ptr+ xctx->sym)->type, "subcircuit") ) || (xctx->hide_symbols == 2) ) { @@ -5197,7 +5198,11 @@ void draw(void) ((c==cadlayers - 1) && symptr->texts) ) { if(c == 0 || c == cadlayers - 1 || draw_layer) { - draw_symbol(ADD, cc, i,c, 0, 0, 0.0, 0.0); /* ... then draw current layer */ + draw_symbol(ADD, cc, i, c, 0, 0, 0.0, 0.0); /* ... then draw current layer */ + if(c == cadlayers - 1) { + if(cc == c) draw_symbol(ADD, c + 1, i, c + 1, 0, 0, 0.0, 0.0); /* ... draw texts */ + else draw_symbol(ADD, cc , i, c + 1, 0, 0, 0.0, 0.0); /* ... draw texts */ + } } } } diff --git a/src/hilight.c b/src/hilight.c index bd388686..4fc02baa 100644 --- a/src/hilight.c +++ b/src/hilight.c @@ -2224,7 +2224,8 @@ void draw_hilight_net(int on_window) if( c==0 || /*draw_symbol call is needed on layer 0 to avoid redundant work (outside check) */ symptr->lines[c] || symptr->rects[c] || symptr->arcs[c] || symptr->polygons[c] || ((c == cadlayers - 1) && symptr->texts)) { - draw_symbol(ADD, col, i,c,0,0,0.0,0.0); + draw_symbol(ADD, col, i, c, 0, 0, 0.0, 0.0); + if(c == cadlayers - 1) draw_symbol(ADD, col, i, c + 1, 0, 0, 0.0, 0.0); /* draw texts */ } filledrect(col, END, 0.0, 0.0, 0.0, 0.0, 2, -1, -1); /* last parameter must be 2! */ drawarc(col, END, 0.0, 0.0, 0.0, 0.0, 0.0, 0, 0); diff --git a/src/psprint.c b/src/psprint.c index aaaca7c5..1fdd6bca 100644 --- a/src/psprint.c +++ b/src/psprint.c @@ -919,17 +919,16 @@ static void ps_draw_symbol(int c, int n,int layer, int what, short tmp_flip, sho if(shorted_instance(n, lvs_ignore)) { c = PINLAYER; - what = NOW; disabled = 2; } else if(xctx->inst[n].flags & IGNORE_INST) { c = GRIDLAYER; - what = NOW; disabled = 1; } if(xctx->inst[n].color != -10000) c = get_color(xctx->inst[n].color); - if( (xctx->inst[n].flags & HIDE_INST) || - ((xctx->hide_symbols==1 && (xctx->inst[n].ptr+ xctx->sym)->prop_ptr && + + if( (xctx->inst[n].flags & HIDE_INST) || ((xctx->inst[n].ptr + xctx->sym)->flags & HIDE_INST) || + ((xctx->hide_symbols==1 && (xctx->inst[n].ptr + xctx->sym)->type && !strcmp( (xctx->inst[n].ptr+ xctx->sym)->type, "subcircuit") )) || (xctx->hide_symbols == 2) ) { hide = 1; @@ -996,7 +995,7 @@ static void ps_draw_symbol(int c, int n,int layer, int what, short tmp_flip, sho } else if(xctx->inst[n].flags&1) { - dbg(1, "draw_symbol(): skipping inst %d\n", n); + dbg(1, "ps_draw_symbol(): skipping inst %d\n", n); return; } flip = xctx->inst[n].flip; @@ -1007,7 +1006,8 @@ static void ps_draw_symbol(int c, int n,int layer, int what, short tmp_flip, sho y0=xctx->inst[n].y0 + yoffset; symptr = (xctx->inst[n].ptr+ xctx->sym); - if( (layer != PINLAYER && !xctx->enable_layer[layer]) ) goto draw_texts; + if(layer == cadlayers) goto draw_texts; + if( (layer != PINLAYER && !xctx->enable_layer[layer]) ) return; if(!hide) { if(symptr->lines[layer] || symptr->polygons[layer] || symptr->arcs[layer]) { @@ -1108,7 +1108,7 @@ static void ps_draw_symbol(int c, int n,int layer, int what, short tmp_flip, sho } /* if( (!hide && xctx->enable_layer[layer]) || ... */ draw_texts: - if(xctx->sym_txt && !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers - 1)) { + if(xctx->sym_txt && !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers)) { const char *txtptr; if(c != layer) c_for_text = c; else if(xctx->inst[n].flags & PIN_OR_LABEL) c_for_text = TEXTWIRELAYER; @@ -1485,7 +1485,10 @@ void create_ps(char **psfile, int what, int fullzoom, int eps) /* bring outside previous for(c=0...) loop since ps_embedded_graph() calls ps_draw_symbol() */ for(c=0;cinstances; ++i) { - ps_draw_symbol(c, i,c,what,0,0,0.0,0.0); + ps_draw_symbol(c, i, c, what, 0,0, 0.0, 0.0); + if(c == cadlayers - 1) { + ps_draw_symbol(c + 1 , i, c + 1, what, 0, 0, 0.0, 0.0); /* ... draw texts */ + } } } prepare_netlist_structs(0); /* NEEDED: data was cleared by trim_wires() */ diff --git a/src/svgdraw.c b/src/svgdraw.c index 66257550..d6b0397c 100644 --- a/src/svgdraw.c +++ b/src/svgdraw.c @@ -652,8 +652,8 @@ static void svg_draw_symbol(int c, int n,int layer,short tmp_flip, short rot, } if(xctx->inst[n].color != -10000) c = get_color(xctx->inst[n].color); - if( (xctx->inst[n].flags & HIDE_INST) || - ((xctx->hide_symbols==1 && (xctx->inst[n].ptr+ xctx->sym)->prop_ptr && + if( (xctx->inst[n].flags & HIDE_INST) || ((xctx->inst[n].ptr + xctx->sym)->flags & HIDE_INST) || + ((xctx->hide_symbols==1 && (xctx->inst[n].ptr + xctx->sym)->type && !strcmp( (xctx->inst[n].ptr+ xctx->sym)->type, "subcircuit") )) || (xctx->hide_symbols == 2) ) { hide = 1; @@ -694,7 +694,8 @@ static void svg_draw_symbol(int c, int n,int layer,short tmp_flip, short rot, y0=xctx->inst[n].y0 + yoffset; symptr = (xctx->inst[n].ptr+ xctx->sym); - if( (layer != PINLAYER && !xctx->enable_layer[layer]) ) goto draw_texts; + if(layer == cadlayers) goto draw_texts; + if( (layer != PINLAYER && !xctx->enable_layer[layer]) ) return; if(!hide) { for(j=0;j< symptr->lines[layer]; ++j) { @@ -787,7 +788,7 @@ static void svg_draw_symbol(int c, int n,int layer,short tmp_flip, short rot, } draw_texts: - if( xctx->sym_txt && !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers - 1)) { + if( xctx->sym_txt && !(xctx->inst[n].flags & HIDE_SYMBOL_TEXTS) && (layer == cadlayers)) { const char *txtptr; if(c != layer) c_for_text = c; else if(xctx->inst[n].flags & PIN_OR_LABEL) c_for_text = TEXTWIRELAYER; @@ -805,7 +806,7 @@ static void svg_draw_symbol(int c, int n,int layer,short tmp_flip, short rot, ROTATION(rot, flip, 0.0,0.0,text.x0,text.y0,x1,y1); textlayer = c_for_text; /* do not allow custom text color on hilighted instances */ - if(disabled == 1) textlayer = GRIDLAYER; + if(disabled == 1) textlayer = GRIDLAYER; else if(disabled == 2) textlayer = PINLAYER; else if( xctx->inst[n].color == -10000) { int lay; @@ -1077,6 +1078,9 @@ void svg_draw(void) } for(i=0;iinstances; ++i) { svg_draw_symbol(c,i,c,0,0,0.0,0.0); + if(c == cadlayers - 1) { + svg_draw_symbol(c + 1 , i, c + 1, 0, 0, 0.0, 0.0); /* ... draw texts */ + } } } prepare_netlist_structs(0); /* NEEDED: data was cleared by trim_wires() */