Prevent drags from being started outside the playing area, which was
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 30 Jun 2005 18:11:41 +0000 (18:11 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 30 Jun 2005 18:11:41 +0000 (18:11 +0000)
causing invalid move descriptions to be returned from
interpret_move() and then failing an assertion when execute_move()
refused them.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6044 cda61777-01e9-0310-a592-d414129be87e

rect.c

diff --git a/rect.c b/rect.c
index f092a2d..ec7bd4a 100644 (file)
--- a/rect.c
+++ b/rect.c
@@ -2329,7 +2329,10 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
 
     coord_round(FROMCOORD((float)x), FROMCOORD((float)y), &xc, &yc);
 
-    if (startdrag) {
+    if (startdrag &&
+       xc >= 0 && xc <= 2*from->w &&
+       yc >= 0 && yc <= 2*from->h) {
+
         ui->drag_start_x = xc;
         ui->drag_start_y = yc;
         ui->drag_end_x = xc;
@@ -2338,7 +2341,8 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
         active = TRUE;
     }
 
-    if (xc != ui->drag_end_x || yc != ui->drag_end_y) {
+    if (ui->drag_start_x >= 0 &&
+       (xc != ui->drag_end_x || yc != ui->drag_end_y)) {
        int t;
 
         ui->drag_end_x = xc;
@@ -2370,7 +2374,7 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
 
     ret = NULL;
 
-    if (enddrag) {
+    if (enddrag && (ui->drag_start_x >= 0)) {
        if (xc >= 0 && xc <= 2*from->w &&
            yc >= 0 && yc <= 2*from->h) {