diff --git a/doc/xschem_man/xschem_man.html b/doc/xschem_man/xschem_man.html
index fbb6d5e2..9837362f 100644
--- a/doc/xschem_man/xschem_man.html
+++ b/doc/xschem_man/xschem_man.html
@@ -63,6 +63,7 @@
[Video] Link documentation to components/symbols
[Video] Use rawtovcd to show ngspice waveforms in gtkwave
[Video] Run a Verilog simulation with XSCHEM and icarus Verilog
+ [Video] See logic propagation of nets live in xschem without using a backend simulator
[Video] Probe xschem nets into the GAW waveform viewer
[Video] Creating a symbol
[Video] Instantiating schematics instead of symbols (LCC, Local Custom Cell)
diff --git a/src/actions.c b/src/actions.c
index 638189ed..0845c460 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -1371,21 +1371,25 @@ void zoom_full(int dr, int sel, int flags, double shrink)
}
dbg(1, "zoom_full(): dr=%d sel=%d flags=%d areaw=%d, areah=%d\n", sel, dr, flags, xctx->areaw, xctx->areah);
if(flags & 1) change_linewidth(-1.);
- if(dr && has_x) draw();
+ if(dr && has_x) {
+ draw();
+ redraw_w_a_l_r_p_rubbers();
+ }
}
void view_zoom(double z)
{
- double factor;
- /* int i; */
- factor = z!=0.0 ? z : CADZOOMSTEP;
- if(xctx->zoomzoom/= factor;
- xctx->mooz=1/xctx->zoom;
- xctx->xorigin=-xctx->mousex_snap+(xctx->mousex_snap+xctx->xorigin)/factor;
- xctx->yorigin=-xctx->mousey_snap+(xctx->mousey_snap+xctx->yorigin)/factor;
- change_linewidth(-1.);
- draw();
+ double factor;
+ /* int i; */
+ factor = z!=0.0 ? z : CADZOOMSTEP;
+ if(xctx->zoomzoom/= factor;
+ xctx->mooz=1/xctx->zoom;
+ xctx->xorigin=-xctx->mousex_snap+(xctx->mousex_snap+xctx->xorigin)/factor;
+ xctx->yorigin=-xctx->mousey_snap+(xctx->mousey_snap+xctx->yorigin)/factor;
+ change_linewidth(-1.);
+ draw();
+ redraw_w_a_l_r_p_rubbers();
}
void view_unzoom(double z)
@@ -1407,6 +1411,7 @@ void view_unzoom(double z)
}
change_linewidth(-1.);
draw();
+ redraw_w_a_l_r_p_rubbers();
}
void set_viewport_size(int w, int h, double lw)
@@ -1489,6 +1494,7 @@ void zoom_rectangle(int what)
xctx->mooz=1/xctx->zoom;
change_linewidth(-1.);
draw();
+ redraw_w_a_l_r_p_rubbers();
dbg(1, "zoom_rectangle(): coord: %.16g %.16g %.16g %.16g zoom=%.16g\n",
xctx->nl_x1,xctx->nl_y1,xctx->mousex_snap, xctx->mousey_snap,xctx->zoom);
}
diff --git a/src/callback.c b/src/callback.c
index e03bacbd..dd834440 100644
--- a/src/callback.c
+++ b/src/callback.c
@@ -22,6 +22,31 @@
#include "xschem.h"
+void redraw_w_a_l_r_p_rubbers(void)
+{
+ if(xctx->ui_state & STARTWIRE) {
+ if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
+ if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
+ new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
+ }
+ if(xctx->ui_state & STARTARC) {
+ if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
+ if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
+ new_arc(RUBBER, 0);
+ }
+ if(xctx->ui_state & STARTLINE) {
+ if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
+ if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
+ new_line(RUBBER);
+ }
+ if(xctx->ui_state & STARTRECT) new_rect(RUBBER);
+ if(xctx->ui_state & STARTPOLYGON) {
+ if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
+ if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
+ new_polygon(RUBBER);
+ }
+}
+
void start_line(double mx, double my)
{
xctx->last_command = STARTLINE;
@@ -220,21 +245,7 @@ int callback(int event, int mx, int my, KeySym key,
select_rect(RUBBER,1);
}
}
- if(xctx->ui_state & STARTWIRE) {
- if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
- if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
- new_wire(RUBBER, xctx->mousex_snap, xctx->mousey_snap);
- }
- if(xctx->ui_state & STARTARC) {
- if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
- if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
- new_arc(RUBBER, 0);
- }
- if(xctx->ui_state & STARTLINE) {
- if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
- if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
- new_line(RUBBER);
- }
+
if(xctx->ui_state & STARTMOVE) {
if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
@@ -245,12 +256,8 @@ int callback(int event, int mx, int my, KeySym key,
if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
copy_objects(RUBBER);
}
- if(xctx->ui_state & STARTRECT) new_rect(RUBBER);
- if(xctx->ui_state & STARTPOLYGON) {
- if(horizontal_move) xctx->mousey_snap = xctx->my_double_save;
- if(vertical_move) xctx->mousex_snap = xctx->mx_double_save;
- new_polygon(RUBBER);
- }
+
+ redraw_w_a_l_r_p_rubbers();
/* start of a mouse area select */
if(!(xctx->ui_state & STARTPOLYGON) && (state&Button1Mask) && !(xctx->ui_state & STARTWIRE) &&
!(xctx->ui_state & STARTPAN2) && !(state & Mod1Mask) &&
@@ -615,6 +622,7 @@ int callback(int event, int mx, int my, KeySym key,
xctx->xorigin=-xctx->mousex_snap+xctx->areaw*xctx->zoom/2.0;
xctx->yorigin=-xctx->mousey_snap+xctx->areah*xctx->zoom/2.0;
draw();
+ redraw_w_a_l_r_p_rubbers();
break;
}
if(key=='5' && state == 0) { /* 20110112 display only probes */
@@ -639,24 +647,28 @@ int callback(int event, int mx, int my, KeySym key,
{
xctx->xorigin+=-CADMOVESTEP*xctx->zoom;
draw();
+ redraw_w_a_l_r_p_rubbers();
break;
}
if(key==XK_Left) /* right */
{
xctx->xorigin-=-CADMOVESTEP*xctx->zoom;
draw();
+ redraw_w_a_l_r_p_rubbers();
break;
}
if(key==XK_Down) /* down */
{
xctx->yorigin+=-CADMOVESTEP*xctx->zoom;
draw();
+ redraw_w_a_l_r_p_rubbers();
break;
}
if(key==XK_Up) /* up */
{
xctx->yorigin-=-CADMOVESTEP*xctx->zoom;
draw();
+ redraw_w_a_l_r_p_rubbers();
break;
}
if(key=='q' && state == ControlMask) /* exit */
@@ -1402,14 +1414,17 @@ int callback(int event, int mx, int my, KeySym key,
else if(button==Button4 && (state & ShiftMask) && !(state & Button2Mask)) {
xctx->xorigin+=-CADMOVESTEP*xctx->zoom/2.;
draw();
+ redraw_w_a_l_r_p_rubbers();
}
else if(button==Button5 && (state & ShiftMask) && !(state & Button2Mask)) {
xctx->xorigin-=-CADMOVESTEP*xctx->zoom/2.;
draw();
+ redraw_w_a_l_r_p_rubbers();
}
else if(button==Button4 && (state & ControlMask) && !(state & Button2Mask)) {
xctx->yorigin+=-CADMOVESTEP*xctx->zoom/2.;
draw();
+ redraw_w_a_l_r_p_rubbers();
}
else if(button==Button5 && (state & ControlMask) && !(state & Button2Mask)) {
xctx->yorigin-=-CADMOVESTEP*xctx->zoom/2.;
@@ -1654,7 +1669,7 @@ int callback(int event, int mx, int my, KeySym key,
xctx->mx_save = mx; xctx->my_save = my;
xctx->mx_double_save=xctx->mousex_snap;
xctx->my_double_save=xctx->mousey_snap;
-
+ redraw_w_a_l_r_p_rubbers();
break;
}
dbg(1, "callback(): ButtonRelease ui_state=%ld state=%d\n",xctx->ui_state,state);
diff --git a/src/xschem.h b/src/xschem.h
index ab0b5940..a4027e5d 100644
--- a/src/xschem.h
+++ b/src/xschem.h
@@ -996,6 +996,7 @@ extern void new_arc(int what, double sweep);
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);
+extern void redraw_w_a_l_r_p_rubbers(void); /* redraw wire, arcs, line, polygon rubbers */
extern void copy_objects(int what);
extern void find_inst_to_be_redrawn(const char *node);
extern void find_inst_hash_clear(void);
diff --git a/tests/cleanup_debug_file.awk b/tests/cleanup_debug_file.awk
index 905d3947..158f4909 100644
--- a/tests/cleanup_debug_file.awk
+++ b/tests/cleanup_debug_file.awk
@@ -35,6 +35,8 @@ function replace_pattern(old, new)
replace_pattern("created dir.*$", "created dir ***Removed***")
replace_pattern("undo_dirname.*$", "undo_dirname ***Removed***")
replace_pattern("framewinID.*$", "framewinID ***Removed***")
+ replace_pattern("framewin parentID.*$", "framewin parentID ***Removed***")
+ replace_pattern("framewin child.*$", "framewin child ***Removed***")
replace_pattern("resetwin.*$", "resetwin ***Removed***")
replace_pattern("read_xschem_file.*$", "read_xschem_file ***Removed***")
replace_pattern("EMERGENCY SAVE DIR dir.*$", "EMERGENCY SAVE DIR dir ***Removed***")
@@ -46,6 +48,9 @@ function replace_pattern(old, new)
replace_pattern("l_s_d[:(:][:):]: fopen.*$", "load_sym_def(): fopen ***Removed***")
replace_pattern("l_s_d[:(:][:):]: fclose.*$", "load_sym_def(): fclose ***Removed***")
replace_pattern("drawing string: str=.*$", "drawing string: str=***Removed***")
+ replace_pattern("zoom_full[:(:][:):]:.*$", "zoom_full(): ***Removed***")
+ replace_pattern("bbox[:(:][:):]: bbox=.*$", "bbox(): bbox=***Removed***")
+ replace_pattern("draw_string()[:(:][:):]:.*$", "draw_string(): ***Removed***")
__a[__lines++] = $0
}