when doing a select by area with shift pressed the object under the mouse will not be unselected if it was already selected (xctx->already_selected)
This commit is contained in:
parent
512b297e35
commit
0819211bb0
|
|
@ -1260,7 +1260,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
||||||
}
|
}
|
||||||
|
|
||||||
redraw_w_a_l_r_p_rubbers();
|
redraw_w_a_l_r_p_rubbers();
|
||||||
/* start of a mouse area select */
|
/* start of a mouse area select. No shift pressed */
|
||||||
if(!(xctx->ui_state & STARTPOLYGON) && (state&Button1Mask) && !(xctx->ui_state & STARTWIRE) &&
|
if(!(xctx->ui_state & STARTPOLYGON) && (state&Button1Mask) && !(xctx->ui_state & STARTWIRE) &&
|
||||||
!(xctx->ui_state & STARTPAN) && !(SET_MODMASK) &&
|
!(xctx->ui_state & STARTPAN) && !(SET_MODMASK) &&
|
||||||
!(state & ShiftMask) && !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)))
|
!(state & ShiftMask) && !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)))
|
||||||
|
|
@ -1280,6 +1280,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Unselect by area */
|
||||||
if((state & Button1Mask) && (SET_MODMASK) && !(state & ShiftMask) &&
|
if((state & Button1Mask) && (SET_MODMASK) && !(state & ShiftMask) &&
|
||||||
!(xctx->ui_state & STARTPAN) &&
|
!(xctx->ui_state & STARTPAN) &&
|
||||||
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT))) { /* unselect area */
|
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT))) { /* unselect area */
|
||||||
|
|
@ -1287,6 +1288,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
||||||
select_rect(START,0);
|
select_rect(START,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* Select by area. Shift pressed */
|
||||||
else if((state&Button1Mask) && (state & ShiftMask) &&
|
else if((state&Button1Mask) && (state & ShiftMask) &&
|
||||||
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)) &&
|
!(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)) &&
|
||||||
!(xctx->ui_state & STARTPAN) ) {
|
!(xctx->ui_state & STARTPAN) ) {
|
||||||
|
|
@ -1296,8 +1298,10 @@ int rstate; /* (reduced state, without ShiftMask) */
|
||||||
}
|
}
|
||||||
if(abs(mx-xctx->mx_save) > 8 ||
|
if(abs(mx-xctx->mx_save) > 8 ||
|
||||||
abs(my-xctx->my_save) > 8 ) { /* set reasonable threshold before unsel */
|
abs(my-xctx->my_save) > 8 ) { /* set reasonable threshold before unsel */
|
||||||
select_object(X_TO_XSCHEM(xctx->mx_save),
|
if(!xctx->already_selected) {
|
||||||
Y_TO_XSCHEM(xctx->my_save), 0, 0); /* remove near obj if dragging */
|
select_object(X_TO_XSCHEM(xctx->mx_save),
|
||||||
|
Y_TO_XSCHEM(xctx->my_save), 0, 0); /* remove near obj if dragging */
|
||||||
|
}
|
||||||
rebuild_selected_array();
|
rebuild_selected_array();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -2714,17 +2718,12 @@ int rstate; /* (reduced state, without ShiftMask) */
|
||||||
xctx->yorigin-=-CADMOVESTEP*xctx->zoom/2.;
|
xctx->yorigin-=-CADMOVESTEP*xctx->zoom/2.;
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
/* Alt - Button1 click to unselect */
|
||||||
else if(button==Button1 && (SET_MODMASK) ) {
|
else if(button==Button1 && (SET_MODMASK) ) {
|
||||||
xctx->last_command = 0;
|
xctx->last_command = 0;
|
||||||
xctx->mx_save = mx; xctx->my_save = my;
|
xctx->mx_save = mx; xctx->my_save = my;
|
||||||
xctx->mx_double_save=xctx->mousex_snap;
|
xctx->mx_double_save=xctx->mousex_snap;
|
||||||
xctx->my_double_save=xctx->mousey_snap;
|
xctx->my_double_save=xctx->mousey_snap;
|
||||||
|
|
||||||
/* useless code ? 20200905 */
|
|
||||||
/* if(xctx->semaphore<2) {
|
|
||||||
rebuild_selected_array();
|
|
||||||
} */
|
|
||||||
|
|
||||||
select_object(xctx->mousex, xctx->mousey, 0, 0);
|
select_object(xctx->mousex, xctx->mousey, 0, 0);
|
||||||
rebuild_selected_array(); /* sets or clears xctx->ui_state SELECTION flag */
|
rebuild_selected_array(); /* sets or clears xctx->ui_state SELECTION flag */
|
||||||
}
|
}
|
||||||
|
|
@ -2902,6 +2901,7 @@ int rstate; /* (reduced state, without ShiftMask) */
|
||||||
tcleval("set constrained_move 0" );
|
tcleval("set constrained_move 0" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* Button1Press to select objects */
|
||||||
if( !(xctx->ui_state & STARTSELECT) && !(xctx->ui_state & STARTWIRE) && !(xctx->ui_state & STARTLINE) ) {
|
if( !(xctx->ui_state & STARTSELECT) && !(xctx->ui_state & STARTWIRE) && !(xctx->ui_state & STARTLINE) ) {
|
||||||
Selected sel;
|
Selected sel;
|
||||||
int prev_last_sel = xctx->lastsel;
|
int prev_last_sel = xctx->lastsel;
|
||||||
|
|
|
||||||
|
|
@ -1224,31 +1224,38 @@ void select_line(int c, int i, unsigned short select_mode, int fast )
|
||||||
Selected select_object(double mx,double my, unsigned short select_mode, int override_lock)
|
Selected select_object(double mx,double my, unsigned short select_mode, int override_lock)
|
||||||
{
|
{
|
||||||
Selected sel;
|
Selected sel;
|
||||||
|
xctx->already_selected = 0;
|
||||||
sel = find_closest_obj(mx, my, override_lock);
|
sel = find_closest_obj(mx, my, override_lock);
|
||||||
|
|
||||||
dbg(1, "select_object(): sel.n=%d, sel.col=%d, sel.type=%d\n", sel.n, sel.col, sel.type);
|
dbg(1, "select_object(): sel.n=%d, sel.col=%d, sel.type=%d\n", sel.n, sel.col, sel.type);
|
||||||
|
|
||||||
switch(sel.type)
|
switch(sel.type)
|
||||||
{
|
{
|
||||||
case WIRE:
|
case WIRE:
|
||||||
|
if(xctx->wire[sel.n].sel) xctx->already_selected = 1;
|
||||||
select_wire(sel.n, select_mode, 0);
|
select_wire(sel.n, select_mode, 0);
|
||||||
break;
|
break;
|
||||||
case xTEXT:
|
case xTEXT:
|
||||||
|
if(xctx->text[sel.n].sel) xctx->already_selected = 1;
|
||||||
select_text(sel.n, select_mode, 0);
|
select_text(sel.n, select_mode, 0);
|
||||||
break;
|
break;
|
||||||
case LINE:
|
case LINE:
|
||||||
|
if(xctx->line[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||||
select_line(sel.col, sel.n, select_mode,0);
|
select_line(sel.col, sel.n, select_mode,0);
|
||||||
break;
|
break;
|
||||||
case POLYGON:
|
case POLYGON:
|
||||||
|
if(xctx->poly[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||||
select_polygon(sel.col, sel.n, select_mode,0);
|
select_polygon(sel.col, sel.n, select_mode,0);
|
||||||
break;
|
break;
|
||||||
case xRECT:
|
case xRECT:
|
||||||
|
if(xctx->rect[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||||
select_box(sel.col,sel.n, select_mode,0, override_lock);
|
select_box(sel.col,sel.n, select_mode,0, override_lock);
|
||||||
break;
|
break;
|
||||||
case ARC:
|
case ARC:
|
||||||
|
if(xctx->arc[sel.col][sel.n].sel) xctx->already_selected = 1;
|
||||||
select_arc(sel.col,sel.n, select_mode,0);
|
select_arc(sel.col,sel.n, select_mode,0);
|
||||||
break;
|
break;
|
||||||
case ELEMENT:
|
case ELEMENT:
|
||||||
|
if(xctx->inst[sel.n].sel) xctx->already_selected = 1;
|
||||||
select_element(sel.n,select_mode,0, override_lock);
|
select_element(sel.n,select_mode,0, override_lock);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -613,6 +613,7 @@ static void alloc_xschem_data(const char *top_path, const char *win_path)
|
||||||
xctx->only_probes = 0;
|
xctx->only_probes = 0;
|
||||||
xctx->menu_removed = 0; /* fullscreen previous setting */
|
xctx->menu_removed = 0; /* fullscreen previous setting */
|
||||||
xctx->save_lw = 0.0; /* used to save linewidth when selecting 'only_probes' view */
|
xctx->save_lw = 0.0; /* used to save linewidth when selecting 'only_probes' view */
|
||||||
|
xctx->already_selected = 0;
|
||||||
xctx->onetime = 0; /* callback() static var */
|
xctx->onetime = 0; /* callback() static var */
|
||||||
xctx->save_netlist_type = 0;
|
xctx->save_netlist_type = 0;
|
||||||
xctx->some_nets_added = 0;
|
xctx->some_nets_added = 0;
|
||||||
|
|
|
||||||
|
|
@ -972,6 +972,7 @@ typedef struct {
|
||||||
int *node_mult;
|
int *node_mult;
|
||||||
int node_mult_size;
|
int node_mult_size;
|
||||||
/* callback.c */
|
/* callback.c */
|
||||||
|
int already_selected; /* when clicking on an object that is already selected this will be 1 */
|
||||||
int mx_save, my_save, last_command;
|
int mx_save, my_save, last_command;
|
||||||
char sel_or_clip[PATH_MAX];
|
char sel_or_clip[PATH_MAX];
|
||||||
int onetime;
|
int onetime;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue