ref: 7478275c8b46c24eb457dd3458ace3a31263295b
parent: 9e1a7d87cd30e1f3fde7eedf1439b48ce1610009
author: Jonas Kölker <jonaskoelker@yahoo.com>
date: Mon Sep 21 13:33:02 EDT 2015
Pattern: color multiple squares with Ctrl- or Shift-cursor keys.
--- a/pattern.c
+++ b/pattern.c
@@ -1056,6 +1056,7 @@
const game_drawstate *ds,
int x, int y, int button)
{
+ int control = button & MOD_CTRL, shift = button & MOD_SHFT;
button &= ~MOD_MASK;
x = FROMCOORD(state->w, x);
@@ -1156,10 +1157,23 @@
}
if (IS_CURSOR_MOVE(button)) {
+ int x = ui->cur_x, y = ui->cur_y, newstate;
+ char buf[80];
move_cursor(button, &ui->cur_x, &ui->cur_y, state->w, state->h, 0);
ui->cur_visible = 1;
- return "";
+ if (!control && !shift) return "";
+
+ newstate = control ? shift ? GRID_UNKNOWN : GRID_FULL : GRID_EMPTY;
+ if (state->grid[y * state->w + x] == newstate &&
+ state->grid[ui->cur_y * state->w + ui->cur_x] == newstate)
+ return "";
+
+ sprintf(buf, "%c%d,%d,%d,%d", control ? shift ? 'U' : 'F' : 'E',
+ min(x, ui->cur_x), min(y, ui->cur_y),
+ abs(x - ui->cur_x) + 1, abs(y - ui->cur_y) + 1);
+ return dupstr(buf);
}
+
if (IS_CURSOR_SELECT(button)) {
int currstate = state->grid[ui->cur_y * state->w + ui->cur_x];
int newstate;
--- a/puzzles.but
+++ b/puzzles.but
@@ -897,6 +897,10 @@
return key will cycle the current cell through empty, then black, then
white, then empty, and the space bar does the same cycle in reverse.
+Moving the cursor while holding Control will colour the moved-over
+squares black. Holding Shift will colour the moved-over squares
+white, and holding both will colour them grey.
+
(All the actions described in \k{common-actions} are also available.)
\H{pattern-parameters} \I{parameters, for Pattern}Pattern parameters