From a9073cef8cae5bddd59d7c6aff5decca20801e42 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Sun, 15 Jun 2003 07:07:49 +0000 Subject: [PATCH] Added click-to-move in addition to drag-to-move --- src/grr_board_view.c | 129 ++++++++++++++++++++++--------------------- src/grr_board_view.h | 1 - 2 files changed, 66 insertions(+), 64 deletions(-) diff --git a/src/grr_board_view.c b/src/grr_board_view.c index d4d0d26..c4cf316 100644 --- a/src/grr_board_view.c +++ b/src/grr_board_view.c @@ -543,26 +543,30 @@ grr_board_view_expose (GtkWidget *widget, /* Draw grid. */ XrSave (xrs); - XrSetRGBColor (xrs, .75, .75, 1); - XrSetLineWidth (xrs, 1); - for (j=0; j < view->board_height; j++) { - XrMoveTo (xrs, 0, j * view->cell_height + 0.5); - XrRelLineTo (xrs, view->board_width * view->cell_width, 0); - } - for (i=0; i < view->board_width; i++) { - XrMoveTo (xrs, i * view->cell_width + 0.5, 0); - XrRelLineTo (xrs, 0, view->board_height * view->cell_height); + { + XrSetRGBColor (xrs, .75, .75, 1); + XrSetLineWidth (xrs, 1); + for (j=0; j < view->board_height; j++) { + XrMoveTo (xrs, 0, j * view->cell_height + 0.5); + XrRelLineTo (xrs, view->board_width * view->cell_width, 0); + } + for (i=0; i < view->board_width; i++) { + XrMoveTo (xrs, i * view->cell_width + 0.5, 0); + XrRelLineTo (xrs, 0, view->board_height * view->cell_height); + } + XrStroke (xrs); } - XrStroke (xrs); XrRestore (xrs); /* Draw goal target in center of board */ XrSave (xrs); - XrTranslate (xrs, - (view->board_width / 2 - 1) * view->cell_width, - (view->board_height / 2 - 1) * view->cell_height); - grr_cell_draw (xrs, goal_target, goal_target, - view->cell_width * 2, view->cell_height * 2); + { + XrTranslate (xrs, + (view->board_width / 2 - 1) * view->cell_width, + (view->board_height / 2 - 1) * view->cell_height); + grr_cell_draw (xrs, goal_target, goal_target, + view->cell_width * 2, view->cell_height * 2); + } XrRestore (xrs); /* Draw walls */ @@ -617,8 +621,6 @@ grr_board_view_button_press (GtkWidget *widget, gtk_grab_add (widget); view->button = event->button; - view->drag_x = x; - view->drag_y = y; view->drag_robot = RR_CELL_GET_ROBOT (cell); grr_board_view_update_mouse (view, event->x, event->y); @@ -629,12 +631,13 @@ grr_board_view_button_press (GtkWidget *widget, static gint grr_board_view_button_release (GtkWidget *widget, - GdkEventButton *event) + GdkEventButton *event) { grr_board_view_t *view; const char *dir; const char *robot; int x, y; + int robot_x, robot_y; int dx, dy; g_return_val_if_fail (widget != NULL, FALSE); @@ -645,53 +648,53 @@ grr_board_view_button_release (GtkWidget *widget, if (view->button == event->button) { gtk_grab_remove (widget); - view->button = 0; + } + + grr_board_view_pointer_coords_to_grid (view, event->x, event->y, &x, &y); - grr_board_view_pointer_coords_to_grid (view, event->x, event->y, &x, &y); - - dx = x - view->drag_x; - dy = y - view->drag_y; - if (dx == 0 && dy == 0) - return FALSE; - - if (abs(dx) > abs(dy)) - if (x > view->drag_x) - dir = "east"; - else - dir = "west"; - else - if (y > view->drag_y) - dir = "south"; - else - dir = "north"; - - switch (view->drag_robot) { - case RR_ROBOT_BLUE: - robot = "blue"; - break; - case RR_ROBOT_GREEN: - robot = "green"; - break; - case RR_ROBOT_RED: - robot = "RED"; - break; - case RR_ROBOT_YELLOW: - robot = "YELLOW"; - break; - default: - return FALSE; - } - - if (view->client) { - char *move_str; - - grr_sprintf_alloc (&move_str, "%s %s", robot, dir); - if (move_str == NULL) - return FALSE; - rr_client_move (view->client, move_str); - free (move_str); - } + rr_board_find_robot (view->board, view->drag_robot, &robot_x, &robot_y); + dx = x - robot_x; + dy = y - robot_y; + if (dx == 0 && dy == 0) + return FALSE; + + if (abs(dx) > abs(dy)) + if (x > robot_x) + dir = "east"; + else + dir = "west"; + else + if (y > robot_y) + dir = "south"; + else + dir = "north"; + + switch (view->drag_robot) { + case RR_ROBOT_BLUE: + robot = "blue"; + break; + case RR_ROBOT_GREEN: + robot = "green"; + break; + case RR_ROBOT_RED: + robot = "RED"; + break; + case RR_ROBOT_YELLOW: + robot = "YELLOW"; + break; + default: + return FALSE; + } + + if (view->client) { + char *move_str; + + grr_sprintf_alloc (&move_str, "%s %s", robot, dir); + if (move_str == NULL) + return FALSE; + rr_client_move (view->client, move_str); + free (move_str); } return FALSE; diff --git a/src/grr_board_view.h b/src/grr_board_view.h index 7c16f7a..4fb8507 100644 --- a/src/grr_board_view.h +++ b/src/grr_board_view.h @@ -56,7 +56,6 @@ struct grr_board_view int cell_width, cell_height; - int drag_x, drag_y; rr_robot_t drag_robot; rr_client_t *client; -- 2.43.0