~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix bounds checking for Flip cursor control.
[sgt/puzzles]
/
rect.c
diff --git
a/rect.c
b/rect.c
index
5852f59
..
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);
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;
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;
}
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;
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;
ret = NULL;
- if (enddrag) {
+ if (enddrag
&& (ui->drag_start_x >= 0)
) {
if (xc >= 0 && xc <= 2*from->w &&
yc >= 0 && yc <= 2*from->h) {
if (xc >= 0 && xc <= 2*from->w &&
yc >= 0 && yc <= 2*from->h) {
@@
-2498,7
+2502,7
@@
static game_state *execute_move(game_state *from, char *move)
static void game_size(game_params *params, game_drawstate *ds,
int *x, int *y, int expand)
{
static void game_size(game_params *params, game_drawstate *ds,
int *x, int *y, int expand)
{
-
int
tsx, tsy, ts;
+
double
tsx, tsy, ts;
/*
* Each window dimension equals the tile size times 1.5 more
* than the grid dimension (the border is 3/4 the width of the
/*
* Each window dimension equals the tile size times 1.5 more
* than the grid dimension (the border is 3/4 the width of the
@@
-2507,13
+2511,13
@@
static void game_size(game_params *params, game_drawstate *ds,
* We must cast to unsigned before multiplying by two, because
* *x might be INT_MAX.
*/
* We must cast to unsigned before multiplying by two, because
* *x might be INT_MAX.
*/
- tsx = 2
* (unsigned)*x / (2 * params->w + 3
);
- tsy = 2
* (unsigned)*y / (2 * params->h + 3
);
+ tsx = 2
.0 * (double)*x / (2.0 * (double)params->w + 3.0
);
+ tsy = 2
.0 * (double)*y / (2.0 * (double)params->h + 3.0
);
ts = min(tsx, tsy);
if (expand)
ts = min(tsx, tsy);
if (expand)
- ds->tilesize =
ts
;
+ ds->tilesize =
(int)(ts + 0.5)
;
else
else
- ds->tilesize = min(ts, PREFERRED_TILE_SIZE);
+ ds->tilesize = min(
(int)
ts, PREFERRED_TILE_SIZE);
*x = params->w * TILE_SIZE + 2*BORDER + 1;
*y = params->h * TILE_SIZE + 2*BORDER + 1;
*x = params->w * TILE_SIZE + 2*BORDER + 1;
*y = params->h * TILE_SIZE + 2*BORDER + 1;