Range: add pencil marks to squares by Shift-cursor keys.

This commit is contained in:
Jonas Kölker
2015-09-21 17:39:47 +02:00
committed by Simon Tatham
parent 7478275c8b
commit d5f7c4f871
2 changed files with 35 additions and 2 deletions

View File

@ -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
View File

@ -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];
} }