shithub: puzzles

Download patch

ref: c4e486c2a1aea38df9c573d168979536ced9ad15
parent: 3107237af4aa82f538826e989ee7633e0a1ba22c
author: Simon Tatham <anakin@pobox.com>
date: Wed Dec 21 08:46:48 EST 2011

In Group, the keyboard-controlled cursor should respect user
rearrangement of the rows and columns.

[originally from svn r9372]

--- a/unfinished/group.c
+++ b/unfinished/group.c
@@ -1201,6 +1201,18 @@
     return errs;
 }
 
+static int find_in_sequence(digit *seq, int len, digit n)
+{
+    int i;
+
+    for (i = 0; i < len; i++)
+        if (seq[i] == n)
+            return i;
+
+    assert(!"Should never get here");
+    return -1;
+}
+
 static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
 			    int x, int y, int button)
 {
@@ -1292,7 +1304,11 @@
     }
 
     if (IS_CURSOR_MOVE(button)) {
-        move_cursor(button, &ui->hx, &ui->hy, w, w, 0);
+        int cx = find_in_sequence(state->sequence, w, ui->hx);
+        int cy = find_in_sequence(state->sequence, w, ui->hy);
+        move_cursor(button, &cx, &cy, w, w, 0);
+        ui->hx = state->sequence[cx];
+        ui->hy = state->sequence[cy];
         ui->hshow = ui->hcursor = 1;
         return "";
     }