ref: c55e95485483f8a5b66ab4af3a372495d88389ee
parent: ea25b606cbadaf573b71b132c0d2d5081c8516ab
author: Simon Tatham <[email protected]>
date: Sun Apr 7 06:24:35 EDT 2013
Add a new midend function to reset the tile size to the puzzle's default (but still counting the <puzzle>_TILESIZE user preference environment variables, where available). [originally from svn r9820]
--- a/devel.but
+++ b/devel.but
@@ -2812,6 +2812,22 @@
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);
--- a/midend.c
+++ b/midend.c
@@ -94,6 +94,29 @@
} \
} 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 @@
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);
--- a/puzzles.h
+++ b/puzzles.h
@@ -232,6 +232,7 @@
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);