diff --git a/src/callback.c b/src/callback.c index 92e82414..bbd75c0f 100644 --- a/src/callback.c +++ b/src/callback.c @@ -102,6 +102,7 @@ void redraw_w_a_l_r_p_z_rubbers(int force) { double mx = xctx->mousex_snap; double my = xctx->mousey_snap; + double origin_shifted_x2, origin_shifted_y2; if(!force && xctx->mousex_snap == xctx->prev_rubberx && xctx->mousey_snap == xctx->prev_rubbery) return; @@ -110,17 +111,17 @@ void redraw_w_a_l_r_p_z_rubbers(int force) if(xctx->constr_mv == 1) my = xctx->my_double_save; if(xctx->constr_mv == 2) mx = xctx->mx_double_save; if(tclgetboolvar("orthogonal_wiring")) { - /* Origin shift the cartesian coordinate p2(x2,y2) w.r.t. p1(x1,y1) */ - double origin_shifted_x2 = xctx->nl_x2 - xctx->nl_x1, origin_shifted_y2 = xctx->nl_y2 - xctx->nl_y1; new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap); - /* Draw whichever component of the resulting orthogonal-wire is bigger - * (either horizontal or vertical), first */ + /* Origin shift the cartesian coordinate p2(x2,y2) w.r.t. p1(x1,y1) */ + 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; + xctx->manhattan_lines = 1; } else { - xctx->manhattan_lines = 2; + xctx->manhattan_lines = 2; } - } + } new_wire(RUBBER, mx, my); } if(xctx->ui_state & STARTARC) { @@ -238,7 +239,7 @@ static void start_wire(double mx, double my) xctx->constr_mv = xctx->manhattan_lines; new_wire(CLEAR, mx, my); redraw_w_a_l_r_p_z_rubbers(1); - } + } if(xctx->constr_mv != 2) { xctx->mx_double_save = mx; } @@ -248,13 +249,12 @@ static void start_wire(double mx, double my) if(xctx->constr_mv == 1) my = xctx->my_double_save; if(xctx->constr_mv == 2) mx = xctx->mx_double_save; } else { - xctx->manhattan_lines = 1; xctx->mx_double_save=mx; xctx->my_double_save=my; } new_wire(PLACE,mx, my); - if(tclgetboolvar("orthogonal_wiring") && !tclgetboolvar("constr_mv")) { - xctx->constr_mv = 0; + if(tclgetboolvar("orthogonal_wiring") && !tclgetboolvar("constr_mv")){ + xctx->constr_mv = 0; } } @@ -1523,82 +1523,99 @@ void draw_crosshair(int what, int state) xctx->draw_pixmap = sdp; } -void find_snap_position(double *x, double *y, int pos_changed) { - if (!pos_changed) { - *x = xctx->prev_snapx; - *y = xctx->prev_snapy; - } else { - xctx->closest_pin_found = find_closest_net_or_symbol_pin( - xctx->mousex, xctx->mousey, x, y); - } -} +/* what == 3 : 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); + double prev_x = xctx->prev_snapx; + double prev_y = xctx->prev_snapy; + dbg(1, "draw_snap_cursor(): what=%d\n", what); + sdw = xctx->draw_window; + sdp = xctx->draw_pixmap; -void draw_snap_cursor_shape(GC gc, double x, double y, int snapcursor_size) { - /* Convert coordinates to screen space */ - double screen_x = X_TO_SCREEN(x); - double screen_y = Y_TO_SCREEN(y); - double left = screen_x - snapcursor_size; - double right = screen_x + snapcursor_size; - double top = screen_y - snapcursor_size; - double bottom = screen_y + snapcursor_size; - int i; - /* Define crosshair lines */ - double lines[4][4]; - lines[0][0] = screen_x; lines[0][1] = top; lines[0][2] = right; lines[0][3] = screen_y; - lines[1][0] = right; lines[1][1] = screen_y; lines[1][2] = screen_x; lines[1][3] = bottom; - lines[2][0] = screen_x; lines[2][1] = bottom; lines[2][2] = left; lines[2][3] = screen_y; - lines[3][0] = left; lines[3][1] = screen_y; lines[3][2] = screen_x; lines[3][3] = top; - /* Draw crosshair lines */ - for (i = 0; i < 4; i++) { - draw_xhair_line(gc, snapcursor_size, lines[i][0], lines[i][1], lines[i][2], lines[i][3]); - } -} - -void erase_snap_cursor(double prev_x, double prev_y, int snapcursor_size) { - if (fix_broken_tiled_fill || !_unix) { - MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], - (int)X_TO_SCREEN(prev_x) - INT_WIDTH(xctx->lw) - snapcursor_size, - (int)Y_TO_SCREEN(prev_y) - INT_WIDTH(xctx->lw) - snapcursor_size, - 2 * INT_WIDTH(xctx->lw) + 2 * snapcursor_size, - 2 * INT_WIDTH(xctx->lw) + 2 * snapcursor_size, - (int)X_TO_SCREEN(prev_x) - INT_WIDTH(xctx->lw) - snapcursor_size, - (int)Y_TO_SCREEN(prev_y) - INT_WIDTH(xctx->lw) - snapcursor_size); - } else { - draw_snap_cursor_shape(xctx->gctiled, prev_x, prev_y, snapcursor_size); - } -} - -/* action = 1 => erase */ -void draw_snap_cursor(int action) { - int snapcursor_size; - int pos_changed; - int prev_draw_window = xctx->draw_window; - int prev_draw_pixmap = xctx->draw_pixmap; - - if (!xctx->mouse_inside) return; /* Early exit if mouse is outside */ - snapcursor_size = tclgetintvar("snap_cursor_size"); - pos_changed = (xctx->mousex_snap != xctx->prev_gridx) || (xctx->mousey_snap != xctx->prev_gridy); - /* Save current drawing context */ + if(!xctx->mouse_inside) return; xctx->draw_pixmap = 0; xctx->draw_window = 1; - /* Erase and redraw the cursor if needed */ - if (action & 1) { - double new_x, new_y; - erase_snap_cursor(xctx->prev_snapx, xctx->prev_snapy, snapcursor_size); - - find_snap_position(&new_x, &new_y, pos_changed); - draw_snap_cursor_shape(xctx->gc[xctx->crosshair_layer],new_x, new_y, snapcursor_size); - - /* Update previous position tracking */ + if(what & 1) { + if(fix_broken_tiled_fill || !_unix) { + MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], + (int)X_TO_SCREEN(prev_x) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size, + (int)Y_TO_SCREEN(prev_y) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size, + 2 * INT_WIDTH(xctx->lw) + 2 * snapcursor_size, + 2 * INT_WIDTH(xctx->lw) + 2 * snapcursor_size, + (int)X_TO_SCREEN(prev_x) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size, + (int)Y_TO_SCREEN(prev_y) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size); + MyXCopyArea(display, xctx->save_pixmap, xctx->window, xctx->gc[0], + (int)X_TO_SCREEN(prev_x) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size, + (int)Y_TO_SCREEN(prev_y) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size, + 2 * INT_WIDTH(xctx->lw) + 2 * snapcursor_size, + 2 * INT_WIDTH(xctx->lw) + 2 * snapcursor_size, + (int)X_TO_SCREEN(prev_x) - 1 * INT_WIDTH(xctx->lw) - snapcursor_size, + (int)Y_TO_SCREEN(prev_y) - 1 * 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 = new_x; - xctx->prev_snapy = new_y; + xctx->prev_snapx = x; + xctx->prev_snapy = y; } draw_selection(xctx->gc[SELLAYER], 0); - /* Restore previous drawing context */ - xctx->draw_window = prev_draw_window; - xctx->draw_pixmap = prev_draw_pixmap; + + xctx->draw_window = sdw; + xctx->draw_pixmap = sdp; } /* complete the STARTWIRE, STARTRECT, STARTZOOM, STARTCOPY ... operations */ @@ -2446,12 +2463,13 @@ static void handle_enter_notify(int draw_xhair, int crosshair_size) xctx->mousey_snap = -340; merge_file(1, ".sch"); } + + return; } -static void handle_motion_notify(int event, KeySym key, int state, int rstate, int button, - int mx, int my, int aux, int draw_xhair, int enable_stretch, int snap_cursor, int wire_draw_active) +static void handle_motion_notify(int event, KeySym key, int state, int rstate, int button, + int mx, int my, int aux, int draw_xhair, int enable_stretch, int snap_cursor, int wire_draw_active, char *str) { - char str[PATH_MAX + 100]; if( waves_selected(event, key, state, button)) { waves_callback(event, mx, my, key, button, aux, state); return; @@ -2460,6 +2478,7 @@ static void handle_motion_notify(int event, KeySym key, int state, int rstate, i draw_crosshair(1, state); /* when moving mouse: first action is delete crosshair, will be drawn later */ if(snap_cursor && wire_draw_active) draw_snap_cursor(1); } + if(snap_cursor && wire_draw_active) draw_snap_cursor(1); /* pan schematic */ if(xctx->ui_state & STARTPAN) pan(RUBBER, mx, my); @@ -2569,14 +2588,14 @@ static void handle_motion_notify(int event, KeySym key, int state, int rstate, i draw_crosshair(2, state); /* what = 2(draw) */ } if(snap_cursor && wire_draw_active) draw_snap_cursor(2); + + return; } -static void handle_key_press(int event, KeySym key, int state, int rstate, int mx, int my, - int button, int aux, int infix_interface, int enable_stretch, const char *win_path, double c_snap) +static void handle_key_press(int event, KeySym key, int state, int rstate, int mx, int my, + int button, int aux, int infix_interface, int enable_stretch, const char *win_path, double c_snap, + int cadence_compat, int wire_draw_active, int snap_cursor, char *str) { - char str[PATH_MAX + 100]; - int cadence_compat = tclgetboolvar("cadence_compat"); - int snap_cursor = tclgetboolvar("snap_cursor"); if(key==' ') { if(xctx->ui_state & STARTWIRE) { /* & instead of == 20190409 */ new_wire(RUBBER|CLEAR, xctx->mousex_snap, xctx->mousey_snap); @@ -2811,20 +2830,15 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m hilight_net_pin_mismatches(); return; } - if(key== 'W' /* && !xctx->ui_state */ && rstate == 0 && !cadence_compat) { /* create wire snapping to closest instance pin */ + if(key== 'W' /* && !xctx->ui_state */ && rstate == 0 && !cadence_compat) { /* create wire snapping to closest instance pin (original keybind) */ if(xctx->semaphore >= 2) return; - if(infix_interface) { - snapped_wire(c_snap); - } else { - xctx->ui_state |= MENUSTART; - xctx->ui_state2 = MENUSTARTSNAPWIRE; - } + snapped_wire(c_snap); return; } if(key== 's' /* && !xctx->ui_state */ && rstate == 0 && cadence_compat) { /* create wire snapping to closest instance pin (cadence keybind) */ - if(xctx->semaphore >= 2) return; - snapped_wire(c_snap); - return; + if(xctx->semaphore >= 2) return; + snapped_wire(c_snap); + return; } if(key == 'w' /* && !xctx->ui_state */ && rstate==0) /* place wire. */ { @@ -2841,6 +2855,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m xctx->last_command = 0; xctx->ui_state |= MENUSTART; xctx->ui_state2 = MENUSTARTWIRE; + if(prev_state & STARTWIRE) start_wire(xctx->mousex_snap, xctx->mousey_snap); } return; } @@ -2874,6 +2889,19 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m { view_zoom(0.0); return; } + if(key=='z' && EQUAL_MODMASK && cadence_compat) /* toggle snap-cursor option */ + { + if(tclgetboolvar("snap_cursor")) { + tclsetvar("snap_cursor", "0"); + draw_snap_cursor(1); + xctx->closest_pin_found = 0; + xctx->prev_snapx = 0.0; + xctx->prev_snapy = 0.0; + } else { + tclsetvar("snap_cursor", "1"); + if(wire_draw_active) draw_snap_cursor(3); + } + } if(key=='p' && EQUAL_MODMASK) /* add symbol pin */ { xctx->push_undo(); @@ -3066,12 +3094,7 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m draw(); /* needed to ungrey or grey out components due to *_ignore attribute */ return; } - if(key== 's' /* && !xctx->ui_state */ && rstate == 0 && cadence_compat) { /* create wire snapping to closest instance pin (cadence keybind) */ - if(xctx->semaphore >= 2) return; - snapped_wire(c_snap); - return; - } - if((key=='s' && rstate == 0) && !cadence_compat) /* simulate, original binding for s */ + if((key=='s' && rstate == 0) && !cadence_compat) /* simulate (original keybind) */ { if(xctx->semaphore >= 2) return; if(waves_selected(event, key, state, button)) { @@ -3596,6 +3619,16 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m place_net_label(0); return; } + 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_z_rubbers(1); + return; + } if(key=='F' && rstate == 0) /* flip */ { if(xctx->ui_state & STARTMOVE) move_objects(FLIP,0,0,0); @@ -4061,14 +4094,16 @@ static void handle_key_press(int event, KeySym key, int state, int rstate, int m break_wires_at_pins(1); return; } + + return; } static void handle_button_press(int event, int state, int rstate, KeySym key, int button, int mx, int my, - double c_snap, int draw_xhair, int crosshair_size, int enable_stretch, int aux ) + double c_snap, int draw_xhair, int crosshair_size, int enable_stretch, int aux) { + dbg(1, "callback(): ButtonPress ui_state=%d state=%d\n",xctx->ui_state,state); int use_cursor_for_sel = tclgetintvar("use_cursor_for_selection"); int excl = xctx->ui_state & (STARTWIRE | STARTRECT | STARTLINE | STARTPOLYGON | STARTARC); - dbg(1, "callback(): ButtonPress ui_state=%d state=%d\n",xctx->ui_state,state); if(waves_selected(event, key, state, button)) { waves_callback(event, mx, my, key, button, aux, state); return; @@ -4309,12 +4344,13 @@ static void handle_button_press(int event, int state, int rstate, KeySym key, in return; } /* if(!excl) */ } /* button==Button1 */ + + return; } -static void handle_button_release(int event, KeySym key, int state, int button, int mx, int my, - int aux, double c_snap, int enable_stretch, int draw_xhair, int snap_cursor, int wire_draw_active) +static void handle_button_release(int event, KeySym key, int state, int button, int mx, int my, + int aux, double c_snap, int enable_stretch, int draw_xhair, int snap_cursor, int wire_draw_active, char *str) { - char str[PATH_MAX + 100]; if(waves_selected(event, key, state, button)) { waves_callback(event, mx, my, key, button, aux, state); return; @@ -4401,7 +4437,7 @@ static void handle_button_release(int event, KeySym key, int state, int button, 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; @@ -4409,10 +4445,12 @@ static void handle_button_release(int event, KeySym key, int state, int button, } if(draw_xhair) draw_crosshair(3, state); /* restore crosshair when selecting / unselecting */ if(snap_cursor && wire_draw_active) draw_snap_cursor(3); + + return; } static void handle_double_click(int event, int state, KeySym key, int button, - int mx, int my, int aux, int cadence_compat ) + int mx, int my, int aux, int cadence_compat) { if( waves_selected(event, key, state, button)) { waves_callback(event, mx, my, key, button, aux, state); @@ -4435,10 +4473,8 @@ static void handle_double_click(int event, int state, KeySym key, int button, edit_property(0); } else { if(xctx->ui_state & STARTWIRE) { - if( cadence_compat ) { - redraw_w_a_l_r_p_z_rubbers(1); - start_wire(mx, my); - } + redraw_w_a_l_r_p_z_rubbers(1); + start_wire(mx, my); xctx->ui_state &= ~STARTWIRE; } if(xctx->ui_state & STARTLINE) { @@ -4634,29 +4670,32 @@ int wire_draw_active = (xctx->ui_state & STARTWIRE) || case MotionNotify: handle_motion_notify(event, key, state, rstate, button, mx, my, - aux, draw_xhair, enable_stretch, snap_cursor, wire_draw_active); + aux, draw_xhair, enable_stretch, + snap_cursor, wire_draw_active, str); break; case KeyRelease: break; case KeyPress: - handle_key_press(event, key, state, rstate, mx, my, button, aux, - infix_interface, enable_stretch, win_path, c_snap); - break; + handle_key_press(event, key, state, rstate, mx, my, button, aux, + infix_interface, enable_stretch, win_path, c_snap, + cadence_compat, wire_draw_active, snap_cursor, str); + break; case ButtonPress: handle_button_press(event, state, rstate, key, button, mx, my, - c_snap, draw_xhair, crosshair_size, enable_stretch, aux); + c_snap, draw_xhair, crosshair_size, enable_stretch, aux); break; case ButtonRelease: - handle_button_release(event, key, state, button, mx, my, aux, c_snap, enable_stretch, draw_xhair, snap_cursor, wire_draw_active); + handle_button_release(event, key, state, button, mx, my, aux, c_snap, enable_stretch, + draw_xhair, snap_cursor, wire_draw_active, str); break; - + case -3: /* double click : edit prop */ - handle_double_click(event, state, key, button, mx, my, aux, cadence_compat); - break; + handle_double_click(event, state, key, button, mx, my, aux, cadence_compat); + break; default: dbg(1, "callback(): Event:%d\n",event); @@ -4674,6 +4713,6 @@ int wire_draw_active = (xctx->ui_state & STARTWIRE) || if(old_win_path[0]) dbg(1, "callback(): reset old_win_path: %s <- %s\n", old_win_path, win_path); my_strncpy(old_win_path, win_path, S(old_win_path)); } - return 0; + return 0; } diff --git a/src/xschem.tcl b/src/xschem.tcl index a3ed1fd3..8311eaab 100644 --- a/src/xschem.tcl +++ b/src/xschem.tcl @@ -7851,9 +7851,9 @@ 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 - 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 + autotrim_wires orthogonal_wiring snap_cursor bespice_listen_port big_grid_points bus_replacement_char cadgrid cadlayers + cadsnap cadence_compat 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 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 @@ -8271,9 +8271,9 @@ proc build_widgets { {topwin {} } } { global dark_gui_colorscheme draw_crosshair 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 draw_grid big_grid_points sym_txt change_lw incr_hilight symbol_width cadence_compat + 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 @@ -8396,6 +8396,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 @@ -8414,6 +8418,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 { @@ -9307,6 +9313,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 @@ -9336,13 +9343,12 @@ 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 orthogonal_wiring 0 -set_ne snap_cursor 0 -set_ne snap_cursor_size 6 -set_ne cadence_compat 0 set_ne use_cursor_for_selection 0 set_ne autotrim_wires 0 +set_ne cadence_compat 0 +set_ne infix_interface 1 +set_ne snap_cursor 0 +set_ne orthogonal_wiring 0 set_ne compare_sch 0 set_ne disable_unique_names 0 set_ne sym_txt 1 diff --git a/src/xschemrc b/src/xschemrc index b472f338..fd5feedc 100644 --- a/src/xschemrc +++ b/src/xschemrc @@ -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 together. +#### default: 0 +# set orthogonal_wiring 1 + #### 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,16 @@ # set crosshair_layer 8 #### set crosshair size; Default: 0 (full screen spanning crosshair) -# set crosshair_size 5 +# set crosshair_size 2 + +#### enable drawing a diamond-shaped cursor at the closest circuit endpoint. Default: disabled (0) +# set snap_cursor 1 + +#### set snap_cursor_size; Default: 6 (Diamond-shaped cursor that snaps to nearest circuit endpoint) +# set snap_cursor_size 6 + +#### set cadence_compat; Default: 0 (Cadence-style keybinds are not used by default) +# set cadence_compat 1 #### enable drawing a diamond-shaped cursor at the closest circuit endpoint. Default: disabled (0) # set snap_cursor 1