diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-06-30 18:11:41 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-06-30 18:11:41 +0000 |
| commit | 091fe57e0f8448e0972fa82dfac1f83f43147c5b (patch) | |
| tree | 80ce0871353854fb684acb4845c4752d220debf5 | |
| parent | 8f670292a72c1c5450c5c62bc2a5a06005808ed7 (diff) | |
| download | puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.zip puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.tar.gz puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.tar.bz2 puzzles-091fe57e0f8448e0972fa82dfac1f83f43147c5b.tar.xz | |
Prevent drags from being started outside the playing area, which was
causing invalid move descriptions to be returned from
interpret_move() and then failing an assertion when execute_move()
refused them.
[originally from svn r6044]
| -rw-r--r-- | rect.c | 10 |
1 files changed, 7 insertions, 3 deletions
@@ -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) { |