Merge branch 'master' into upstream-clone

This commit is contained in:
Chayan Deb 2025-01-25 12:15:55 +05:30 committed by GitHub
commit d2ee983318
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 233 additions and 31 deletions

View File

@ -100,6 +100,17 @@ void redraw_w_a_l_r_p_rubbers(void)
if(xctx->ui_state & STARTWIRE) {
if(xctx->constr_mv == 1) xctx->mousey_snap = xctx->my_double_save;
if(xctx->constr_mv == 2) xctx->mousex_snap = xctx->mx_double_save;
if(tclgetboolvar("orthogonal_wiring")) {
new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap);
/* Origin shift the cartesian coordinate p2(x2,y2) w.r.t. p1(x1,y1) */
int origin_shifted_x2 = xctx->nl_x2 - xctx->nl_x1, origin_shifted_y2 = xctx->nl_y2 - xctx->nl_y1;
/* Draw whichever component of the resulting orthogonal-wire is bigger (either horizontal or vertical), first */
if(origin_shifted_x2*origin_shifted_x2 > origin_shifted_y2*origin_shifted_y2){
xctx->manhattan_lines = 1;
} else {
xctx->manhattan_lines = 2;
}
}
new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
}
if(xctx->ui_state & STARTARC) {
@ -204,10 +215,14 @@ static void start_line(double mx, double my)
static void start_wire(double mx, double my)
{
dbg(1, "start_wire(): ui_state=%d, ui_state2=%d last_command=%d\n",
xctx->ui_state, xctx->ui_state2, xctx->last_command);
dbg(1, "start_wire(): ui_state=%d, ui_state2=%d last_command=%d\n", xctx->ui_state, xctx->ui_state2, xctx->last_command);
xctx->last_command = STARTWIRE;
if(xctx->ui_state & STARTWIRE) {
if(tclgetboolvar("orthogonal_wiring") && !tclgetboolvar("constr_mv")){
xctx->constr_mv = xctx->manhattan_lines;
new_wire(CLEAR, mx, my);
redraw_w_a_l_r_p_rubbers();
}
if(xctx->constr_mv != 2) {
xctx->mx_double_save = mx;
}
@ -221,6 +236,9 @@ static void start_wire(double mx, double my)
xctx->my_double_save=my;
}
new_wire(PLACE,mx, my);
if(tclgetboolvar("orthogonal_wiring") && !tclgetboolvar("constr_mv")){
xctx->constr_mv = 0;
}
}
static double interpolate_yval(int idx, int p, double x, int sweep_idx, int point_not_last)
@ -1447,6 +1465,102 @@ void draw_crosshair(int what)
xctx->draw_pixmap = sdp;
}
/* what == 0 : erase and draw a new cursor
* what == 1 : erase the cursor
* what == 2 : draw a diamond-shaped cursor that snaps to a component endpoint */
void draw_snap_cursor(int what)
{
int sdw, sdp;
int snapcursor_size = tclgetintvar("snap_cursor_size");
int pos_changed = (xctx->mousex_snap - xctx->prev_gridx) || (xctx->mousey_snap - xctx->prev_gridy);
dbg(1, "draw_snap_cursor(): what=%d\n", what);
sdw = xctx->draw_window;
sdp = xctx->draw_pixmap;
if(!xctx->mouse_inside) return;
xctx->draw_pixmap = 0;
xctx->draw_window = 1;
double prev_x = xctx->prev_snapx;
double prev_y = xctx->prev_snapy;
if(what != 2) {
if(fix_broken_tiled_fill || !_unix) {
/*MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], 0, 0, xctx->xrect[0].width, xctx->xrect[0].height, 0, 0);*/
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
(int)X_TO_SCREEN(prev_x) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size,
(int)Y_TO_SCREEN(prev_y) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size,
4 * INT_WIDTH(xctx->lw) + 4 * snapcursor_size,
4 * INT_WIDTH(xctx->lw) + 4 * snapcursor_size,
(int)X_TO_SCREEN(prev_x) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size,
(int)Y_TO_SCREEN(prev_y) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size);
MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0],
(int)X_TO_SCREEN(prev_x) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size,
(int)Y_TO_SCREEN(prev_y) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size,
4 * INT_WIDTH(xctx->lw) + 4 * snapcursor_size,
4 * INT_WIDTH(xctx->lw) + 4 * snapcursor_size,
(int)X_TO_SCREEN(prev_x) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size,
(int)Y_TO_SCREEN(prev_y) - 2 * INT_WIDTH(xctx->lw) - snapcursor_size);
} else {
draw_xhair_line(xctx->gctiled, snapcursor_size,
X_TO_SCREEN(prev_x),
Y_TO_SCREEN(prev_y) - snapcursor_size,
X_TO_SCREEN(prev_x) + snapcursor_size,
Y_TO_SCREEN(prev_y));
draw_xhair_line(xctx->gctiled, snapcursor_size,
X_TO_SCREEN(prev_x) + snapcursor_size,
Y_TO_SCREEN(prev_y),
X_TO_SCREEN(prev_x),
Y_TO_SCREEN(prev_y) + snapcursor_size);
draw_xhair_line(xctx->gctiled, snapcursor_size,
X_TO_SCREEN(prev_x),
Y_TO_SCREEN(prev_y) + snapcursor_size,
X_TO_SCREEN(prev_x) - snapcursor_size,
Y_TO_SCREEN(prev_y));
draw_xhair_line(xctx->gctiled, snapcursor_size,
X_TO_SCREEN(prev_x) - snapcursor_size,
Y_TO_SCREEN(prev_y),
X_TO_SCREEN(prev_x),
Y_TO_SCREEN(prev_y) - snapcursor_size);
}
}
if(what != 1) {
double x, y;
if(!pos_changed) {
x = xctx->prev_snapx;
y = xctx->prev_snapy;
} else { /* Only search for nearest pin if the grid-snap-point has changed */
xctx->closest_pin_found = find_closest_net_or_symbol_pin(xctx->mousex, xctx->mousey, &x, &y);
}
draw_xhair_line(xctx->gc[xctx->crosshair_layer], snapcursor_size,
X_TO_SCREEN(x),
Y_TO_SCREEN(y) - snapcursor_size,
X_TO_SCREEN(x) + snapcursor_size,
Y_TO_SCREEN(y));
draw_xhair_line(xctx->gc[xctx->crosshair_layer], snapcursor_size,
X_TO_SCREEN(x) + snapcursor_size,
Y_TO_SCREEN(y),
X_TO_SCREEN(x),
Y_TO_SCREEN(y) + snapcursor_size);
draw_xhair_line(xctx->gc[xctx->crosshair_layer], snapcursor_size,
X_TO_SCREEN(x),
Y_TO_SCREEN(y) + snapcursor_size,
X_TO_SCREEN(x) - snapcursor_size,
Y_TO_SCREEN(y));
draw_xhair_line(xctx->gc[xctx->crosshair_layer], snapcursor_size,
X_TO_SCREEN(x) - snapcursor_size,
Y_TO_SCREEN(y),
X_TO_SCREEN(x),
Y_TO_SCREEN(y) - snapcursor_size);
xctx->prev_gridx = xctx->mousex_snap;
xctx->prev_gridy = xctx->mousey_snap;
xctx->prev_snapx = x;
xctx->prev_snapy = y;
}
draw_selection(xctx->gc[SELLAYER], 0);
xctx->draw_window = sdw;
xctx->draw_pixmap = sdp;
}
/* complete the STARTWIRE, STARTRECT, STARTZOOM, STARTCOPY ... operations */
static int end_place_move_copy_zoom()
{
@ -1544,6 +1658,7 @@ void snapped_wire(double c_snap)
new_wire(PLACE|END, x, y);
xctx->constr_mv=0;
tcleval("set constr_mv 0" );
if((xctx->ui_state & MENUSTART) && !tclgetboolvar("persistent_command") ) xctx->ui_state &= ~MENUSTART;
}
}
@ -2253,6 +2368,10 @@ int callback(const char *winpath, int event, int mx, int my, KeySym key,
#endif
int draw_xhair = tclgetboolvar("draw_crosshair");
int infix_interface = tclgetboolvar("infix_interface");
int snap_cursor = tclgetboolvar("snap_cursor");
int wire_draw_active = (xctx->ui_state & STARTWIRE) ||
((xctx->ui_state2 & MENUSTARTWIRE) && (xctx->ui_state & MENUSTART)) ||
(tclgetboolvar("persistent_command") && (xctx->last_command & STARTWIRE));
int rstate; /* (reduced state, without ShiftMask) */
/* this fix uses an alternative method for getting mouse coordinates on KeyPress/KeyRelease
@ -2287,6 +2406,11 @@ int rstate; /* (reduced state, without ShiftMask) */
}
#endif
if(wire_draw_active) {
tclvareval(xctx->top_path, ".statusbar.10 configure -state active -text {DRAW WIRE! }", NULL);
} else {
tclvareval(xctx->top_path, ".statusbar.10 configure -state normal -text { }", NULL);
}
tclvareval(xctx->top_path, ".statusbar.7 configure -text $netlist_type", NULL);
tclvareval(xctx->top_path, ".statusbar.3 delete 0 end;",
xctx->top_path, ".statusbar.3 insert 0 $cadsnap",
@ -2365,6 +2489,7 @@ int rstate; /* (reduced state, without ShiftMask) */
case LeaveNotify:
if(draw_xhair) draw_crosshair(1);
if(snap_cursor && wire_draw_active) draw_snap_cursor(1);
tclvareval(xctx->top_path, ".drw configure -cursor {}" , NULL);
xctx->mouse_inside = 0;
break;
@ -2435,11 +2560,13 @@ int rstate; /* (reduced state, without ShiftMask) */
if(draw_xhair) {
draw_crosshair(1);
}
if(snap_cursor && wire_draw_active) draw_snap_cursor(1);
if(xctx->ui_state & STARTPAN) pan(RUBBER, mx, my);
if(xctx->semaphore >= 2) {
if(draw_xhair) {
draw_crosshair(2);
}
if(snap_cursor && wire_draw_active) draw_snap_cursor(2);
break;
}
dbg(1, "ui_state=%d deltax=%g\n", xctx->ui_state, xctx->deltax);
@ -2533,8 +2660,8 @@ int rstate; /* (reduced state, without ShiftMask) */
}
/* snap crosshair to closest pin or net endpoint */
if(draw_xhair) {
if( ( (xctx->ui_state & (MENUSTART | STARTWIRE) ) || xctx->ui_state == 0 ) &&
(state == ShiftMask) ) {
if( ( (xctx->ui_state & (MENUSTART | STARTWIRE)) || xctx->ui_state == 0 ) &&
(state & ShiftMask) ) {
double x, y, sx, sy;
sx = xctx->mousex_snap;
sy = xctx->mousey_snap;
@ -2548,6 +2675,7 @@ int rstate; /* (reduced state, without ShiftMask) */
draw_crosshair(2);
}
}
if(snap_cursor && wire_draw_active) draw_snap_cursor(2);
break;
case KeyRelease:
@ -2788,21 +2916,15 @@ int rstate; /* (reduced state, without ShiftMask) */
hilight_net_pin_mismatches();
break;
}
if(key== 'W' /* && !xctx->ui_state */ && rstate == 0) { /* create wire snapping to closest instance pin */
if(key== 's' /* && !xctx->ui_state */ && rstate == 0) { /* create wire snapping to closest instance pin */
if(xctx->semaphore >= 2) break;
if(infix_interface) {
snapped_wire(c_snap);
} else {
xctx->ui_state |= MENUSTART;
xctx->ui_state2 = MENUSTARTSNAPWIRE;
}
snapped_wire(c_snap);
break;
}
if(key == 'w' /* && !xctx->ui_state */ && rstate==0) /* place wire. */
{
int prev_state = xctx->ui_state;
if(xctx->semaphore >= 2) break;
if(infix_interface) {
start_wire(xctx->mousex_snap, xctx->mousey_snap);
if(prev_state == STARTWIRE) {
@ -2813,6 +2935,7 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->last_command = 0;
xctx->ui_state |= MENUSTART;
xctx->ui_state2 = MENUSTARTWIRE;
if(prev_state & STARTWIRE) start_wire(xctx->mousex_snap, xctx->mousey_snap);
}
break;
}
@ -2827,6 +2950,12 @@ int rstate; /* (reduced state, without ShiftMask) */
}
/* stuff that can be done reentrantly ... */
tclsetvar("tclstop", "1"); /* stop simulation if any running */
if(xctx->ui_state2 & MENUSTARTWIRE) {
xctx->ui_state2 &= ~MENUSTARTWIRE;
}
if(tclgetboolvar("persistent_command") && (xctx->last_command & STARTWIRE)) {
xctx->last_command &= ~STARTWIRE;
}
break;
}
if(key=='z' && rstate == 0) /* zoom box */
@ -2838,6 +2967,16 @@ int rstate; /* (reduced state, without ShiftMask) */
{
view_zoom(0.0); break;
}
if(key=='z' && EQUAL_MODMASK) /* toggle snap-cursor option */
{
if(tclgetboolvar("snap_cursor")) {
tclsetvar("snap_cursor", "0");
draw_snap_cursor(1);
} else {
tclsetvar("snap_cursor", "1");
if(wire_draw_active) draw_snap_cursor(0);
}
}
if(key=='p' && EQUAL_MODMASK) /* add symbol pin */
{
xctx->push_undo();
@ -3030,7 +3169,7 @@ int rstate; /* (reduced state, without ShiftMask) */
draw(); /* needed to ungrey or grey out components due to *_ignore attribute */
break;
}
if(key=='s' && rstate == 0 ) /* simulate */
if(key=='r' && rstate == ControlMask ) /* simulate */
{
if(xctx->semaphore >= 2) break;
if(waves_selected(event, key, state, button)) {
@ -3550,6 +3689,16 @@ int rstate; /* (reduced state, without ShiftMask) */
place_net_label(0);
break;
}
if(key=='L' && rstate == 0) { /* toggle orthogonal routing */
if(tclgetboolvar("orthogonal_wiring")){
tclsetboolvar("orthogonal_wiring", 0);
xctx->manhattan_lines = 0;
} else {
tclsetboolvar("orthogonal_wiring", 1);
}
redraw_w_a_l_r_p_rubbers();
break;
}
if(key=='F' && rstate == 0) /* flip */
{
if(xctx->ui_state & STARTMOVE) move_objects(FLIP,0,0,0);
@ -4113,7 +4262,18 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->drag_elements = 0;
if(tclgetboolvar("persistent_command") && xctx->last_command) {
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);
if(xctx->last_command == STARTWIRE){
if(tclgetboolvar("snap_cursor")
&& (xctx->prev_snapx == xctx->mousex_snap
&& xctx->prev_snapy == xctx->mousey_snap)
&& (xctx->ui_state & STARTWIRE)
&& xctx->closest_pin_found){
new_wire(PLACE|END, xctx->mousex_snap, xctx->mousey_snap);
xctx->ui_state &= ~STARTWIRE;
}
else
start_wire(xctx->mousex_snap, xctx->mousey_snap);
}
break;
}
/* handle all object insertions started from Tools/Edit menu */
@ -4242,12 +4402,12 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->semaphore = savesem;
}
/* end wire creation when dragging in intuitive interface from an inst pin or wire endpoint */
else if(state == Button1Mask && xctx->intuitive_interface &&
(xctx->ui_state & STARTWIRE) && !(xctx->ui_state & MENUSTART)) {
if(end_place_move_copy_zoom()) break;
}
/* end wire creation when dragging in intuitive interface from an inst pin ow wire endpoint */
/*else if(state == Button1Mask && xctx->intuitive_interface
* && (xctx->ui_state & STARTWIRE) && !(xctx->ui_state & MENUSTART)) {*/
/* if(end_place_move_copy_zoom()) break;*/
/*}*/
/* end intuitive_interface copy or move */
if(xctx->ui_state & STARTCOPY && xctx->drag_elements) {
copy_objects(END);
@ -4295,13 +4455,15 @@ int rstate; /* (reduced state, without ShiftMask) */
xctx->mousex_snap, xctx->mousey_snap, xctx->lastsel, xctx->sch_path[xctx->currsch] );
statusmsg(str,1);
}
/* clear start from menu flag or infix_interface=0 start commands */
if(xctx->ui_state & MENUSTART) {
xctx->ui_state &= ~MENUSTART;
break;
}
if(draw_xhair) draw_crosshair(3); /* restore crosshair when selecting / unselecting */
if(snap_cursor && wire_draw_active) draw_snap_cursor(0);
break;
case -3: /* double click : edit prop */
if( waves_selected(event, key, state, button)) {
@ -4325,6 +4487,8 @@ int rstate; /* (reduced state, without ShiftMask) */
edit_property(0);
} else {
if(xctx->ui_state & STARTWIRE) {
redraw_w_a_l_r_p_rubbers();
start_wire(mx, my);
xctx->ui_state &= ~STARTWIRE;
}
if(xctx->ui_state & STARTLINE) {

View File

@ -185,7 +185,7 @@ static void find_closest_line(double mx, double my)
/* snap wire to closest pin or net endpoint (if it is inside the current screen viewport) */
/* use spatial hash table iterators to avoid O(N) */
void find_closest_net_or_symbol_pin(double mx, double my, double *x, double *y)
int find_closest_net_or_symbol_pin(double mx, double my, double *x, double *y)
{
double x1, y1, x2, y2;
Iterator_ctx ctx;
@ -193,6 +193,7 @@ void find_closest_net_or_symbol_pin(double mx, double my, double *x, double *y)
Wireentry *wireptr;
double curr_dist = DBL_MAX;
double xx, yy, dist, min_dist_x = xctx->mousex_snap, min_dist_y = xctx->mousey_snap;
int found_net_or_pin = 0;
x1 = X_TO_XSCHEM(xctx->areax1);
y1 = Y_TO_XSCHEM(xctx->areay1);
@ -218,6 +219,7 @@ void find_closest_net_or_symbol_pin(double mx, double my, double *x, double *y)
curr_dist = dist;
min_dist_x = xx;
min_dist_y = yy;
found_net_or_pin = 1;
}
}
}
@ -236,6 +238,7 @@ void find_closest_net_or_symbol_pin(double mx, double my, double *x, double *y)
curr_dist = dist;
min_dist_x = xx;
min_dist_y = yy;
found_net_or_pin = 1;
}
xx = wire[i].x2;
yy = wire[i].y2;
@ -245,11 +248,13 @@ void find_closest_net_or_symbol_pin(double mx, double my, double *x, double *y)
curr_dist = dist;
min_dist_x = xx;
min_dist_y = yy;
found_net_or_pin = 1;
}
}
*x = min_dist_x;
*y = min_dist_y;
return found_net_or_pin;
}
#if 0

