mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Range: add pencil marks to squares by Shift-cursor keys.
This commit is contained in:

committed by
Simon Tatham

parent
7478275c8b
commit
d5f7c4f871
@ -2917,7 +2917,9 @@ dotted or empty) in opposite directions.
|
|||||||
|
|
||||||
You can also use the cursor keys to move around the grid squares.
|
You can also use the cursor keys to move around the grid squares.
|
||||||
Pressing Return does the same as clicking with the left button, while
|
Pressing Return does the same as clicking with the left button, while
|
||||||
pressing Space does the same as a right button click.
|
pressing Space does the same as a right button click. Moving with the
|
||||||
|
cursor keys while holding Shift will place dots in all squares that
|
||||||
|
are moved through.
|
||||||
|
|
||||||
(All the actions described in \k{common-actions} are also available.)
|
(All the actions described in \k{common-actions} are also available.)
|
||||||
|
|
||||||
|
33
range.c
33
range.c
@ -1273,6 +1273,8 @@ static char *interpret_move(const game_state *state, game_ui *ui,
|
|||||||
enum {none, forwards, backwards, hint};
|
enum {none, forwards, backwards, hint};
|
||||||
int const w = state->params.w, h = state->params.h;
|
int const w = state->params.w, h = state->params.h;
|
||||||
int r = ui->r, c = ui->c, action = none, cell;
|
int r = ui->r, c = ui->c, action = none, cell;
|
||||||
|
int shift = button & MOD_SHFT;
|
||||||
|
button &= ~shift;
|
||||||
|
|
||||||
if (IS_CURSOR_SELECT(button) && !ui->cursor_show) return NULL;
|
if (IS_CURSOR_SELECT(button) && !ui->cursor_show) return NULL;
|
||||||
|
|
||||||
@ -1330,7 +1332,36 @@ static char *interpret_move(const game_state *state, game_ui *ui,
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 4 && cursors[i] != button; ++i);
|
for (i = 0; i < 4 && cursors[i] != button; ++i);
|
||||||
assert (i < 4);
|
assert (i < 4);
|
||||||
if (!out_of_bounds(ui->r + dr[i], ui->c + dc[i], w, h)) {
|
if (shift) {
|
||||||
|
int pre_r = r, pre_c = c, do_pre, do_post;
|
||||||
|
cell = state->grid[idx(r, c, state->params.w)];
|
||||||
|
do_pre = (cell == EMPTY);
|
||||||
|
|
||||||
|
if (out_of_bounds(ui->r + dr[i], ui->c + dc[i], w, h)) {
|
||||||
|
if (do_pre)
|
||||||
|
return nfmtstr(40, "W,%d,%d", pre_r, pre_c);
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ui->r += dr[i];
|
||||||
|
ui->c += dc[i];
|
||||||
|
|
||||||
|
cell = state->grid[idx(ui->r, ui->c, state->params.w)];
|
||||||
|
do_post = (cell == EMPTY);
|
||||||
|
|
||||||
|
/* (do_pre ? "..." : "") concat (do_post ? "..." : "") */
|
||||||
|
if (do_pre && do_post)
|
||||||
|
return nfmtstr(80, "W,%d,%dW,%d,%d",
|
||||||
|
pre_r, pre_c, ui->r, ui->c);
|
||||||
|
else if (do_pre)
|
||||||
|
return nfmtstr(40, "W,%d,%d", pre_r, pre_c);
|
||||||
|
else if (do_post)
|
||||||
|
return nfmtstr(40, "W,%d,%d", ui->r, ui->c);
|
||||||
|
else
|
||||||
|
return "";
|
||||||
|
|
||||||
|
} else if (!out_of_bounds(ui->r + dr[i], ui->c + dc[i], w, h)) {
|
||||||
ui->r += dr[i];
|
ui->r += dr[i];
|
||||||
ui->c += dc[i];
|
ui->c += dc[i];
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user