X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/ce6af7f2190722ae7441b3524e350ecc1d7eff48..fdb3b29aacf3f9d0bf16c816ba2ec959e6518bd3:/flip.c diff --git a/flip.c b/flip.c index f1fcaf6..4125d6d 100644 --- a/flip.c +++ b/flip.c @@ -182,7 +182,7 @@ static game_params *custom_params(config_item *cfg) return ret; } -static char *validate_params(game_params *params) +static char *validate_params(game_params *params, int full) { if (params->w <= 0 || params->h <= 0) return "Width and height must both be greater than zero"; @@ -928,8 +928,8 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, default: assert(!"shouldn't get here"); } ui->cx += dx; ui->cy += dy; - ui->cx = min(max(ui->cx, 0), state->w); - ui->cy = min(max(ui->cy, 0), state->h); + ui->cx = min(max(ui->cx, 0), state->w - 1); + ui->cy = min(max(ui->cy, 0), state->h - 1); ui->cdraw = 1; nullret = ""; } @@ -988,27 +988,23 @@ static game_state *execute_move(game_state *from, char *move) * Drawing routines. */ -static void game_size(game_params *params, game_drawstate *ds, - int *x, int *y, int expand) +static void game_compute_size(game_params *params, int tilesize, + int *x, int *y) { - double tsx, tsy, ts; - /* - * Each window dimension equals the tile size times one more - * than the grid dimension (the border is half the width of the - * tiles). - */ - tsx = (double)*x / ((double)params->w + 1.0); - tsy = (double)*y / ((double)params->h + 1); - ts = min(tsx, tsy); - if (expand) - ds->tilesize = (int)(ts + 0.5); - else - ds->tilesize = min((int)ts, PREFERRED_TILE_SIZE); + /* Ick: fake up `ds->tilesize' for macro expansion purposes */ + struct { int tilesize; } ads, *ds = &ads; + ads.tilesize = tilesize; *x = TILE_SIZE * params->w + 2 * BORDER; *y = TILE_SIZE * params->h + 2 * BORDER; } +static void game_set_size(game_drawstate *ds, game_params *params, + int tilesize) +{ + ds->tilesize = tilesize; +} + static float *game_colours(frontend *fe, game_state *state, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); @@ -1276,7 +1272,7 @@ const struct game thegame = { game_changed_state, interpret_move, execute_move, - game_size, + PREFERRED_TILE_SIZE, game_compute_size, game_set_size, game_colours, game_new_drawstate, game_free_drawstate,