shithub: puzzles

Download patch

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);