X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=rect.c;h=55667c02a8372dd05ba30992c2643e0e247168f3;hb=3234912f921916a1b8da164fd61dc75579358577;hp=04f4588f0e5abce2b908afbdf101189ea474c864;hpb=251b21c41813055d9c416378508b1ee038bc3dac;p=sgt-puzzles.git diff --git a/rect.c b/rect.c index 04f4588..55667c0 100644 --- a/rect.c +++ b/rect.c @@ -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; }