From James Harvey (via a period of collaborative polishing), a patch
[sgt/puzzles] / tents.c
diff --git a/tents.c b/tents.c
index a229e55..2a87248 100644 (file)
--- a/tents.c
+++ b/tents.c
@@ -2465,7 +2465,7 @@ static void int_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
      * changed) the numbers.
      */
     for (x = 0; x < w; x++) {
-       if (ds->numbersdrawn[x] != errors[w*h+x]) {
+       if (printing || ds->numbersdrawn[x] != errors[w*h+x]) {
            char buf[80];
            draw_rect(dr, COORD(x), COORD(h)+1, TILESIZE, BRBORDER-1,
                      COL_BACKGROUND);
@@ -2474,11 +2474,12 @@ static void int_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
                      FONT_VARIABLE, TILESIZE/2, ALIGN_HCENTRE|ALIGN_VNORMAL,
                      (errors[w*h+x] ? COL_ERROR : COL_GRID), buf);
            draw_update(dr, COORD(x), COORD(h)+1, TILESIZE, BRBORDER-1);
-           ds->numbersdrawn[x] = errors[w*h+x];
+           if (!printing)
+                ds->numbersdrawn[x] = errors[w*h+x];
        }
     }
     for (y = 0; y < h; y++) {
-       if (ds->numbersdrawn[w+y] != errors[w*h+w+y]) {
+       if (printing || ds->numbersdrawn[w+y] != errors[w*h+w+y]) {
            char buf[80];
            draw_rect(dr, COORD(w)+1, COORD(y), BRBORDER-1, TILESIZE,
                      COL_BACKGROUND);
@@ -2487,7 +2488,8 @@ static void int_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate,
                      FONT_VARIABLE, TILESIZE/2, ALIGN_HRIGHT|ALIGN_VCENTRE,
                      (errors[w*h+w+y] ? COL_ERROR : COL_GRID), buf);
            draw_update(dr, COORD(w)+1, COORD(y), BRBORDER-1, TILESIZE);
-           ds->numbersdrawn[w+y] = errors[w*h+w+y];
+           if (!printing)
+                ds->numbersdrawn[w+y] = errors[w*h+w+y];
        }
     }
 
@@ -2522,6 +2524,11 @@ static float game_flash_length(game_state *oldstate, game_state *newstate,
     return 0.0F;
 }
 
+static int game_is_solved(game_state *state)
+{
+    return state->completed;
+}
+
 static int game_timing_state(game_state *state, game_ui *ui)
 {
     return TRUE;
@@ -2592,6 +2599,7 @@ const struct game thegame = {
     game_redraw,
     game_anim_length,
     game_flash_length,
+    game_is_solved,
     TRUE, FALSE, game_print_size, game_print,
     FALSE,                            /* wants_statusbar */
     FALSE, game_timing_state,