Completion flashes were occasionally failing to be cleaned up if a
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 11 May 2005 13:03:17 +0000 (13:03 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 11 May 2005 13:03:17 +0000 (13:03 +0000)
subsequent move animation began during them. Tracked this to
overenthusiastic use of clip() and fixed it.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5766 cda61777-01e9-0310-a592-d414129be87e

twiddle.c

index 6c51cb7..7585239 100644 (file)
--- a/twiddle.c
+++ b/twiddle.c
@@ -693,6 +693,16 @@ static void draw_tile(frontend *fe, game_state *state, int x, int y,
     int coords[8];
     char str[40];
 
+    /*
+     * If we've been passed a rotation region but we're drawing a
+     * tile which is outside it, we must draw it normally. This can
+     * occur if we're cleaning up after a completion flash while a
+     * new move is also being made.
+     */
+    if (rot && (x < rot->cx || y < rot->cy ||
+                x >= rot->cx+rot->cw || y > rot->cy+rot->ch))
+        rot = NULL;
+
     if (rot)
        clip(fe, rot->cx, rot->cy, rot->cw, rot->ch);