buttons in several games if STYLUS_BASED is defined: in games where
you can set a puzzle element to 'on', 'off' or 'not yet set', when
it's hard to mimic a second mouse button, it's better to have the
one 'button' cycle between all three states rather than from 'on'
back to 'unset'.
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@8784
cda61777-01e9-0310-a592-
d414129be87e
if (flags & F_BLACK)
return nullret;
if (action == FLIP_LIGHT) {
if (flags & F_BLACK)
return nullret;
if (action == FLIP_LIGHT) {
+#ifdef STYLUS_BASED
+ if (flags & F_IMPOSSIBLE || flags & F_LIGHT) c = 'I'; else c = 'L';
+#else
if (flags & F_IMPOSSIBLE) return nullret;
c = 'L';
if (flags & F_IMPOSSIBLE) return nullret;
c = 'L';
+#ifdef STYLUS_BASED
+ if (flags & F_IMPOSSIBLE || flags & F_LIGHT) c = 'L'; else c = 'I';
+#else
if (flags & F_LIGHT) return nullret;
c = 'I';
if (flags & F_LIGHT) return nullret;
c = 'I';
}
sprintf(buf, "%c%d,%d", (int)c, cx, cy);
break;
}
sprintf(buf, "%c%d,%d", (int)c, cx, cy);
break;
button_char = 'y';
break;
case LINE_YES:
button_char = 'y';
break;
case LINE_YES:
+#ifdef STYLUS_BASED
+ button_char = 'n';
+ break;
+#endif
case LINE_NO:
button_char = 'u';
break;
case LINE_NO:
button_char = 'u';
break;
button_char = 'n';
break;
case LINE_NO:
button_char = 'n';
break;
case LINE_NO:
+#ifdef STYLUS_BASED
+ button_char = 'y';
+ break;
+#endif
case LINE_YES:
button_char = 'u';
break;
case LINE_YES:
button_char = 'u';
break;
ui->drag = LEFT_DRAG;
ui->release = LEFT_RELEASE;
#ifdef STYLUS_BASED
ui->drag = LEFT_DRAG;
ui->release = LEFT_RELEASE;
#ifdef STYLUS_BASED
- ui->state = currstate == GRID_FULL ? GRID_UNKNOWN : GRID_FULL;
+ ui->state = (currstate + 2) % 3; /* FULL -> EMPTY -> UNKNOWN */
#else
ui->state = GRID_FULL;
#endif
#else
ui->state = GRID_FULL;
#endif
ui->drag = RIGHT_DRAG;
ui->release = RIGHT_RELEASE;
#ifdef STYLUS_BASED
ui->drag = RIGHT_DRAG;
ui->release = RIGHT_RELEASE;
#ifdef STYLUS_BASED
- ui->state = currstate == GRID_EMPTY ? GRID_UNKNOWN : GRID_EMPTY;
+ ui->state = (currstate + 1) % 3; /* EMPTY -> FULL -> UNKNOWN */
#else
ui->state = GRID_EMPTY;
#endif
#else
ui->state = GRID_EMPTY;
#endif
ymin = min(ui->dsy, ui->dey);
ymax = max(ui->dsy, ui->dey);
ymin = min(ui->dsy, ui->dey);
ymax = max(ui->dsy, ui->dey);
/*
* Left-dragging has no effect, so we treat a left-drag as a
* single click on dsx,dsy.
/*
* Left-dragging has no effect, so we treat a left-drag as a
* single click on dsx,dsy.
xmin = xmax = ui->dsx;
ymin = ymax = ui->dsy;
}
xmin = xmax = ui->dsx;
ymin = ymax = ui->dsy;
}
if (x < xmin || x > xmax || y < ymin || y > ymax)
return v; /* no change outside drag area */
if (x < xmin || x > xmax || y < ymin || y > ymax)
return v; /* no change outside drag area */
* Results of a simple click. Left button sets blanks to
* tents; right button sets blanks to non-tents; either
* button clears a non-blank square.
* Results of a simple click. Left button sets blanks to
* tents; right button sets blanks to non-tents; either
* button clears a non-blank square.
+ * If stylus-based however, it loops instead.
*/
if (ui->drag_button == LEFT_BUTTON)
*/
if (ui->drag_button == LEFT_BUTTON)
+#ifdef STYLUS_BASED
+ v = (v == BLANK ? TENT : (v == TENT ? NONTENT : BLANK));
+ else
+ v = (v == BLANK ? NONTENT : (v == NONTENT ? TENT : BLANK));
+#else
v = (v == BLANK ? TENT : BLANK);
else
v = (v == BLANK ? NONTENT : BLANK);
v = (v == BLANK ? TENT : BLANK);
else
v = (v == BLANK ? NONTENT : BLANK);
} else {
/*
* Results of a drag. Left-dragging has no effect.
} else {
/*
* Results of a drag. Left-dragging has no effect.
if (ui->drag_button == RIGHT_BUTTON)
v = (v == BLANK ? NONTENT : v);
else
if (ui->drag_button == RIGHT_BUTTON)
v = (v == BLANK ? NONTENT : v);
else
+#ifdef STYLUS_BASED
+ v = (v == BLANK ? NONTENT : v);
+#else