mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
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:
@ -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;
|
||||||
|
8
loopy.c
8
loopy.c
@ -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;
|
||||||
|
@ -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
13
tents.c
@ -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;
|
||||||
|
Reference in New Issue
Block a user