Alt-e, ("xschem schematic_in_new_window" command): preserve zoom factor of parent schematic when popping back
This commit is contained in:
parent
b7fba43ebf
commit
eeb25a8c73
97
src/xinit.c
97
src/xinit.c
|
|
@ -1635,24 +1635,27 @@ static void create_new_window(int *window_count, const char *win_path, const cha
|
||||||
Window win_id = 0LU;
|
Window win_id = 0LU;
|
||||||
char toppath[WINDOW_PATH_SIZE];
|
char toppath[WINDOW_PATH_SIZE];
|
||||||
char prev_window[WINDOW_PATH_SIZE];
|
char prev_window[WINDOW_PATH_SIZE];
|
||||||
int i, n, confirm = 1;
|
int i, n, loaded = 0, confirm = 1;
|
||||||
|
|
||||||
dbg(1, "new_schematic() create: fname=%s *window_count = %d\n", fname, *window_count);
|
dbg(1, "new_schematic() create: fname=%s *window_count = %d\n", fname, *window_count);
|
||||||
|
|
||||||
if(win_path && win_path[0]) confirm = 0;
|
if(win_path && win_path[0]) confirm = 0;
|
||||||
my_strncpy(prev_window, xctx->current_win_path, S(prev_window));
|
my_strncpy(prev_window, xctx->current_win_path, S(prev_window));
|
||||||
if(confirm && fname && fname[0] && check_loaded(fname, toppath)) {
|
if(fname && fname[0] && check_loaded(fname, toppath)) {
|
||||||
char msg[PATH_MAX+100];
|
loaded = 1;
|
||||||
my_snprintf(msg, S(msg),
|
if(confirm) {
|
||||||
"tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] "
|
char msg[PATH_MAX+100];
|
||||||
"-message {Warning: %s already open.}", fname);
|
my_snprintf(msg, S(msg),
|
||||||
if(has_x) {
|
"tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] "
|
||||||
tcleval(msg);
|
"-message {Warning: %s already open.}", fname);
|
||||||
if(strcmp(tclresult(), "ok")) return;
|
if(has_x) {
|
||||||
}
|
tcleval(msg);
|
||||||
else {
|
if(strcmp(tclresult(), "ok")) return;
|
||||||
dbg(0, "create_new_window: %s already open: %s\n", fname, toppath);
|
}
|
||||||
return;
|
else {
|
||||||
|
dbg(0, "create_new_window: %s already open: %s\n", fname, toppath);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(*window_count == 0) {
|
if(*window_count == 0) {
|
||||||
|
|
@ -1717,12 +1720,19 @@ static void create_new_window(int *window_count, const char *win_path, const cha
|
||||||
enable_layers();
|
enable_layers();
|
||||||
build_colors(0.0, 0.0);
|
build_colors(0.0, 0.0);
|
||||||
resetwin(1, 0, 1, 0, 0); /* resetwin(create_pixmap, clear_pixmap, force, w, h) */
|
resetwin(1, 0, 1, 0, 0); /* resetwin(create_pixmap, clear_pixmap, force, w, h) */
|
||||||
xctx->zoom=CADINITIALZOOM;
|
if(!loaded) {
|
||||||
xctx->mooz=1/CADINITIALZOOM;
|
xctx->zoom = CADINITIALZOOM;
|
||||||
xctx->xorigin=CADINITIALX;
|
xctx->mooz = 1 / CADINITIALZOOM;
|
||||||
xctx->yorigin=CADINITIALY;
|
xctx->xorigin = CADINITIALX;
|
||||||
|
xctx->yorigin = CADINITIALY;
|
||||||
|
} else {
|
||||||
|
xctx->zoom = old_xctx->zoom;
|
||||||
|
xctx->mooz =old_xctx->mooz;
|
||||||
|
xctx->xorigin =old_xctx->xorigin;
|
||||||
|
xctx->yorigin =old_xctx->yorigin;
|
||||||
|
}
|
||||||
load_schematic(1, fname, 1, confirm);
|
load_schematic(1, fname, 1, confirm);
|
||||||
if(dr) xctx->pending_fullzoom=1;
|
if(!loaded && dr) xctx->pending_fullzoom=1;
|
||||||
tclvareval("set_bindings ", window_path[n], NULL);
|
tclvareval("set_bindings ", window_path[n], NULL);
|
||||||
if(has_x) {
|
if(has_x) {
|
||||||
tclvareval("set_geom ", toppath, " [xschem get current_name]", NULL);
|
tclvareval("set_geom ", toppath, " [xschem get current_name]", NULL);
|
||||||
|
|
@ -1743,31 +1753,34 @@ static void create_new_window(int *window_count, const char *win_path, const cha
|
||||||
/* non NULL and not empty noconfirm is used to avoid warning for duplicated filenames */
|
/* non NULL and not empty noconfirm is used to avoid warning for duplicated filenames */
|
||||||
static void create_new_tab(int *window_count, const char *noconfirm, const char *fname, int dr)
|
static void create_new_tab(int *window_count, const char *noconfirm, const char *fname, int dr)
|
||||||
{
|
{
|
||||||
int i, confirm = 1;
|
|
||||||
char open_path[WINDOW_PATH_SIZE];
|
char open_path[WINDOW_PATH_SIZE];
|
||||||
char nn[WINDOW_PATH_SIZE];
|
char nn[WINDOW_PATH_SIZE];
|
||||||
char win_path[WINDOW_PATH_SIZE];
|
char win_path[WINDOW_PATH_SIZE];
|
||||||
double save_lw = xctx->lw;
|
double save_lw = xctx->lw;
|
||||||
|
int i, loaded = 0, confirm = 1;
|
||||||
|
|
||||||
dbg(1, "new_schematic() new_tab, creating...\n");
|
dbg(1, "new_schematic() new_tab, creating...\n");
|
||||||
if(noconfirm && noconfirm[0]) confirm = 0;
|
if(noconfirm && noconfirm[0]) confirm = 0;
|
||||||
if(confirm && fname && fname[0] && check_loaded(fname, open_path)) {
|
if(fname && fname[0] && check_loaded(fname, open_path)) {
|
||||||
char msg[PATH_MAX+100];
|
loaded = 1;
|
||||||
my_snprintf(msg, S(msg),
|
if(confirm) {
|
||||||
"tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] "
|
char msg[PATH_MAX+100];
|
||||||
"-message {Warning: %s already open.}", fname);
|
my_snprintf(msg, S(msg),
|
||||||
if(has_x) {
|
"tk_messageBox -type okcancel -icon warning -parent [xschem get topwindow] "
|
||||||
tcleval(msg);
|
"-message {Warning: %s already open.}", fname);
|
||||||
if(strcmp(tclresult(), "ok")) {
|
if(has_x) {
|
||||||
|
tcleval(msg);
|
||||||
|
if(strcmp(tclresult(), "ok")) {
|
||||||
|
switch_tab(window_count, open_path, 1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dbg(0, "create_new_tab: %s already open: %s\n", fname, open_path);
|
||||||
switch_tab(window_count, open_path, 1);
|
switch_tab(window_count, open_path, 1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
dbg(0, "create_new_tab: %s already open: %s\n", fname, open_path);
|
|
||||||
switch_tab(window_count, open_path, 1);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if(*window_count == 0) {
|
if(*window_count == 0) {
|
||||||
for(i = 0; i < MAX_NEW_WINDOWS; ++i) {
|
for(i = 0; i < MAX_NEW_WINDOWS; ++i) {
|
||||||
|
|
@ -1834,12 +1847,22 @@ static void create_new_tab(int *window_count, const char *noconfirm, const char
|
||||||
build_colors(0.0, 0.0);
|
build_colors(0.0, 0.0);
|
||||||
resetwin(1, 0, 1, 0, 0); /* resetwin(create_pixmap, clear_pixmap, force, w, h) */
|
resetwin(1, 0, 1, 0, 0); /* resetwin(create_pixmap, clear_pixmap, force, w, h) */
|
||||||
tclvareval("housekeeping_ctx", NULL);
|
tclvareval("housekeeping_ctx", NULL);
|
||||||
xctx->zoom=CADINITIALZOOM;
|
if(!loaded) {
|
||||||
xctx->mooz=1/CADINITIALZOOM;
|
xctx->zoom = CADINITIALZOOM;
|
||||||
xctx->xorigin=CADINITIALX;
|
xctx->mooz = 1 / CADINITIALZOOM;
|
||||||
xctx->yorigin=CADINITIALY;
|
xctx->xorigin = CADINITIALX;
|
||||||
|
xctx->yorigin = CADINITIALY;
|
||||||
|
} else {
|
||||||
|
xctx->zoom = old_xctx->zoom;
|
||||||
|
xctx->mooz =old_xctx->mooz;
|
||||||
|
xctx->xorigin =old_xctx->xorigin;
|
||||||
|
xctx->yorigin =old_xctx->yorigin;
|
||||||
|
}
|
||||||
load_schematic(1,fname, 1, confirm);
|
load_schematic(1,fname, 1, confirm);
|
||||||
if(dr) zoom_full(1, 0, 1 + 2 * tclgetboolvar("zoom_full_center"), 0.97); /* draw */
|
if(dr) {
|
||||||
|
if(!loaded) zoom_full(1, 0, 1 + 2 * tclgetboolvar("zoom_full_center"), 0.97); /* draw */
|
||||||
|
else draw();
|
||||||
|
}
|
||||||
tcleval("tab_queue STORE");
|
tcleval("tab_queue STORE");
|
||||||
/* xctx->pending_fullzoom=1; */
|
/* xctx->pending_fullzoom=1; */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue