From 80e7e37cd954d03f10a6a69f857c9033d05d1809 Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 17 Dec 2009 18:16:42 +0000 Subject: [PATCH] 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'. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@8784 cda61777-01e9-0310-a592-d414129be87e --- lightup.c | 8 ++++++++ loopy.c | 8 ++++++++ pattern.c | 4 ++-- tents.c | 13 +++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/lightup.c b/lightup.c index 298b7e2..75a6219 100644 --- a/lightup.c +++ b/lightup.c @@ -1869,11 +1869,19 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, 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'; +#endif } else { +#ifdef STYLUS_BASED + if (flags & F_IMPOSSIBLE || flags & F_LIGHT) c = 'L'; else c = 'I'; +#else if (flags & F_LIGHT) return nullret; c = 'I'; +#endif } sprintf(buf, "%c%d,%d", (int)c, cx, cy); break; diff --git a/loopy.c b/loopy.c index 34b97a2..afa362c 100644 --- a/loopy.c +++ b/loopy.c @@ -3222,6 +3222,10 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, button_char = 'y'; break; case LINE_YES: +#ifdef STYLUS_BASED + button_char = 'n'; + break; +#endif case LINE_NO: button_char = 'u'; break; @@ -3236,6 +3240,10 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, button_char = 'n'; break; case LINE_NO: +#ifdef STYLUS_BASED + button_char = 'y'; + break; +#endif case LINE_YES: button_char = 'u'; break; diff --git a/pattern.c b/pattern.c index 68383d7..7c1b0f2 100644 --- a/pattern.c +++ b/pattern.c @@ -808,7 +808,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, 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 @@ -816,7 +816,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, 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 diff --git a/tents.c b/tents.c index 2c8b042..a229e55 100644 --- a/tents.c +++ b/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); ymax = max(ui->dsy, ui->dey); +#ifndef STYLUS_BASED /* * Left-dragging has no effect, so we treat a left-drag as a * 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; ymin = ymax = ui->dsy; } +#endif if (x < xmin || x > xmax || y < ymin || y > ymax) 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 * 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) +#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); +#endif } else { /* * 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) v = (v == BLANK ? NONTENT : v); else +#ifdef STYLUS_BASED + v = (v == BLANK ? NONTENT : v); +#else /* do nothing */; +#endif } return v; -- 2.11.0