From 022a0ebb5e2ae9e7d920c9bd589afb06366e9529 Mon Sep 17 00:00:00 2001 From: stefan schippers Date: Wed, 6 Mar 2024 20:04:15 +0100 Subject: [PATCH] drag wires from pins: if instance is selected can drag wire from pin even if there are already other wires attached --- src/callback.c | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/src/callback.c b/src/callback.c index 1b313a38..850de873 100644 --- a/src/callback.c +++ b/src/callback.c @@ -1295,6 +1295,7 @@ static int add_wire_from_inst_pin(Selected *sel, double mx, double my) xctx->need_reb_sel_arr = 1; xctx->kissing = 1; rebuild_selected_array(); + move_objects(START,0,0,0); res = 1; } } @@ -3432,38 +3433,33 @@ int rstate; /* (reduced state, without ShiftMask) */ xctx->mx_double_save=xctx->mousex_snap; xctx->my_double_save=xctx->mousey_snap; + /* Clicking on an instance pin -> drag a new wire + * if an instance is already selected */ + if(xctx->lastsel == 1 && xctx->sel_array[0].type==ELEMENT) { + add_wire_to_pin = add_wire_from_inst_pin(&xctx->sel_array[0], xctx->mousex_snap, xctx->mousey_snap); + if(add_wire_to_pin) break; /* adding a wire: nothing else to do */ + } + if(!xctx->intuitive_interface && no_shift_no_ctrl ) unselect_all(1); sel = find_closest_obj(xctx->mousex, xctx->mousey, 0); - - switch(sel.type) - { - case WIRE: if(xctx->wire[sel.n].sel) already_selected = 1; break; - case xTEXT: if(xctx->text[sel.n].sel) already_selected = 1; break; - case LINE: if(xctx->line[sel.col][sel.n].sel) already_selected = 1; break; - case POLYGON: if(xctx->poly[sel.col][sel.n].sel) already_selected = 1; break; - case xRECT: if(xctx->rect[sel.col][sel.n].sel) already_selected = 1; break; - case ARC: if(xctx->arc[sel.col][sel.n].sel) already_selected = 1; break; - case ELEMENT: if(xctx->inst[sel.n].sel) already_selected = 1; break; - default: break; + switch(sel.type) { + case WIRE: if(xctx->wire[sel.n].sel) already_selected = 1; break; + case xTEXT: if(xctx->text[sel.n].sel) already_selected = 1; break; + case LINE: if(xctx->line[sel.col][sel.n].sel) already_selected = 1; break; + case POLYGON: if(xctx->poly[sel.col][sel.n].sel) already_selected = 1; break; + case xRECT: if(xctx->rect[sel.col][sel.n].sel) already_selected = 1; break; + case ARC: if(xctx->arc[sel.col][sel.n].sel) already_selected = 1; break; + case ELEMENT: if(xctx->inst[sel.n].sel) already_selected = 1; break; + default: break; } /*end switch */ - - /* Clicking on an instance pin -> drag a new wire */ if(xctx->intuitive_interface && !already_selected) { add_wire_to_pin = add_wire_from_inst_pin(&sel, xctx->mousex_snap, xctx->mousey_snap); - - if(add_wire_to_pin) { - move_objects(START,0,0,0); - break; /* addig a wire: nothing else to do */ - } + if(add_wire_to_pin) break; /* adding a wire: nothing else to do */ } - - - - if(xctx->intuitive_interface && !already_selected && no_shift_no_ctrl ) unselect_all(1); if(!already_selected) select_object(xctx->mousex, xctx->mousey, SELECTED, 0, &sel);