View File

@ -646,6 +646,9 @@ static void alloc_xschem_data(const char *top_path, const char *win_path)
xctx->enable_drill = 0;
xctx->prev_set_modify = -1;
xctx->prev_crossx = xctx->prev_crossy = 0.0;
xctx->prev_gridx = xctx->prev_gridy = 0.0;
xctx->prev_snapx = xctx->prev_snapy = 0.0;
xctx->closest_pin_found = 0;
xctx->mouse_inside = 0;
xctx->pending_fullzoom = 0;
my_strncpy(xctx->hiersep, ".", S(xctx->hiersep));

View File

@ -1049,6 +1049,9 @@ typedef struct {
double p_xx1,p_xx2,p_yy1,p_yy2;
/* draw_crosshair */
double prev_crossx, prev_crossy;
double prev_gridx, prev_gridy;
double prev_snapx, prev_snapy;
int closest_pin_found;
int mouse_inside;
/* set_modify */
int prev_set_modify;
@ -1396,7 +1399,8 @@ extern int callback(const char *winpath, int event, int mx, int my, KeySym key,
int button, int aux, int state);
extern void resetwin(int create_pixmap, int clear_pixmap, int force, int w, int h);
extern Selected find_closest_obj(double mx,double my, int override_lock);
extern void find_closest_net_or_symbol_pin(double mx,double my, double *x, double *y);
/*extern void find_closest_net_or_symbol_pin(double mx,double my, double *x, double *y);*/
extern int find_closest_net_or_symbol_pin(double mx,double my, double *x, double *y);
extern void drawline(int c, int what, double x1,double y1,double x2,double y2, int dash, void *ct);
extern void draw_xhair_line(GC gc, int size, double linex1, double liney1, double linex2, double liney2);

View File

@ -7654,10 +7654,10 @@ set tctx::global_list {
PDK_ROOT PDK SKYWATER_MODELS SKYWATER_STDCELLS
INITIALINSTDIR INITIALLOADDIR INITIALPROPDIR INITIALTEXTDIR XSCHEM_LIBRARY_PATH
add_all_windows_drives auto_hilight auto_hilight_graph_nodes autofocus_mainwindow
autotrim_wires bespice_listen_port big_grid_points bus_replacement_char cadgrid cadlayers
autotrim_wires orthogonal_wiring snap_cursor bespice_listen_port big_grid_points bus_replacement_char cadgrid cadlayers
cadsnap cairo_font_name cairo_font_scale change_lw color_ps tctx::colors compare_sch constr_mv
copy_cell crosshair_layer crosshair_size cursor_2_hook custom_label_prefix custom_token
dark_colors dark_colorscheme dark_gui_colorscheme delay_flag
copy_cell crosshair_layer crosshair_size cursor_2_hook snap_cursor_size custom_label_prefix custom_token
dark_colors dark_colorscheme dark_gui_colorscheme delay_flag
dim_bg dim_value disable_unique_names do_all_inst draw_crosshair
draw_grid draw_grid_axes draw_window edit_prop_pos edit_prop_size
edit_symbol_prop_new_sel editprop_sympath en_hilight_conn_inst enable_dim_bg enable_stretch
@ -7973,6 +7973,7 @@ proc pack_widgets { { topwin {} } } {
pack $topwin.statusbar.6 -side left
pack $topwin.statusbar.7 -side left
pack $topwin.statusbar.10 -side left
pack $topwin.statusbar.11 -side left
pack $topwin.statusbar.9 -side left
pack $topwin.statusbar.8 -side left
pack $topwin.statusbar.1 -side left -fill x
@ -8073,8 +8074,8 @@ proc build_widgets { {topwin {} } } {
global recentfile color_ps transparent_svg menu_debug_var enable_stretch
global netlist_show flat_netlist split_files compare_sch intuitive_interface
global draw_grid big_grid_points sym_txt change_lw incr_hilight symbol_width
global cadsnap cadgrid draw_window toolbar_visible hide_symbols undo_type
global disable_unique_names persistent_command autotrim_wires en_hilight_conn_inst
global cadsnap cadgrid draw_window toolbar_visible hide_symbols undo_type snap_cursor
global disable_unique_names persistent_command autotrim_wires infix_interface orthogonal_wiring en_hilight_conn_inst
global local_netlist_dir editor netlist_type netlist_dir spiceprefix initial_geometry
if { $dark_gui_colorscheme} {
set selectcolor white
@ -8197,6 +8198,10 @@ proc build_widgets { {topwin {} } } {
-onvalue disk -offvalue memory -command {switch_undo}
$topwin.menubar.option add checkbutton -label "Enable stretch" -variable enable_stretch \
-selectcolor $selectcolor -accelerator Y
$topwin.menubar.option add checkbutton -label "Enable infix-interface" -variable infix_interface \
-selectcolor $selectcolor
$topwin.menubar.option add checkbutton -label "Enable orthogonal wiring" -variable orthogonal_wiring \
-selectcolor $selectcolor -accelerator Shift-L
$topwin.menubar.option add checkbutton -label "Unsel. partial sel. wires after stretch move" \
-selectcolor $selectcolor -variable unselect_partial_sel_wires
@ -8215,6 +8220,8 @@ proc build_widgets { {topwin {} } } {
$topwin.menubar.option add checkbutton -label "Draw crosshair" \
-variable draw_crosshair -selectcolor $selectcolor -accelerator {Alt-X}
$topwin.menubar.option add checkbutton -label "Draw persistent snap cursor" -variable snap_cursor \
-selectcolor $selectcolor -accelerator {Alt-Z}
$topwin.menubar.option add command -label "Replace \[ and \] for buses in SPICE netlist" \
-command {
@ -8713,7 +8720,8 @@ tclcommand=\"xschem raw_read \$netlist_dir/[file tail [file rootname [xschem get
entry_replace_selection $topwin.statusbar.5
label $topwin.statusbar.6 -text "MODE:"
label $topwin.statusbar.7 -width 7
label $topwin.statusbar.10 -text {Stretch:}
label $topwin.statusbar.11 -text {Stretch:}
label $topwin.statusbar.10 -activebackground green -text {}
label $topwin.statusbar.9 -textvariable enable_stretch
label $topwin.statusbar.8 -activebackground red -text {}
add_toolbuttons $topwin
@ -9098,6 +9106,7 @@ set_ne ps_page_title 1 ;# add a title in the top left page corner
set_ne draw_crosshair 0
set_ne crosshair_layer 8 ;# Yellow
set_ne crosshair_size 0
set_ne snap_cursor_size 6
set_ne ps_paper_size {a4 842 595}
set_ne transparent_svg 0
set_ne only_probes 0 ; # 20110112
@ -9127,8 +9136,10 @@ set_ne big_grid_points 0
set_ne draw_grid_axes 1
set_ne persistent_command 0
set_ne intuitive_interface 1
set_ne infix_interface 1
set_ne autotrim_wires 0
set_ne infix_interface 0
set_ne snap_cursor 0
set_ne orthogonal_wiring 1
set_ne compare_sch 0
set_ne disable_unique_names 0
set_ne sym_txt 1

View File

@ -226,6 +226,18 @@
#### if not set show selected items at end of drag. Default: enabled (1)
# set incremental_select 0
#### if set to 1, pressing 'w', 'l', 'r', 'C', or 'Ctrl+C' will immediately place the
#### corresponding component at current cursor position without waiting for Button1 (LMB) click.
#### This setting can be disabled via the Options menu
#### default: 0
# set infix_interface 1
#### wires are drawn in free-form mode with this mode enabled (default).
#### if set to 0, wires drawn on the schematic will no longer strictly
#### follow orthogonal routes to connect two distinct points toegther.
#### default: 1
# set orthogonal_wiring 0
#### if set to 1 automatically join/trim wires while editing
#### this may slow down on rally big designs. Can be disabled via menu
#### default: 0
@ -271,7 +283,10 @@
# set crosshair_layer 8
#### set crosshair size; Default: 0 (full screen spanning crosshair)
# set crosshair_size 5
set crosshair_size 2
#### set snap_cursor size; Default: 3 (Diamond-shaped cursor that snaps to nearest circuit endpoint)
# set snap_cursor size 3
#### enable to scale grid point size as done with lines at close zoom, default: 0
# set big_grid_points 0