aboutsummaryrefslogtreecommitdiff
path: root/net.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-07-05 18:13:31 +0000
committerSimon Tatham <anakin@pobox.com>2005-07-05 18:13:31 +0000
commitb74dac6de22e783ac6619411743df6bca1755a8b (patch)
tree3291c5880b6167a0af7625d399ae9093a1f1cdfa /net.c
parenta4e3d69de23af4597fb1fd9a465f354a06568ffe (diff)
downloadpuzzles-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 'net.c')
-rw-r--r--net.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/net.c b/net.c
index 2e86700..cb8e613 100644
--- a/net.c
+++ b/net.c
@@ -2146,25 +2146,17 @@ 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 the grid
- * dimension, plus TILE_BORDER, plus twice WINDOW_OFFSET.
- */
- tsx = (*x - 2*WINDOW_OFFSET - TILE_BORDER) / params->width;
- tsy = (*y - 2*WINDOW_OFFSET - TILE_BORDER) / params->height;
- ts = min(tsx, tsy);
-
- if (expand)
- ds->tilesize = ts;
- else
- ds->tilesize = min(ts, PREFERRED_TILE_SIZE);
+ *x = WINDOW_OFFSET * 2 + tilesize * params->width + TILE_BORDER;
+ *y = WINDOW_OFFSET * 2 + tilesize * params->height + TILE_BORDER;
+}
- *x = WINDOW_OFFSET * 2 + TILE_SIZE * params->width + TILE_BORDER;
- *y = 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)
@@ -2757,7 +2749,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,