mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -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);
|
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_x = xc;
|
||||||
ui->drag_start_y = yc;
|
ui->drag_start_y = yc;
|
||||||
ui->drag_end_x = xc;
|
ui->drag_end_x = xc;
|
||||||
@ -2338,7 +2341,8 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
|
|||||||
active = TRUE;
|
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;
|
int t;
|
||||||
|
|
||||||
ui->drag_end_x = xc;
|
ui->drag_end_x = xc;
|
||||||
@ -2370,7 +2374,7 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
|
|||||||
|
|
||||||
ret = NULL;
|
ret = NULL;
|
||||||
|
|
||||||
if (enddrag) {
|
if (enddrag && (ui->drag_start_x >= 0)) {
|
||||||
if (xc >= 0 && xc <= 2*from->w &&
|
if (xc >= 0 && xc <= 2*from->w &&
|
||||||
yc >= 0 && yc <= 2*from->h) {
|
yc >= 0 && yc <= 2*from->h) {
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user