shithub: puzzles

Download patch

ref: 31d96181a82a4f950a510c5512ffd58429dce389
parent: 029e8b85cede91d3d8ab011e422d44d74e52706e
author: Simon Tatham <anakin@pobox.com>
date: Fri Jun 24 08:30:30 EDT 2005

Fix another display/UI glitch which triggered if you filled a row
(so that the hint pegs lit up as `ready') and then pressed Undo: the
markable flag would remain set and the redrawing wouldn't darken the
pegs again.

[originally from svn r6009]

--- a/guess.c
+++ b/guess.c
@@ -393,6 +393,7 @@
     /* just clear the row-in-progress when we have an undo/redo. */
     for (i = 0; i < ui->curr_pegs->npegs; i++)
 	ui->curr_pegs->pegs[i] = 0;
+    ui->markable = FALSE;
 }
 
 #define PEGSZ   (ds->pegsz)
@@ -957,11 +958,12 @@
 }
 
 static void hint_redraw(frontend *fe, game_drawstate *ds, int guess,
-                        pegrow src, int force, int cursor, int emptycol)
+                        pegrow src, int force, int cursor, int markable)
 {
     pegrow dest = ds->guesses[guess];
     int rowx, rowy, i, scol, col, hintlen;
     int need_redraw;
+    int emptycol = (markable ? COL_FLASH : COL_EMPTY);
 
     if (src) assert(src->npegs == dest->npegs);
 
@@ -977,6 +979,8 @@
         scol = src ? src->feedback[i] : 0;
         if (i == 0 && cursor)
             scol |= 0x1000;
+        if (i == 0 && markable)
+            scol |= 0x2000;
         if ((scol != dest->feedback[i]) || force) {
             need_redraw = TRUE;
         }
@@ -1068,7 +1072,7 @@
             /* this info is stored in the game_state already */
             guess_redraw(fe, ds, i, state->guesses[i], NULL, -1, 0);
             hint_redraw(fe, ds, i, state->guesses[i],
-                        i == (state->next_go-1) ? 1 : 0, FALSE, COL_EMPTY);
+                        i == (state->next_go-1) ? 1 : 0, FALSE, FALSE);
         } else if (state->next_go == i) {
             /* this is the one we're on; the (incomplete) guess is
              * stored in the game_ui. */
@@ -1076,11 +1080,11 @@
                          ui->holds, ui->display_cur ? ui->peg_cur : -1, 0);
             hint_redraw(fe, ds, i, NULL, 1,
                         ui->display_cur && ui->peg_cur == state->params.npegs,
-                        ui->markable ? COL_FLASH : COL_EMPTY);
+                        ui->markable);
         } else {
             /* we've not got here yet; it's blank. */
             guess_redraw(fe, ds, i, NULL, NULL, -1, 0);
-            hint_redraw(fe, ds, i, NULL, 0, FALSE, COL_EMPTY);
+            hint_redraw(fe, ds, i, NULL, 0, FALSE, FALSE);
         }
     }