fix some regressions (place wires/lines/polys/rectangles from context menu), restore selection when creating a new arc

This commit is contained in:
stefan schippers 2024-03-06 12:53:49 +01:00
parent c88a8334a5
commit 174d590ad1
3 changed files with 88 additions and 82 deletions

View File

@ -3066,14 +3066,14 @@ void change_layer()
if(modified) set_modify(1);
}
void new_arc(int what, double sweep)
void new_arc(int what, double sweep, double mousex_snap, double mousey_snap)
{
if(what & PLACE) {
xctx->nl_state=0;
xctx->nl_r = -1.;
xctx->nl_sweep_angle=sweep;
xctx->nl_xx1 = xctx->nl_xx2 = xctx->nl_x1 = xctx->nl_x2 = xctx->nl_x3 = xctx->mousex_snap;
xctx->nl_yy1 = xctx->nl_yy2 = xctx->nl_y1 = xctx->nl_y2 = xctx->nl_y3 = xctx->mousey_snap;
xctx->nl_xx1 = xctx->nl_xx2 = xctx->nl_x1 = xctx->nl_x2 = xctx->nl_x3 = mousex_snap;
xctx->nl_yy1 = xctx->nl_yy2 = xctx->nl_y1 = xctx->nl_y2 = xctx->nl_y3 = mousey_snap;
xctx->ui_state |= STARTARC;
}
if(what & SET) {
@ -3081,6 +3081,7 @@ void new_arc(int what, double sweep)
xctx->nl_x2 = xctx->mousex_snap;
xctx->nl_y2 = xctx->mousey_snap;
drawtempline(xctx->gctiled, NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
restore_selection(xctx->nl_xx1, xctx->nl_yy1, xctx->nl_xx2, xctx->nl_yy2);
xctx->nl_state=1;
} else if(xctx->nl_state==1) {
xctx->nl_x3 = xctx->mousex_snap;
@ -3101,9 +3102,10 @@ void new_arc(int what, double sweep)
if(what & RUBBER) {
if(xctx->nl_state==0) {
drawtempline(xctx->gctiled, NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
restore_selection(xctx->nl_xx1, xctx->nl_yy1, xctx->nl_xx2, xctx->nl_yy2);
xctx->nl_x2 = xctx->mousex_snap;xctx->nl_y2 = xctx->mousey_snap;
xctx->nl_xx2 = xctx->mousex_snap;
xctx->nl_yy2 = xctx->mousey_snap;
xctx->nl_xx1 = xctx->nl_x1;xctx->nl_yy1 = xctx->nl_y1;
ORDER(xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
drawtempline(xctx->gc[SELLAYER], NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
}
@ -3114,6 +3116,9 @@ void new_arc(int what, double sweep)
drawtemparc(xctx->gctiled, NOW, xctx->nl_x, xctx->nl_y, xctx->nl_r, xctx->nl_a, xctx->nl_b);
arc_3_points(xctx->nl_x1, xctx->nl_y1, xctx->nl_x2, xctx->nl_y2,
xctx->nl_x3, xctx->nl_y3, &xctx->nl_x, &xctx->nl_y, &xctx->nl_r, &xctx->nl_a, &xctx->nl_b);
restore_selection(xctx->nl_xx1, xctx->nl_yy1, xctx->nl_xx2, xctx->nl_yy2);
arc_bbox(xctx->nl_x, xctx->nl_y, xctx->nl_r, xctx->nl_a, xctx->nl_b,
&xctx->nl_xx1, &xctx->nl_yy1, &xctx->nl_xx2, &xctx->nl_yy2);
if(xctx->nl_sweep_angle==360.) xctx->nl_b=360.;
if(xctx->nl_r>0.) drawtemparc(xctx->gc[xctx->rectcolor], NOW,
xctx->nl_x, xctx->nl_y, xctx->nl_r, xctx->nl_a, xctx->nl_b);
@ -3121,9 +3126,11 @@ void new_arc(int what, double sweep)
}
}
void new_line(int what)
void new_line(int what, double mousex_snap, double mousey_snap)
{
int modified = 0;
if( (what & PLACE) )
{
if( (xctx->nl_x1!=xctx->nl_x2 || xctx->nl_y1!=xctx->nl_y2) && (xctx->ui_state & STARTLINE) )
@ -3173,7 +3180,7 @@ void new_line(int what)
}
if(modified) set_modify(1);
}
xctx->nl_x1=xctx->nl_x2=xctx->mousex_snap;xctx->nl_y1=xctx->nl_y2=xctx->mousey_snap;
xctx->nl_x1=xctx->nl_x2=mousex_snap;xctx->nl_y1=xctx->nl_y2=mousey_snap;
xctx->ui_state |= STARTLINE;
}
if( what & END)
@ -3184,16 +3191,16 @@ void new_line(int what)
if(what & RUBBER)
{
if(xctx->manhattan_lines==1) {
xctx->nl_xx1=xctx->nl_x1;xctx->nl_yy1=xctx->nl_y1;
xctx->nl_xx2=xctx->nl_x2;xctx->nl_yy2=xctx->nl_y2;
xctx->nl_xx1 = xctx->nl_x1;xctx->nl_yy1 = xctx->nl_y1;
xctx->nl_xx2 = xctx->nl_x2;xctx->nl_yy2 = xctx->nl_y2;
ORDER(xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy1);
drawtempline(xctx->gctiled, NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy1);
xctx->nl_xx1=xctx->nl_x1;xctx->nl_yy1=xctx->nl_y1;
xctx->nl_xx2=xctx->nl_x2;xctx->nl_yy2=xctx->nl_y2;
xctx->nl_xx1 = xctx->nl_x1;xctx->nl_yy1 = xctx->nl_y1;
xctx->nl_xx2 = xctx->nl_x2;xctx->nl_yy2 = xctx->nl_y2;
ORDER(xctx->nl_xx2,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
drawtempline(xctx->gctiled, NOW, xctx->nl_xx2,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
restore_selection(xctx->nl_x1, xctx->nl_y1, xctx->nl_x2, xctx->nl_y2);
xctx->nl_x2 = xctx->mousex_snap; xctx->nl_y2 = xctx->mousey_snap;
xctx->nl_x2 = mousex_snap; xctx->nl_y2 = mousey_snap;
if(!(what & CLEAR)) {
xctx->nl_xx1 = xctx->nl_x1; xctx->nl_yy1 = xctx->nl_y1;
xctx->nl_xx2 = xctx->nl_x2; xctx->nl_yy2 = xctx->nl_y2;
@ -3214,7 +3221,7 @@ void new_line(int what)
ORDER(xctx->nl_xx1,xctx->nl_yy2,xctx->nl_xx2,xctx->nl_yy2);
drawtempline(xctx->gctiled, NOW, xctx->nl_xx1,xctx->nl_yy2,xctx->nl_xx2,xctx->nl_yy2);
restore_selection(xctx->nl_x1, xctx->nl_y1, xctx->nl_x2, xctx->nl_y2);
xctx->nl_x2 = xctx->mousex_snap; xctx->nl_y2 = xctx->mousey_snap;
xctx->nl_x2 = mousex_snap; xctx->nl_y2 = mousey_snap;
if(!(what & CLEAR)) {
xctx->nl_xx1 = xctx->nl_x1; xctx->nl_yy1 = xctx->nl_y1;
xctx->nl_xx2 = xctx->nl_x2; xctx->nl_yy2 = xctx->nl_y2;
@ -3231,7 +3238,7 @@ void new_line(int what)
ORDER(xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
drawtempline(xctx->gctiled, NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
restore_selection(xctx->nl_x1, xctx->nl_y1, xctx->nl_x2, xctx->nl_y2);
xctx->nl_x2 = xctx->mousex_snap; xctx->nl_y2 = xctx->mousey_snap;
xctx->nl_x2 = mousex_snap; xctx->nl_y2 = mousey_snap;
if(!(what & CLEAR)) {
xctx->nl_xx1 = xctx->nl_x1; xctx->nl_yy1 = xctx->nl_y1;
xctx->nl_xx2 = xctx->nl_x2; xctx->nl_yy2 = xctx->nl_y2;
@ -3242,7 +3249,7 @@ void new_line(int what)
}
}
void new_rect(int what)
void new_rect(int what, double mousex_snap, double mousey_snap)
{
int modified = 0;
if( (what & PLACE) )
@ -3261,7 +3268,7 @@ void new_rect(int what)
storeobject(-1, xctx->nl_x1,xctx->nl_y1,xctx->nl_x2,xctx->nl_y2,xRECT,xctx->rectcolor, 0, NULL);
modified = 1;
}
xctx->nl_x1=xctx->nl_x2=xctx->mousex_snap;xctx->nl_y1=xctx->nl_y2=xctx->mousey_snap;
xctx->nl_x1 = xctx->nl_x2 = mousex_snap;xctx->nl_y1 = xctx->nl_y2 = mousey_snap;
xctx->ui_state |= STARTRECT;
if(modified) set_modify(1);
}
@ -3271,19 +3278,19 @@ void new_rect(int what)
}
if(what & RUBBER)
{
xctx->nl_xx1=xctx->nl_x1;xctx->nl_yy1=xctx->nl_y1;xctx->nl_xx2=xctx->nl_x2;xctx->nl_yy2=xctx->nl_y2;
xctx->nl_xx1 = xctx->nl_x1;xctx->nl_yy1 = xctx->nl_y1;xctx->nl_xx2 = xctx->nl_x2;xctx->nl_yy2 = xctx->nl_y2;
RECTORDER(xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
drawtemprect(xctx->gctiled,NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
restore_selection(xctx->nl_x1, xctx->nl_y1, xctx->nl_x2, xctx->nl_y2);
xctx->nl_x2=xctx->mousex_snap;xctx->nl_y2=xctx->mousey_snap;
xctx->nl_xx1=xctx->nl_x1;xctx->nl_yy1=xctx->nl_y1;xctx->nl_xx2=xctx->nl_x2;xctx->nl_yy2=xctx->nl_y2;
xctx->nl_x2 = xctx->mousex_snap;xctx->nl_y2 = xctx->mousey_snap;
xctx->nl_xx1 = xctx->nl_x1;xctx->nl_yy1 = xctx->nl_y1;xctx->nl_xx2 = xctx->nl_x2;xctx->nl_yy2 = xctx->nl_y2;
RECTORDER(xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
drawtemprect(xctx->gc[xctx->rectcolor], NOW, xctx->nl_xx1,xctx->nl_yy1,xctx->nl_xx2,xctx->nl_yy2);
}
}
void new_polygon(int what)
void new_polygon(int what, double mousex_snap, double mousey_snap)
{
if( what & PLACE ) xctx->nl_points=0; /* start new polygon placement */
@ -3295,14 +3302,14 @@ void new_polygon(int what)
if( what & PLACE )
{
/* fprintf(errfp, "new_poly: PLACE, nl_points=%d\n", xctx->nl_points); */
xctx->nl_polyy[xctx->nl_points]=xctx->mousey_snap;
xctx->nl_polyx[xctx->nl_points]=xctx->mousex_snap;
xctx->nl_polyy[xctx->nl_points]=mousey_snap;
xctx->nl_polyx[xctx->nl_points]=mousex_snap;
xctx->nl_points++;
xctx->nl_polyx[xctx->nl_points]=xctx->nl_polyx[xctx->nl_points-1]; /* prepare next point for rubber */
xctx->nl_polyy[xctx->nl_points] = xctx->nl_polyy[xctx->nl_points-1];
/* fprintf(errfp, "added point: %.16g %.16g\n", xctx->nl_polyx[xctx->nl_points-1],
xctx->nl_polyy[xctx->nl_points-1]); */
xctx->nl_x1=xctx->nl_x2=xctx->mousex_snap;xctx->nl_y1=xctx->nl_y2=xctx->mousey_snap;
xctx->nl_x1=xctx->nl_x2=mousex_snap;xctx->nl_y1=xctx->nl_y2=mousey_snap;
xctx->ui_state |= STARTPOLYGON;
set_modify(1);
}
@ -3568,7 +3575,7 @@ int create_text(int draw_text, double x, double y, int rot, int flip, const char
my_strdup(_ALLOC_ID_, &t->prop_ptr, props);
/* debug ... */
/* t->prop_ptr=NULL; */
dbg(1, "place_text(): done text input\n");
dbg(1, "create_text(): done text input\n");
set_text_flags(t);
textlayer = t->layer;
if(textlayer < 0 || textlayer >= cadlayers) textlayer = TEXTLAYER;

View File

@ -79,18 +79,18 @@ void redraw_w_a_l_r_p_rubbers(void)
if(xctx->ui_state & STARTARC) {
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_arc(RUBBER, 0);
new_arc(RUBBER, 0, xctx->mousex_snap, xctx->mousey_snap);
}
if(xctx->ui_state & STARTLINE) {
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_line(RUBBER);
new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
}
if(xctx->ui_state & STARTRECT) new_rect(RUBBER);
if(xctx->ui_state & STARTRECT) new_rect(RUBBER,xctx->mousex_snap, xctx->mousey_snap);
if(xctx->ui_state & STARTPOLYGON) {
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_polygon(RUBBER);
new_polygon(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
}
}
@ -103,7 +103,7 @@ void abort_operation(void)
constrained_move=0;
if(xctx->last_command && xctx->ui_state & (STARTWIRE | STARTLINE)) {
if(xctx->ui_state & STARTWIRE) new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap);
if(xctx->ui_state & STARTLINE) new_line(RUBBER|CLEAR);
if(xctx->ui_state & STARTLINE) new_line(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap);
if(tclgetboolvar("draw_crosshair")) draw_crosshair(2);
xctx->ui_state = 0;
return;
@ -137,7 +137,7 @@ void abort_operation(void)
draw();
}
static void start_place_symbol(double mx, double my)
static void start_place_symbol(void)
{
xctx->last_command = 0;
rebuild_selected_array();
@ -161,18 +161,18 @@ static void start_line(double mx, double my)
xctx->last_command = STARTLINE;
if(xctx->ui_state & STARTLINE) {
if(constrained_move != 2) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->mx_double_save=mx;
}
if(constrained_move != 1) {
xctx->my_double_save=xctx->mousey_snap;
xctx->my_double_save=my;
}
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
if(constrained_move == 1) my = xctx->my_double_save;
if(constrained_move == 2) mx = xctx->mx_double_save;
} else {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->mx_double_save=mx;
xctx->my_double_save=my;
}
new_line(PLACE);
new_line(PLACE, mx, my);
}
static void start_wire(double mx, double my)
@ -180,19 +180,18 @@ static void start_wire(double mx, double my)
xctx->last_command = STARTWIRE;
if(xctx->ui_state & STARTWIRE) {
if(constrained_move != 2) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->mx_double_save = mx;
}
if(constrained_move != 1) {
xctx->my_double_save=xctx->mousey_snap;
xctx->my_double_save = my;
}
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
if(constrained_move == 1) my = xctx->my_double_save;
if(constrained_move == 2) mx = xctx->mx_double_save;
} else {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->mx_double_save=mx;
xctx->my_double_save=my;
}
new_wire(PLACE,xctx->mousex_snap, xctx->mousey_snap);
new_wire(PLACE,mx, my);
}
static double interpolate_yval(int idx, int point_not_last)
@ -1136,7 +1135,7 @@ static int end_place_move_copy_zoom(int constrained_move)
return 1;
}
else if(xctx->ui_state & STARTARC) {
new_arc(SET, 0);
new_arc(SET, 0, xctx->mousex_snap, xctx->mousey_snap);
return 1;
}
else if(xctx->ui_state & STARTLINE) {
@ -1149,22 +1148,22 @@ static int end_place_move_copy_zoom(int constrained_move)
}
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_line(PLACE);
new_line(PLACE, xctx->mousex_snap, xctx->mousey_snap);
} else {
new_line(PLACE|END);
new_line(PLACE|END, xctx->mousex_snap, xctx->mousey_snap);
}
constrained_move=0;
tcleval("set constrained_move 0" );
return 1;
}
else if(xctx->ui_state & STARTRECT) {
new_rect(PLACE|END);
new_rect(PLACE|END,xctx->mousex_snap, xctx->mousey_snap);
return 1;
}
else if(xctx->ui_state & STARTPOLYGON) {
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_polygon(ADD);
new_polygon(ADD, xctx->mousex_snap, xctx->mousey_snap);
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
constrained_move=0;
@ -1228,35 +1227,35 @@ static int check_menu_start_commands(double c_snap)
else if((xctx->ui_state & MENUSTART) && (xctx->ui_state2 & MENUSTARTLINE)) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
new_line(PLACE);
new_line(PLACE, xctx->mousex_snap, xctx->mousey_snap);
xctx->ui_state &=~MENUSTART;
return 1;
}
else if((xctx->ui_state & MENUSTART) && (xctx->ui_state2 & MENUSTARTRECT)) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
new_rect(PLACE);
new_rect(PLACE,xctx->mousex_snap, xctx->mousey_snap);
xctx->ui_state &=~MENUSTART;
return 1;
}
else if((xctx->ui_state & MENUSTART) && (xctx->ui_state2 & MENUSTARTPOLYGON)) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
new_polygon(PLACE);
new_polygon(PLACE, xctx->mousex_snap, xctx->mousey_snap);
xctx->ui_state &=~MENUSTART;
return 1;
}
else if((xctx->ui_state & MENUSTART) && (xctx->ui_state2 & MENUSTARTARC)) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
new_arc(PLACE, 180.);
new_arc(PLACE, 180., xctx->mousex_snap, xctx->mousey_snap);
xctx->ui_state &=~MENUSTART;
return 1;
}
else if((xctx->ui_state & MENUSTART) && (xctx->ui_state2 & MENUSTARTCIRCLE)) {
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
new_arc(PLACE, 360.);
new_arc(PLACE, 360., xctx->mousex_snap, xctx->mousey_snap);
xctx->ui_state &=~MENUSTART;
return 1;
}
@ -1454,8 +1453,7 @@ static int edit_polygon_point(int state)
return 0;
}
/* Mouse wheel events */
static void context_menu_action(int mx, int my)
static void context_menu_action(double mx, double my)
{
int ret;
const char *status;
@ -1467,7 +1465,7 @@ static void context_menu_action(int mx, int my)
ret = atoi(status);
switch(ret) {
case 1:
start_place_symbol(mx, my);
start_place_symbol();
break;
case 2:
prev_state = xctx->ui_state;
@ -1489,19 +1487,19 @@ static void context_menu_action(int mx, int my)
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_rect(PLACE);
new_rect(PLACE,mx, my);
break;
case 5:
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_polygon(PLACE);
new_polygon(PLACE, mx, my);
break;
case 6: /* place text */
xctx->last_command = 0;
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
if(place_text(0, xctx->mousex_snap, xctx->mousey_snap)) { /* 1 = draw text */
if(place_text(0, mx, my)) { /* 1 = draw text */
xctx->mousey_snap = xctx->my_double_save;
xctx->mousex_snap = xctx->mx_double_save;
move_objects(START,0,0,0);
@ -1563,13 +1561,13 @@ static void context_menu_action(int mx, int my)
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_arc(PLACE, 180.);
new_arc(PLACE, 180., mx, my);
break;
case 20: /* place circle */
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_arc(PLACE, 360.);
new_arc(PLACE, 360., mx, my);
break;
case 21: /* abort & redraw */
abort_operation();
@ -1579,6 +1577,7 @@ static void context_menu_action(int mx, int my)
}
}
/* Mouse wheel events */
static int handle_mouse_wheel(int event, int mx, int my, KeySym key, int button, int aux, int state)
{
if(button==Button5 && state == 0 ) {
@ -1966,10 +1965,10 @@ int rstate; /* (reduced state, without ShiftMask) */
new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
} else if(xctx->ui_state==STARTLINE) {
new_line(RUBBER|CLEAR);
new_line(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap);
xctx->manhattan_lines++;
xctx->manhattan_lines %=3;
new_line(RUBBER);
new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
} else {
if(xctx->semaphore<2) {
rebuild_selected_array(); /* sets or clears xctx->ui_state SELECTION flag */
@ -2077,7 +2076,7 @@ int rstate; /* (reduced state, without ShiftMask) */
if(xctx->ui_state & STARTLINE) {
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_line(RUBBER);
new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
}
break;
}
@ -2106,7 +2105,7 @@ int rstate; /* (reduced state, without ShiftMask) */
if(xctx->ui_state & STARTLINE) {
if(constrained_move == 1) xctx->mousey_snap = xctx->my_double_save;
if(constrained_move == 2) xctx->mousex_snap = xctx->mx_double_save;
new_line(RUBBER);
new_line(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
}
break;
}
@ -2210,7 +2209,7 @@ int rstate; /* (reduced state, without ShiftMask) */
{
int prev_state = xctx->ui_state;
if(xctx->semaphore >= 2) break;
start_wire(mx, my);
start_wire(xctx->mousex_snap, xctx->mousey_snap);
if(prev_state == STARTWIRE) {
tcleval("set constrained_move 0" );
constrained_move=0;
@ -2218,7 +2217,7 @@ int rstate; /* (reduced state, without ShiftMask) */
break;
}
if(key == XK_Return && (state == 0 ) && xctx->ui_state & STARTPOLYGON) { /* close polygon */
new_polygon(ADD|END);
new_polygon(ADD|END, xctx->mousex_snap, xctx->mousey_snap);
break;
}
if(key == XK_Escape) /* abort & redraw */
@ -2257,7 +2256,7 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_polygon(PLACE);
new_polygon(PLACE, xctx->mousex_snap, xctx->mousey_snap);
break;
}
if(key=='P' && rstate == 0) /* pan, other way to. */
@ -2391,7 +2390,7 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_rect(PLACE);
new_rect(PLACE,xctx->mousex_snap, xctx->mousey_snap);
break;
}
if(key=='V' && rstate == ControlMask) /* toggle spice/vhdl netlist */
@ -2570,7 +2569,7 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_arc(PLACE, 180.);
new_arc(PLACE, 180., xctx->mousex_snap, xctx->mousey_snap);
break;
}
if(key=='C' /* && !xctx->ui_state */ && rstate == ControlMask) /* place circle */
@ -2579,7 +2578,7 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
xctx->last_command = 0;
new_arc(PLACE, 360.);
new_arc(PLACE, 360., xctx->mousex_snap, xctx->mousey_snap);
break;
}
if(key=='O' && rstate == ControlMask ) /* load most recent tile */
@ -2658,7 +2657,7 @@ int rstate; /* (reduced state, without ShiftMask) */
if((key==XK_Insert && state == 0) || (key == 'I' && rstate == 0) ) /* insert sym */
{
if(xctx->semaphore >= 2) break;
start_place_symbol(mx, my);
start_place_symbol();
break;
}
@ -2881,7 +2880,7 @@ int rstate; /* (reduced state, without ShiftMask) */
if(key=='l' /* && !xctx->ui_state */ && rstate == 0) /* start line */
{
int prev_state = xctx->ui_state;
start_line(mx, my);
start_line(xctx->mousex_snap, xctx->mousey_snap);
if(prev_state == STARTLINE) {
tcleval("set constrained_move 0" );
constrained_move=0;
@ -3335,7 +3334,7 @@ int rstate; /* (reduced state, without ShiftMask) */
if(sel.type) select_connected_nets(0);
}
else if(button == Button3 && state == 0 && xctx->semaphore <2) {
context_menu_action(mx, my);
context_menu_action(xctx->mousex_snap, xctx->mousey_snap);
}
/* Mouse wheel events */
else if(handle_mouse_wheel(event, mx, my, key, button, aux, state)) break;
@ -3371,8 +3370,8 @@ int rstate; /* (reduced state, without ShiftMask) */
{
xctx->drag_elements = 0;
if(tclgetboolvar("persistent_command") && xctx->last_command) {
if(xctx->last_command == STARTLINE) start_line(mx, my);
if(xctx->last_command == STARTWIRE) start_wire(mx, my);
if(xctx->last_command == STARTLINE) start_line(xctx->mousex_snap, xctx->mousey_snap);
if(xctx->last_command == STARTWIRE) start_wire(xctx->mousex_snap, xctx->mousey_snap);
break;
}
/* handle all object insertions started from Tools menu */
@ -3541,7 +3540,7 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->ui_state &= ~STARTLINE;
}
if( (xctx->ui_state & STARTPOLYGON) && (state ==0 ) ) {
new_polygon(SET);
new_polygon(SET, xctx->mousex_snap, xctx->mousey_snap);
}
}
}

View File

@ -1500,8 +1500,8 @@ extern void view_unzoom(double z);
extern void view_zoom(double z);
extern void draw_stuff(void);
extern void new_wire(int what, double mx_snap, double my_snap);
extern void new_line(int what);
extern void new_arc(int what, double sweep);
extern void new_line(int what, double mx_snap, double my_snap);
extern void new_arc(int what, double sweep, double mousex_snap, double mousey_snap);
extern void arc_3_points(double x1, double y1, double x2, double y2, double x3, double y3,
double *x, double *y, double *r, double *a, double *b);
extern void move_objects(int what,int merge, double dx, double dy);
@ -1514,8 +1514,8 @@ extern void zoom_rectangle(int what);
extern void zoom_box(double x1, double y1, double x2, double y2, double factor);
extern void save_restore_zoom(int save, Zoom_info *zi);
extern void select_rect(int what, int select);
extern void new_rect(int what);
extern void new_polygon(int what);
extern void new_rect(int what, double mousex_snap, double mousey_snap);
extern void new_polygon(int what, double mousex_snap, double mousey_snap);
extern void compile_font(void);
extern void rebuild_selected_array(void);