diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-07-05 18:13:31 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-07-05 18:13:31 +0000 |
| commit | b74dac6de22e783ac6619411743df6bca1755a8b (patch) | |
| tree | 3291c5880b6167a0af7625d399ae9093a1f1cdfa /netslide.c | |
| parent | a4e3d69de23af4597fb1fd9a465f354a06568ffe (diff) | |
| download | puzzles-b74dac6de22e783ac6619411743df6bca1755a8b.zip puzzles-b74dac6de22e783ac6619411743df6bca1755a8b.tar.gz puzzles-b74dac6de22e783ac6619411743df6bca1755a8b.tar.bz2 puzzles-b74dac6de22e783ac6619411743df6bca1755a8b.tar.xz | |
Refactored the game_size() interface, which was getting really
unpleasant and requiring lots of special cases to be taken care of
by every single game. The new interface exposes an integer `tile
size' or `scale' parameter to the midend and provides two much
simpler routines: one which computes the pixel window size given a
game_params and a tile size, and one which is given a tile size and
must set up a drawstate appropriately. All the rest of the
complexity is handled in the midend, mostly by binary search, so
grubby special cases only have to be dealt with once.
[originally from svn r6059]
Diffstat (limited to 'netslide.c')
| -rw-r--r-- | netslide.c | 30 |
1 files changed, 12 insertions, 18 deletions
@@ -1194,29 +1194,23 @@ static void game_free_drawstate(game_drawstate *ds) sfree(ds); } -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) { - int tsx, tsy, ts; - /* - * Each window dimension equals the tile size times two more - * than the grid dimension (the border containing the arrows is - * the same width as the tiles), plus TILE_BORDER, plus twice - * WINDOW_OFFSET. - */ - tsx = (*x - 2*WINDOW_OFFSET - TILE_BORDER) / (params->width + 2); - tsy = (*y - 2*WINDOW_OFFSET - TILE_BORDER) / (params->height + 2); - ts = min(tsx, tsy); - - if (expand) - ds->tilesize = ts; - else - ds->tilesize = min(ts, PREFERRED_TILE_SIZE); + /* Ick: fake up `ds->tilesize' for macro expansion purposes */ + struct { int tilesize; } ads, *ds = &ads; + ads.tilesize = tilesize; *x = BORDER * 2 + WINDOW_OFFSET * 2 + TILE_SIZE * params->width + TILE_BORDER; *y = BORDER * 2 + WINDOW_OFFSET * 2 + TILE_SIZE * params->height + TILE_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; @@ -1815,7 +1809,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, |