From c55e95485483f8a5b66ab4af3a372495d88389ee Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 7 Apr 2013 10:24:35 +0000 Subject: [PATCH] Add a new midend function to reset the tile size to the puzzle's default (but still counting the _TILESIZE user preference environment variables, where available). [originally from svn r9820] --- devel.but | 16 ++++++++++++++++ midend.c | 43 ++++++++++++++++++++++++------------------- puzzles.h | 1 + 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/devel.but b/devel.but index d2bf2e4..30642ea 100644 --- a/devel.but +++ b/devel.but @@ -2812,6 +2812,22 @@ that \e{and} set the \c{user_size} flag, though! The midend relies on the frontend calling \cw{midend_new_game()} (\k{midend-new-game}) before calling \cw{midend_size()}. +\H{midend-reset-tilesize} \cw{midend_reset_tilesize()} + +\c void midend_reset_tilesize(midend *me); + +This function resets the midend's preferred tile size to that of the +standard puzzle. + +As discussed in \k{midend-size}, puzzle resizes are typically +'sticky', in that once the user has dragged the puzzle to a different +window size, the resulting tile size will be remembered and used when +the puzzle configuration changes. If you \e{don't} want that, e.g. if +you want to provide a command to explicitly reset the puzzle size back +to its default, then you can call this just before calling +\cw{midend_size()} (which, in turn, you would probably call with +\c{user_size} set to \cw{FALSE}). + \H{midend-new-game} \cw{midend_new_game()} \c void midend_new_game(midend *me); diff --git a/midend.c b/midend.c index 41d562a..c361274 100644 --- a/midend.c +++ b/midend.c @@ -94,6 +94,29 @@ struct midend { } \ } while (0) +void midend_reset_tilesize(midend *me) +{ + me->preferred_tilesize = me->ourgame->preferred_tilesize; + { + /* + * Allow an environment-based override for the default tile + * size by defining a variable along the lines of + * `NET_TILESIZE=15'. + */ + + char buf[80], *e; + int j, k, ts; + + sprintf(buf, "%s_TILESIZE", me->ourgame->name); + for (j = k = 0; buf[j]; j++) + if (!isspace((unsigned char)buf[j])) + buf[k++] = toupper((unsigned char)buf[j]); + buf[k] = '\0'; + if ((e = getenv(buf)) != NULL && sscanf(e, "%d", &ts) == 1 && ts > 0) + me->preferred_tilesize = ts; + } +} + midend *midend_new(frontend *fe, const game *ourgame, const drawing_api *drapi, void *drhandle) { @@ -153,25 +176,7 @@ midend *midend_new(frontend *fe, const game *ourgame, else me->drawing = NULL; - me->preferred_tilesize = ourgame->preferred_tilesize; - { - /* - * Allow an environment-based override for the default tile - * size by defining a variable along the lines of - * `NET_TILESIZE=15'. - */ - - char buf[80], *e; - int j, k, ts; - - sprintf(buf, "%s_TILESIZE", me->ourgame->name); - for (j = k = 0; buf[j]; j++) - if (!isspace((unsigned char)buf[j])) - buf[k++] = toupper((unsigned char)buf[j]); - buf[k] = '\0'; - if ((e = getenv(buf)) != NULL && sscanf(e, "%d", &ts) == 1 && ts > 0) - me->preferred_tilesize = ts; - } + midend_reset_tilesize(me); sfree(randseed); diff --git a/puzzles.h b/puzzles.h index 61d8553..8232692 100644 --- a/puzzles.h +++ b/puzzles.h @@ -232,6 +232,7 @@ const game *midend_which_game(midend *me); void midend_set_params(midend *me, game_params *params); game_params *midend_get_params(midend *me); void midend_size(midend *me, int *x, int *y, int user_size); +void midend_reset_tilesize(midend *me); void midend_new_game(midend *me); void midend_restart_game(midend *me); void midend_stop_anim(midend *me); -- 2.30.2