aboutsummaryrefslogtreecommitdiff
path: root/midend.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-09-05 17:18:03 +0000
committerSimon Tatham <anakin@pobox.com>2005-09-05 17:18:03 +0000
commit56ff3647e272b672f8dca8b947bb571ba30d4742 (patch)
tree0fcc2c2d1e4469a4c746fe8170ac626999020af3 /midend.c
parentfd1735170e408b32847c481eea2cffc4f164c7df (diff)
downloadpuzzles-56ff3647e272b672f8dca8b947bb571ba30d4742.zip
puzzles-56ff3647e272b672f8dca8b947bb571ba30d4742.tar.gz
puzzles-56ff3647e272b672f8dca8b947bb571ba30d4742.tar.bz2
puzzles-56ff3647e272b672f8dca8b947bb571ba30d4742.tar.xz
I've dithered a bit in the past about whether or not it's allowable
to call game_set_size() twice on the same drawstate. Finally, a definite decision: it isn't. Accordingly, midend.c arranges never to do so, the devel docs state that puzzles may enforce by assertion that it never happens, and the four puzzles which care (i.e. use blitters) do so. [originally from svn r6274]
Diffstat (limited to 'midend.c')
-rw-r--r--midend.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/midend.c b/midend.c
index 1f564f3..64edfd3 100644
--- a/midend.c
+++ b/midend.c
@@ -218,6 +218,17 @@ void midend_size(midend *me, int *x, int *y, int expand)
int rx, ry;
/*
+ * We can't set the size on the same drawstate twice. So if
+ * we've already sized one drawstate, we must throw it away and
+ * create a new one.
+ */
+ if (me->drawstate && me->tilesize > 0) {
+ me->ourgame->free_drawstate(me->drawing, me->drawstate);
+ me->drawstate = me->ourgame->new_drawstate(me->drawing,
+ me->states[0].state);
+ }
+
+ /*
* Find the tile size that best fits within the given space. If
* `expand' is TRUE, we must actually find the _largest_ such
* tile size; otherwise, we bound above at the game's preferred