mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
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]
This commit is contained in:
10
rect.c
10
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) {
|
||||
|
||||
|
Reference in New Issue
Block a user