From 8281c67aeddbaf7dda02b658c0a7d076ac3ba10d Mon Sep 17 00:00:00 2001 From: Stefan Frederik Date: Thu, 4 Nov 2021 15:08:54 +0100 Subject: [PATCH] fix some UI glitches (place text/symbol and aborting operation during move will now delete placed objects) --- src/callback.c | 13 ++++++++----- src/move.c | 5 +++-- src/xschem.h | 1 + 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/callback.c b/src/callback.c index d895c133..bbb3dd75 100644 --- a/src/callback.c +++ b/src/callback.c @@ -57,9 +57,11 @@ void abort_operation(void) if(xctx->ui_state & STARTMOVE) { move_objects(ABORT,0,0,0); - if(xctx->ui_state & START_SYMPIN) { + if(xctx->ui_state & (START_SYMPIN | PLACE_SYMBOL | PLACE_TEXT)) { delete(1/* to_push_undo */); xctx->ui_state &= ~START_SYMPIN; + xctx->ui_state &= ~PLACE_SYMBOL; + xctx->ui_state &= ~PLACE_TEXT; } return; } @@ -291,7 +293,7 @@ int callback(int event, int mx, int my, KeySym key, } if(xctx->ui_state & STARTPAN) pan(RUBBER); if(xctx->ui_state & STARTZOOM) zoom_rectangle(RUBBER); - if(xctx->ui_state & STARTSELECT && !(xctx->ui_state & PLACE_SYMBOL) && !(xctx->ui_state & STARTPAN2)) { + if(xctx->ui_state & STARTSELECT && !(xctx->ui_state & (PLACE_SYMBOL | STARTPAN2 | PLACE_TEXT)) ) { if( (state & Button1Mask) && (state & Mod1Mask)) { /* 20171026 added unselect by area */ select_rect(RUBBER,0); } else if(state & Button1Mask) { @@ -314,7 +316,7 @@ int callback(int event, int mx, int my, KeySym key, /* start of a mouse area select */ if(!(xctx->ui_state & STARTPOLYGON) && (state&Button1Mask) && !(xctx->ui_state & STARTWIRE) && !(xctx->ui_state & STARTPAN2) && !(state & Mod1Mask) && - !(state & ShiftMask) && !(xctx->ui_state & PLACE_SYMBOL)) + !(state & ShiftMask) && !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT))) { static int onetime=0; if(mx != xctx->mx_save || my != xctx->my_save) { @@ -332,12 +334,12 @@ int callback(int event, int mx, int my, KeySym key, } } if((state & Button1Mask) && (state & Mod1Mask) && !(state & ShiftMask) && - !(xctx->ui_state & STARTPAN2) && !(xctx->ui_state & PLACE_SYMBOL)) { /* 20150927 unselect area */ + !(xctx->ui_state & STARTPAN2) && !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT))) { /* 20150927 unselect area */ if( !(xctx->ui_state & STARTSELECT)) { select_rect(START,0); } } - else if((state&Button1Mask) && (state & ShiftMask) && !(xctx->ui_state & PLACE_SYMBOL) && + else if((state&Button1Mask) && (state & ShiftMask) && !(xctx->ui_state & (PLACE_SYMBOL | PLACE_TEXT)) && !(xctx->ui_state & STARTPAN2) ) { if(mx != xctx->mx_save || my != xctx->my_save) { if( !(xctx->ui_state & STARTSELECT)) { @@ -725,6 +727,7 @@ int callback(int event, int mx, int my, KeySym key, { if(xctx->semaphore >= 2) break; xctx->last_command = 0; + xctx->ui_state |= PLACE_TEXT; place_text(0, xctx->mousex_snap, xctx->mousey_snap); /* 1 = draw text 24122002 */ xctx->mx_save = mx; xctx->my_save = my; xctx->mx_double_save=xctx->mousex_snap; diff --git a/src/move.c b/src/move.c index d14bb947..7b3da077 100644 --- a/src/move.c +++ b/src/move.c @@ -1018,8 +1018,8 @@ void move_objects(int what, int merge, double dx, double dy) draw_selection(xctx->gctiled,0); xctx->move_rot=xctx->move_flip=xctx->deltax=xctx->deltay=0; xctx->ui_state &= ~STARTMOVE; - xctx->ui_state &= ~PLACE_SYMBOL; update_symbol_bboxes(0, 0); + } if(what & RUBBER) /* abort operation */ { @@ -1048,11 +1048,12 @@ void move_objects(int what, int merge, double dx, double dy) bbox(START, 0.0 , 0.0 , 0.0 , 0.0); set_modify(1); - if( !(xctx->ui_state & (STARTMERGE | PLACE_SYMBOL)) ) { /* no undo push for MERGE ad PLACE, already done before */ + if( !(xctx->ui_state & (STARTMERGE | PLACE_SYMBOL | PLACE_TEXT)) ) { /* no undo push for MERGE ad PLACE, already done before */ dbg(1, "move_objects(): push undo state\n"); push_undo(); } xctx->ui_state &= ~PLACE_SYMBOL; + xctx->ui_state &= ~PLACE_TEXT; if(dx!=0.0 || dy!=0.0) { xctx->deltax = dx; xctx->deltay = dy; diff --git a/src/xschem.h b/src/xschem.h index 8e58a4fb..a3ab7a7b 100644 --- a/src/xschem.h +++ b/src/xschem.h @@ -200,6 +200,7 @@ extern char win_temp_dir[PATH_MAX]; #define MENUSTARTCIRCLE 2097152 #define PLACE_SYMBOL 4194304 /* used in move_objects after place_symbol to avoid storing intermediate undo state */ #define START_SYMPIN 8388608 +#define PLACE_TEXT 16777216 #define SELECTED 1 /* used in the .sel field for selected objs. */ #define SELECTED1 2 /* first point selected... */ #define SELECTED2 4 /* second point selected... */