some fixes regarding restore of areas when hilights are present, move_objects and copy_objects(): ELEMENT move/copy out of cadlayer loop.

This commit is contained in:
Stefan Frederik 2021-01-08 03:09:29 +01:00
parent c806289bee
commit a7831ce972
6 changed files with 500 additions and 507 deletions

View File

@ -1665,9 +1665,9 @@ void new_wire(int what, double mx_snap, double my_snap)
xRect boundbox;
bbox(START , 0.0 , 0.0 , 0.0 , 0.0);
if( xctx->hilight_nets ) calc_drawing_bbox(&boundbox, 2);
bbox(ADD, boundbox.x1, boundbox.y1, boundbox.x2, boundbox.y2);
bbox(ADD, boundbox.x1, boundbox.y1, boundbox.x2, boundbox.y2); /* <<< remove ? */
}
if(show_pin_net_names) {
if(show_pin_net_names || xctx->hilight_nets) {
int_hash_lookup(xctx->node_redraw_table, xctx->wire[xctx->wires-1].node, 0, XINSERT_NOREPLACE);
find_inst_to_be_redrawn();
}

View File

@ -1046,6 +1046,7 @@ void update_symbol(const char *result, int x)
for(k=0;k<xctx->lastsel;k++) {
if(xctx->sel_array[k].type!=ELEMENT) continue;
i=xctx->sel_array[k].n;
type=xctx->sym[xctx->inst[i].ptr].type;
symbol_bbox(i, &xctx->inst[i].x1, &xctx->inst[i].y1, &xctx->inst[i].x2, &xctx->inst[i].y2);
bbox(ADD, xctx->inst[i].x1, xctx->inst[i].y1, xctx->inst[i].x2, xctx->inst[i].y2);
/* in case of net hilights, when changing 'lab' of net labels/pins we must re-run
@ -1053,9 +1054,9 @@ void update_symbol(const char *result, int x)
and drawn back unhilighted .
|
\|/ */
if(show_pin_net_names || xctx->hilight_nets) {
if((show_pin_net_names || xctx->hilight_nets) && type && IS_LABEL_OR_PIN(type)) {
prepare_netlist_structs(0);
for(j = 0; j < (xctx->inst[i].ptr + xctx->sym)->rects[PINLAYER]; j++) {
for(j = 0; j < (xctx->inst[i].ptr + xctx->sym)->rects[PINLAYER]; j++) { /* <<< only .node[0] ? */
if( xctx->inst[i].node && xctx->inst[i].node[j]) {
int_hash_lookup(xctx->node_redraw_table, xctx->inst[i].node[j], 0, XINSERT_NOREPLACE);
}
@ -1071,7 +1072,7 @@ void update_symbol(const char *result, int x)
}
}
}
find_inst_to_be_redrawn();
if(show_pin_net_names || xctx->hilight_nets) find_inst_to_be_redrawn();
/* redraw symbol with new props */
bbox(SET,0.0,0.0,0.0,0.0);
dbg(1, "update_symbol(): redrawing inst_ptr.txtprop string\n");

View File

@ -1422,10 +1422,7 @@ void draw_hilight_net(int on_window)
int col = get_color(xctx->inst[i].color);
symptr = (xctx->inst[i].ptr+ xctx->sym);
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] ||
symptr->lines[c] || symptr->rects[c] || symptr->arcs[c] || symptr->polygons[c] ||
((c==TEXTWIRELAYER || c==TEXTLAYER) && symptr->texts)) {
draw_symbol(ADD, col, i,c,0,0,0.0,0.0);
}

File diff suppressed because it is too large Load Diff

View File

@ -457,7 +457,7 @@ void wirecheck(int k) /* recursive routine */
int x1a, x2a, y1a, y2a;
struct wireentry *ptr2;
xWire * const wire = xctx->wire;
x1=wire[k].x1;
x2=wire[k].x2;
y1=wire[k].y1;

View File

@ -349,19 +349,19 @@ void delete(void)
char *type = (xctx->inst[n].ptr + xctx->sym)->type;
symbol_bbox(n, &xctx->inst[n].x1, &xctx->inst[n].y1, &xctx->inst[n].x2, &xctx->inst[n].y2 );
bbox(ADD, xctx->inst[n].x1, xctx->inst[n].y1, xctx->inst[n].x2, xctx->inst[n].y2 );
if(show_pin_net_names && type && IS_LABEL_OR_PIN(type) ) {
for(p = 0; p < (xctx->inst[n].ptr + xctx->sym)->rects[PINLAYER]; p++) {
if((xctx->hilight_nets || show_pin_net_names) && type && IS_LABEL_OR_PIN(type) ) {
for(p = 0; p < (xctx->inst[n].ptr + xctx->sym)->rects[PINLAYER]; p++) { /* only .node[0] ? */
if( xctx->inst[n].node && xctx->inst[n].node[p]) {
int_hash_lookup(xctx->node_redraw_table, xctx->inst[n].node[p], 0, XINSERT_NOREPLACE);
}
}
}
}
if(show_pin_net_names && xctx->sel_array[i].type == WIRE && xctx->wire[n].node) {
if((xctx->hilight_nets || show_pin_net_names) && xctx->sel_array[i].type == WIRE && xctx->wire[n].node) {
int_hash_lookup(xctx->node_redraw_table, xctx->wire[n].node, 0, XINSERT_NOREPLACE);
}
}
find_inst_to_be_redrawn();
if((xctx->hilight_nets || show_pin_net_names)) find_inst_to_be_redrawn();
/* already done above