~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make the `hold marker' in Guess accessible from the keyboard (`H' key, for want
[sgt/puzzles]
/
pattern.c
diff --git
a/pattern.c
b/pattern.c
index
dd8626a
..
6f0b8fd
100644
(file)
--- a/
pattern.c
+++ b/
pattern.c
@@
-20,15
+20,17
@@
enum {
NCOLOURS
};
NCOLOURS
};
-#define BORDER 18
+#define PREFERRED_TILE_SIZE 24
+#define TILE_SIZE (ds->tilesize)
+#define BORDER (3 * TILE_SIZE / 4)
#define TLBORDER(d) ( (d) / 5 + 2 )
#define TLBORDER(d) ( (d) / 5 + 2 )
-#define GUTTER 12
-#define TILE_SIZE 24
+#define GUTTER (TILE_SIZE / 2)
#define FROMCOORD(d, x) \
( ((x) - (BORDER + GUTTER + TILE_SIZE * TLBORDER(d))) / TILE_SIZE )
#define SIZE(d) (2*BORDER + GUTTER + TILE_SIZE * (TLBORDER(d) + (d)))
#define FROMCOORD(d, x) \
( ((x) - (BORDER + GUTTER + TILE_SIZE * TLBORDER(d))) / TILE_SIZE )
#define SIZE(d) (2*BORDER + GUTTER + TILE_SIZE * (TLBORDER(d) + (d)))
+#define GETTILESIZE(d, w) (w / (2 + TLBORDER(d) + (d)))
#define TOCOORD(d, x) (BORDER + GUTTER + TILE_SIZE * (TLBORDER(d) + (x)))
#define TOCOORD(d, x) (BORDER + GUTTER + TILE_SIZE * (TLBORDER(d) + (x)))
@@
-662,8
+664,8
@@
static void free_game(game_state *state)
sfree(state);
}
sfree(state);
}
-static game_state *solve_game(game_state *state, game_
aux_info *ai
,
- char **error)
+static game_state *solve_game(game_state *state, game_
state *currstate
,
+
game_aux_info *ai,
char **error)
{
game_state *ret;
{
game_state *ret;
@@
-763,6
+765,13
@@
static void game_changed_state(game_ui *ui, game_state *oldstate,
{
}
{
}
+struct game_drawstate {
+ int started;
+ int w, h;
+ int tilesize;
+ unsigned char *visible;
+};
+
static game_state *make_move(game_state *from, game_ui *ui, game_drawstate *ds,
int x, int y, int button) {
game_state *ret;
static game_state *make_move(game_state *from, game_ui *ui, game_drawstate *ds,
int x, int y, int button) {
game_state *ret;
@@
-895,14
+904,17
@@
static game_state *make_move(game_state *from, game_ui *ui, game_drawstate *ds,
* Drawing routines.
*/
* Drawing routines.
*/
-struct game_drawstate {
- int started;
- int w, h;
- unsigned char *visible;
-};
-
-static void game_size(game_params *params, int *x, int *y)
+static void game_size(game_params *params, game_drawstate *ds,
+ int *x, int *y, int expand)
{
{
+ int ts;
+
+ ts = min(GETTILESIZE(params->w, *x), GETTILESIZE(params->h, *y));
+ if (expand)
+ ds->tilesize = ts;
+ else
+ ds->tilesize = min(ts, PREFERRED_TILE_SIZE);
+
*x = SIZE(params->w);
*y = SIZE(params->h);
}
*x = SIZE(params->w);
*y = SIZE(params->h);
}
@@
-941,6
+953,7
@@
static game_drawstate *game_new_drawstate(game_state *state)
ds->w = state->w;
ds->h = state->h;
ds->visible = snewn(ds->w * ds->h, unsigned char);
ds->w = state->w;
ds->h = state->h;
ds->visible = snewn(ds->w * ds->h, unsigned char);
+ ds->tilesize = 0; /* not decided yet */
memset(ds->visible, 255, ds->w * ds->h);
return ds;
memset(ds->visible, 255, ds->w * ds->h);
return ds;
@@
-975,8
+988,8
@@
static void grid_square(frontend *fe, game_drawstate *ds,
}
static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
}
static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
- game_state *state, int dir, game_ui *ui,
- float animtime, float flashtime)
+
game_state *state, int dir, game_ui *ui,
+
float animtime, float flashtime)
{
int i, j;
int x1, x2, y1, y2;
{
int i, j;
int x1, x2, y1, y2;