Small UI bug: LEFT_RELEASEs were being thrown away completely if
[sgt/puzzles] / twiddle.c
index 66e8e95..9ac4a3a 100644 (file)
--- a/twiddle.c
+++ b/twiddle.c
@@ -260,12 +260,12 @@ static void do_rotate(int *grid, int w, int h, int n, int orientable,
        for (j = 0; j < n/2; j++) {
            int k;
            int g[4];
-           int p[4] = {
-               j*w+i,
-               i*w+(n-j-1),
-               (n-j-1)*w+(n-i-1),
-               (n-i-1)*w+j
-           };
+           int p[4];
+            
+            p[0] = j*w+i;
+            p[1] = i*w+(n-j-1);
+            p[2] = (n-j-1)*w+(n-i-1);
+            p[3] = (n-i-1)*w+j;
 
            for (k = 0; k < 4; k++)
                g[k] = grid[p[k]];
@@ -409,7 +409,7 @@ static char *new_game_desc(game_params *params, random_state *rs,
         int k;
 
         k = sprintf(buf, "%d%c", grid[i] / 4,
-                   params->orientable ? "uldr"[grid[i] & 3] : ',');
+                   (char)(params->orientable ? "uldr"[grid[i] & 3] : ','));
 
         ret = sresize(ret, retlen + k + 1, char);
         strcpy(ret + retlen, buf);
@@ -764,6 +764,7 @@ static game_drawstate *game_new_drawstate(game_state *state)
 
 static void game_free_drawstate(game_drawstate *ds)
 {
+    sfree(ds->grid);
     sfree(ds);
 }
 
@@ -1005,7 +1006,7 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
         bgcolour = COL_BACKGROUND;
 
     if (!ds->started) {
-        int coords[6];
+        int coords[10];
 
        draw_rect(fe, 0, 0,
                  TILE_SIZE * state->w + 2 * BORDER,
@@ -1021,15 +1022,19 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
         coords[1] = COORD(state->h) + HIGHLIGHT_WIDTH - 1;
         coords[2] = COORD(state->w) + HIGHLIGHT_WIDTH - 1;
         coords[3] = COORD(0) - HIGHLIGHT_WIDTH;
-        coords[4] = COORD(0) - HIGHLIGHT_WIDTH;
-        coords[5] = COORD(state->h) + HIGHLIGHT_WIDTH - 1;
-        draw_polygon(fe, coords, 3, TRUE, COL_HIGHLIGHT);
-        draw_polygon(fe, coords, 3, FALSE, COL_HIGHLIGHT);
+        coords[4] = coords[2] - TILE_SIZE;
+        coords[5] = coords[3] + TILE_SIZE;
+        coords[8] = COORD(0) - HIGHLIGHT_WIDTH;
+        coords[9] = COORD(state->h) + HIGHLIGHT_WIDTH - 1;
+        coords[6] = coords[8] + TILE_SIZE;
+        coords[7] = coords[9] - TILE_SIZE;
+        draw_polygon(fe, coords, 5, TRUE, COL_HIGHLIGHT);
+        draw_polygon(fe, coords, 5, FALSE, COL_HIGHLIGHT);
 
         coords[1] = COORD(0) - HIGHLIGHT_WIDTH;
         coords[0] = COORD(0) - HIGHLIGHT_WIDTH;
-        draw_polygon(fe, coords, 3, TRUE, COL_LOWLIGHT);
-        draw_polygon(fe, coords, 3, FALSE, COL_LOWLIGHT);
+        draw_polygon(fe, coords, 5, TRUE, COL_LOWLIGHT);
+        draw_polygon(fe, coords, 5, FALSE, COL_LOWLIGHT);
 
         ds->started = TRUE;
     }
@@ -1179,4 +1184,5 @@ const struct game thegame = {
     game_flash_length,
     game_wants_statusbar,
     FALSE, game_timing_state,
+    0,                                /* mouse_priorities */
 };