diff options
| author | Jonas Kölker <jonaskoelker@yahoo.com> | 2015-09-21 17:44:50 +0200 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2015-10-03 16:59:04 +0100 |
| commit | e59f820383c9941640d04d7b23e5d964f7ad6ff6 (patch) | |
| tree | 5671745b79bcab88202da3e58567cf3b59bd7d31 /rect.c | |
| parent | c469bd285cc4f482f49203c16169151d2d869d4a (diff) | |
| download | puzzles-e59f820383c9941640d04d7b23e5d964f7ad6ff6.zip puzzles-e59f820383c9941640d04d7b23e5d964f7ad6ff6.tar.gz puzzles-e59f820383c9941640d04d7b23e5d964f7ad6ff6.tar.bz2 puzzles-e59f820383c9941640d04d7b23e5d964f7ad6ff6.tar.xz | |
Rectangles: cancel keyboard drag with Escape.
Diffstat (limited to 'rect.c')
| -rw-r--r-- | rect.c | 48 |
1 files changed, 21 insertions, 27 deletions
@@ -2187,18 +2187,24 @@ struct game_ui { int cur_x, cur_y, cur_visible, cur_dragging; }; -static game_ui *new_ui(const game_state *state) +static void reset_ui(game_ui *ui) { - game_ui *ui = snew(game_ui); ui->drag_start_x = -1; ui->drag_start_y = -1; ui->drag_end_x = -1; ui->drag_end_y = -1; - ui->dragged = ui->erasing = FALSE; ui->x1 = -1; ui->y1 = -1; ui->x2 = -1; ui->y2 = -1; + ui->dragged = FALSE; +} + +static game_ui *new_ui(const game_state *state) +{ + game_ui *ui = snew(game_ui); + reset_ui(ui); + ui->erasing = FALSE; ui->cur_x = ui->cur_y = ui->cur_visible = ui->cur_dragging = 0; return ui; } @@ -2381,21 +2387,8 @@ static char *interpret_move(const game_state *from, game_ui *ui, coord_round(FROMCOORD((float)x), FROMCOORD((float)y), &xc, &yc); if (button == LEFT_BUTTON || button == RIGHT_BUTTON) { - if (ui->drag_start_x >= 0 && ui->cur_dragging) { - /* - * If a keyboard drag is in progress, unceremoniously - * cancel it. - */ - ui->drag_start_x = -1; - ui->drag_start_y = -1; - ui->drag_end_x = -1; - ui->drag_end_y = -1; - ui->x1 = -1; - ui->y1 = -1; - ui->x2 = -1; - ui->y2 = -1; - ui->dragged = FALSE; - } + if (ui->drag_start_x >= 0 && ui->cur_dragging) + reset_ui(ui); /* cancel keyboard dragging */ startdrag = TRUE; ui->cur_visible = ui->cur_dragging = FALSE; active = TRUE; @@ -2439,6 +2432,15 @@ static char *interpret_move(const game_state *from, game_ui *ui, startdrag = TRUE; active = TRUE; } + } else if (button == '\b' || button == 27) { + if (!ui->cur_dragging) { + ui->cur_visible = FALSE; + } else { + assert(ui->cur_visible); + reset_ui(ui); /* cancel keyboard dragging */ + ui->cur_dragging = FALSE; + } + return ""; } else if (button != LEFT_DRAG && button != RIGHT_DRAG) { return NULL; } @@ -2515,15 +2517,7 @@ static char *interpret_move(const game_state *from, game_ui *ui, } } - ui->drag_start_x = -1; - ui->drag_start_y = -1; - ui->drag_end_x = -1; - ui->drag_end_y = -1; - ui->x1 = -1; - ui->y1 = -1; - ui->x2 = -1; - ui->y2 = -1; - ui->dragged = FALSE; + reset_ui(ui); active = TRUE; } |