Patches from Frode Austvik to modify the effects of the mouse

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'.

[originally from svn r8784]
This commit is contained in:
Simon Tatham
2009-12-17 18:16:42 +00:00
parent 6d5245d8bf
commit 97477f0916
4 changed files with 31 additions and 2 deletions

View File

@ -1869,11 +1869,19 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
if (flags & F_BLACK) if (flags & F_BLACK)
return nullret; return nullret;
if (action == FLIP_LIGHT) { 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; if (flags & F_IMPOSSIBLE) return nullret;
c = 'L'; c = 'L';
#endif
} else { } else {
#ifdef STYLUS_BASED
if (flags & F_IMPOSSIBLE || flags & F_LIGHT) c = 'L'; else c = 'I';
#else
if (flags & F_LIGHT) return nullret; if (flags & F_LIGHT) return nullret;
c = 'I'; c = 'I';
#endif
} }
sprintf(buf, "%c%d,%d", (int)c, cx, cy); sprintf(buf, "%c%d,%d", (int)c, cx, cy);
break; break;

View File

@ -3222,6 +3222,10 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
button_char = 'y'; button_char = 'y';
break; break;
case LINE_YES: case LINE_YES:
#ifdef STYLUS_BASED
button_char = 'n';
break;
#endif
case LINE_NO: case LINE_NO:
button_char = 'u'; button_char = 'u';
break; break;
@ -3236,6 +3240,10 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
button_char = 'n'; button_char = 'n';
break; break;
case LINE_NO: case LINE_NO:
#ifdef STYLUS_BASED
button_char = 'y';
break;
#endif
case LINE_YES: case LINE_YES:
button_char = 'u'; button_char = 'u';
break; break;

View File

@ -808,7 +808,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
ui->drag = LEFT_DRAG; ui->drag = LEFT_DRAG;
ui->release = LEFT_RELEASE; ui->release = LEFT_RELEASE;
#ifdef STYLUS_BASED #ifdef STYLUS_BASED
ui->state = currstate == GRID_FULL ? GRID_UNKNOWN : GRID_FULL; ui->state = (currstate + 2) % 3; /* FULL -> EMPTY -> UNKNOWN */
#else #else
ui->state = GRID_FULL; ui->state = GRID_FULL;
#endif #endif
@ -816,7 +816,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
ui->drag = RIGHT_DRAG; ui->drag = RIGHT_DRAG;
ui->release = RIGHT_RELEASE; ui->release = RIGHT_RELEASE;
#ifdef STYLUS_BASED #ifdef STYLUS_BASED
ui->state = currstate == GRID_EMPTY ? GRID_UNKNOWN : GRID_EMPTY; ui->state = (currstate + 1) % 3; /* EMPTY -> FULL -> UNKNOWN */
#else #else
ui->state = GRID_EMPTY; ui->state = GRID_EMPTY;
#endif #endif

13
tents.c
View File

@ -1469,6 +1469,7 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
ymin = min(ui->dsy, ui->dey); ymin = min(ui->dsy, ui->dey);
ymax = max(ui->dsy, ui->dey); ymax = max(ui->dsy, ui->dey);
#ifndef STYLUS_BASED
/* /*
* Left-dragging has no effect, so we treat a left-drag as a * Left-dragging has no effect, so we treat a left-drag as a
* single click on dsx,dsy. * single click on dsx,dsy.
@ -1477,6 +1478,7 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
xmin = xmax = ui->dsx; xmin = xmax = ui->dsx;
ymin = ymax = ui->dsy; ymin = ymax = ui->dsy;
} }
#endif
if (x < xmin || x > xmax || y < ymin || y > ymax) if (x < xmin || x > xmax || y < ymin || y > ymax)
return v; /* no change outside drag area */ return v; /* no change outside drag area */
@ -1489,11 +1491,18 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
* Results of a simple click. Left button sets blanks to * Results of a simple click. Left button sets blanks to
* tents; right button sets blanks to non-tents; either * tents; right button sets blanks to non-tents; either
* button clears a non-blank square. * 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); v = (v == BLANK ? TENT : BLANK);
else else
v = (v == BLANK ? NONTENT : BLANK); v = (v == BLANK ? NONTENT : BLANK);
#endif
} else { } else {
/* /*
* Results of a drag. Left-dragging has no effect. * Results of a drag. Left-dragging has no effect.
@ -1503,7 +1512,11 @@ static int drag_xform(game_ui *ui, int x, int y, int v)
if (ui->drag_button == RIGHT_BUTTON) if (ui->drag_button == RIGHT_BUTTON)
v = (v == BLANK ? NONTENT : v); v = (v == BLANK ? NONTENT : v);
else else
#ifdef STYLUS_BASED
v = (v == BLANK ? NONTENT : v);
#else
/* do nothing */; /* do nothing */;
#endif
} }
return v; return v;