From ee03cb5f1fc4b47d6c56b5de95af611cff5e2ca8 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 10 Jun 2005 13:05:24 +0000 Subject: [PATCH] Clean up the behaviour of drags off the edge of the grid. These have always been a convenient way to cancel a drag you decided was an error, but now it's more obvious that this is the case. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5941 cda61777-01e9-0310-a592-d414129be87e --- rect.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/rect.c b/rect.c index 95d1d8c..46060a4 100644 --- a/rect.c +++ b/rect.c @@ -2138,11 +2138,11 @@ static void coord_round(float x, float y, int *xr, int *yr) /* Vertical edge: x-coord of corner, * y-coord of square centre. */ *xr = 2 * (int)xv; - *yr = 1 + 2 * (int)ys; + *yr = 1 + 2 * (int)floor(ys); } else { /* Horizontal edge: x-coord of square centre, * y-coord of corner. */ - *xr = 1 + 2 * (int)xs; + *xr = 1 + 2 * (int)floor(xs); *yr = 2 * (int)yv; } } @@ -2233,19 +2233,26 @@ static game_state *make_move(game_state *from, game_ui *ui, game_drawstate *ds, ui->dragged = TRUE; active = TRUE; - ui->x1 = ui->drag_start_x; - ui->x2 = ui->drag_end_x; - if (ui->x2 < ui->x1) { t = ui->x1; ui->x1 = ui->x2; ui->x2 = t; } - - ui->y1 = ui->drag_start_y; - ui->y2 = ui->drag_end_y; - if (ui->y2 < ui->y1) { t = ui->y1; ui->y1 = ui->y2; ui->y2 = t; } - - ui->x1 = ui->x1 / 2; /* rounds down */ - ui->x2 = (ui->x2+1) / 2; /* rounds up */ - ui->y1 = ui->y1 / 2; /* rounds down */ - ui->y2 = (ui->y2+1) / 2; /* rounds up */ - + if (xc >= 0 && xc <= 2*from->w && + yc >= 0 && yc <= 2*from->h) { + ui->x1 = ui->drag_start_x; + ui->x2 = ui->drag_end_x; + if (ui->x2 < ui->x1) { t = ui->x1; ui->x1 = ui->x2; ui->x2 = t; } + + ui->y1 = ui->drag_start_y; + ui->y2 = ui->drag_end_y; + if (ui->y2 < ui->y1) { t = ui->y1; ui->y1 = ui->y2; ui->y2 = t; } + + ui->x1 = ui->x1 / 2; /* rounds down */ + ui->x2 = (ui->x2+1) / 2; /* rounds up */ + ui->y1 = ui->y1 / 2; /* rounds down */ + ui->y2 = (ui->y2+1) / 2; /* rounds up */ + } else { + ui->x1 = -1; + ui->y1 = -1; + ui->x2 = -1; + ui->y2 = -1; + } } ret = NULL; -- 2.11.0