From b74dac6de22e783ac6619411743df6bca1755a8b Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Tue, 5 Jul 2005 18:13:31 +0000 Subject: 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] --- pattern.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'pattern.c') diff --git a/pattern.c b/pattern.c index 7713ffd..5ef032f 100644 --- a/pattern.c +++ b/pattern.c @@ -945,21 +945,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 ts; - - ts = min(GETTILESIZE(params->w, *x), GETTILESIZE(params->h, *y)); - 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 = SIZE(params->w); *y = SIZE(params->h); } +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); @@ -1190,7 +1192,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, -- cgit v1.1