Change of policy on game_changed_state(). Originally, it was called
[sgt/puzzles] / rect.c
diff --git a/rect.c b/rect.c
index ec7bd4a..fbe5b79 100644 (file)
--- a/rect.c
+++ b/rect.c
@@ -212,7 +212,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";
@@ -2499,30 +2499,23 @@ static game_state *execute_move(game_state *from, char *move)
 #define COLOUR(k) ( (k)==1 ? COL_LINE : COL_DRAG )
 #define MAX4(x,y,z,w) ( max(max(x,y),max(z,w)) )
 
-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 1.5 more
-     * than the grid dimension (the border is 3/4 the width of the
-     * tiles).
-     * 
-     * We must cast to unsigned before multiplying by two, because
-     * *x might be INT_MAX.
-     */
-    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)
-        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 = params->w * TILE_SIZE + 2*BORDER + 1;
     *y = params->h * TILE_SIZE + 2*BORDER + 1;
 }
 
+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);
@@ -2798,7 +2791,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,