Tweak a paragraph after discussion with Simon.
[sgt/puzzles] / cube.c
diff --git a/cube.c b/cube.c
index cf5e512..e271ce3 100644 (file)
--- a/cube.c
+++ b/cube.c
@@ -157,7 +157,7 @@ enum {
 
 enum { LEFT, RIGHT, UP, DOWN, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT };
 
-#define PREFERRED_GRID_SCALE 48.0F
+#define PREFERRED_GRID_SCALE 48
 #define GRID_SCALE (ds->gridscale)
 #define ROLLTIME 0.13F
 
@@ -285,7 +285,7 @@ static void decode_params(game_params *ret, char const *string)
       default: break;
     }
     ret->d1 = ret->d2 = atoi(string);
-    while (*string && isdigit(*string)) string++;
+    while (*string && isdigit((unsigned char)*string)) string++;
     if (*string == 'x') {
         string++;
         ret->d2 = atoi(string);
@@ -525,7 +525,7 @@ static void count_grid_square_callback(void *ctx, struct grid_square *sq)
     classes[thisclass]++;
 }
 
-static char *validate_params(game_params *params)
+static char *validate_params(game_params *params, int full)
 {
     int classes[5];
     int i;
@@ -1452,31 +1452,28 @@ static struct bbox find_bbox(game_params *params)
     return bb;
 }
 
-#define XSIZE(bb, solid) \
-    ((int)(((bb).r - (bb).l + 2*(solid)->border) * GRID_SCALE))
-#define YSIZE(bb, solid) \
-    ((int)(((bb).d - (bb).u + 2*(solid)->border) * GRID_SCALE))
+#define XSIZE(gs, bb, solid) \
+    ((int)(((bb).r - (bb).l + 2*(solid)->border) * gs))
+#define YSIZE(gs, bb, solid) \
+    ((int)(((bb).d - (bb).u + 2*(solid)->border) * gs))
 
-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)
 {
     struct bbox bb = find_bbox(params);
-    float gsx, gsy, gs;
 
-    gsx = *x / (bb.r - bb.l + 2*solids[params->solid]->border);
-    gsy = *y / (bb.d - bb.u + 2*solids[params->solid]->border);
-    gs = min(gsx, gsy);
-
-    if (expand)
-        ds->gridscale = gs;
-    else
-        ds->gridscale = min(gs, PREFERRED_GRID_SCALE);
+    *x = XSIZE(tilesize, bb, solids[params->solid]);
+    *y = YSIZE(tilesize, bb, solids[params->solid]);
+}
 
-    ds->ox = (int)(-(bb.l - solids[params->solid]->border) * GRID_SCALE);
-    ds->oy = (int)(-(bb.u - solids[params->solid]->border) * GRID_SCALE);
+static void game_set_size(game_drawstate *ds, game_params *params,
+                         int tilesize)
+{
+    struct bbox bb = find_bbox(params);
 
-    *x = XSIZE(bb, solids[params->solid]);
-    *y = YSIZE(bb, solids[params->solid]);
+    ds->gridscale = tilesize;
+    ds->ox = (int)(-(bb.l - solids[params->solid]->border) * ds->gridscale);
+    ds->oy = (int)(-(bb.u - solids[params->solid]->border) * ds->gridscale);
 }
 
 static float *game_colours(frontend *fe, game_state *state, int *ncolours)
@@ -1524,8 +1521,8 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
     game_state *newstate;
     int square;
 
-    draw_rect(fe, 0, 0, XSIZE(bb, state->solid), YSIZE(bb, state->solid),
-              COL_BACKGROUND);
+    draw_rect(fe, 0, 0, XSIZE(GRID_SCALE, bb, state->solid),
+             YSIZE(GRID_SCALE, bb, state->solid), COL_BACKGROUND);
 
     if (dir < 0) {
         game_state *t;
@@ -1568,9 +1565,9 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
                             + ds->oy);
         }
 
-        draw_polygon(fe, coords, state->squares[i].npoints, TRUE,
-                     state->squares[i].blue ? COL_BLUE : COL_BACKGROUND);
-        draw_polygon(fe, coords, state->squares[i].npoints, FALSE, COL_BORDER);
+        draw_polygon(fe, coords, state->squares[i].npoints,
+                     state->squares[i].blue ? COL_BLUE : COL_BACKGROUND,
+                    COL_BORDER);
     }
 
     /*
@@ -1650,13 +1647,14 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
                 continue;
         }
 
-        draw_polygon(fe, coords, poly->order, TRUE,
-                     state->facecolours[i] ? COL_BLUE : COL_BACKGROUND);
-        draw_polygon(fe, coords, poly->order, FALSE, COL_BORDER);
+        draw_polygon(fe, coords, poly->order,
+                     state->facecolours[i] ? COL_BLUE : COL_BACKGROUND,
+                    COL_BORDER);
     }
     sfree(poly);
 
-    draw_update(fe, 0, 0, XSIZE(bb, state->solid), YSIZE(bb, state->solid));
+    draw_update(fe, 0, 0, XSIZE(GRID_SCALE, bb, state->solid),
+               YSIZE(GRID_SCALE, bb, state->solid));
 
     /*
      * Update the status bar.
@@ -1689,7 +1687,7 @@ static int game_wants_statusbar(void)
     return TRUE;
 }
 
-static int game_timing_state(game_state *state)
+static int game_timing_state(game_state *state, game_ui *ui)
 {
     return TRUE;
 }
@@ -1722,7 +1720,7 @@ const struct game thegame = {
     game_changed_state,
     interpret_move,
     execute_move,
-    game_size,
+    PREFERRED_GRID_SCALE, game_compute_size, game_set_size,
     game_colours,
     game_new_drawstate,
     game_free_drawstate,