X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=kub.c;h=74a37496700835deec7a47db8d802def15c43301;hb=8b49dd4f15d5d44dae6a45278f1b202da2911032;hp=a4d5dceae3e750fd2e87afe64bf6fbce5638497f;hpb=936a590e44f49282717fa02b4fd74421997f8ba7;p=kub diff --git a/kub.c b/kub.c index a4d5dce..74a3749 100644 --- a/kub.c +++ b/kub.c @@ -530,17 +530,20 @@ static gboolean on_button_press_event (GtkWidget *widget, GdkEventButton *event, for (i = 0; i < game->deck.num_tiles; i++) { + curr_tile = &game->deck.tiles[i]; + if (curr_tile->selected) + { + curr_tile->selected = 0; + gtk_widget_queue_draw_area (widget, curr_tile->x - 1, curr_tile->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); + } + tile_x = game->deck.tiles[i].x; tile_y = game->deck.tiles[i].y; if (event->x >= tile_x && event->x <= (tile_x + TILE_WIDTH) && event->y >= tile_y && event->y <= (tile_y + TILE_HEIGHT) ) { game->select_mode = 0; - - curr_tile = &game->deck.tiles[game->current_tile]; - game->deck.tiles[game->current_tile].selected = 0; - gtk_widget_queue_draw_area (widget, curr_tile->x - 1, curr_tile->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); - + game->current_tile = i; curr_tile = &game->deck.tiles[game->current_tile]; if (!curr_tile->selected) @@ -610,7 +613,19 @@ static gboolean on_button_release_event (GtkWidget *widget, GdkEventButton *even tile_y2 >= y_min && tile_y2 <= y_max) || /*or top-right corner of tile selected*/ (tile_x2 >= x_min && tile_x2 <= x_max && - tile_y >= y_min && tile_y <= y_max) ) + tile_y >= y_min && tile_y <= y_max) || + /*or left edge*/ + (y_min >= tile_y && y_min <= tile_y2 && + x_min <= tile_x && x_max >= tile_x) || + /*or top edge*/ + (x_min >= tile_x && x_min <= tile_x2 && + y_min <= tile_y && y_max >= tile_y) || + /*or right edge*/ + (y_min >= tile_y && y_min <= tile_y2 && + x_min >= tile_x && x_min <= tile_x2) || + /*or bottom edge*/ + (x_min >= tile_x && x_min <= tile_x2 && + y_min >= tile_y && y_min <= tile_y) ) { group.tiles[group.num_tiles] = game->deck.tiles[i]; group.num_tiles++; @@ -635,12 +650,70 @@ static gboolean on_button_motion_event (GtkWidget *widget, GdkEventMotion *event box = &game->selection_box; box->visible = 1; - gtk_widget_queue_draw_area ( widget, MIN(box->x1, box->x2), MIN(box->y1, box->y2), abs(box->x2 - box->x1), abs(box->y2 - box->y1) ); + int x_min = MIN(box->x1, box->x2); + int x_max = MAX(box->x1, box->x2); + int y_min = MIN(box->y1, box->y2); + int y_max = MAX(box->y1, box->y2); + int width = abs(box->x2 - box->x1); + int height = abs(box->y2 - box->y1); + + gtk_widget_queue_draw_area ( widget, x_min, y_min, width, height ); box->x2 = event->x; box->y2 = event->y; gtk_widget_queue_draw_area ( widget, MIN(box->x1, box->x2), MIN(box->y1, box->y2), abs(box->x2 - box->x1), abs(box->y2 - box->y1) ); + + int i, tile_x, tile_y, tile_x2, tile_y2; + tile_t *curr_tile; + for (i = 0; i < game->deck.num_tiles; i++) + { + curr_tile = &game->deck.tiles[i]; + if (curr_tile->selected) + { + curr_tile->selected = 0; + gtk_widget_queue_draw_area (widget, curr_tile->x - 1, curr_tile->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); + } + + tile_x = game->deck.tiles[i].x; + tile_y = game->deck.tiles[i].y; + tile_x2 = tile_x + TILE_WIDTH; + tile_y2 = tile_y + TILE_HEIGHT; + if (/*If top-left corner*/ + (tile_x >= x_min && tile_x <= x_max && + tile_y >= y_min && tile_y <= y_max) || + /*or bottom-right corner*/ + (tile_x2 >= x_min && tile_x2 <= x_max && + tile_y2 >= y_min && tile_y2 <= y_max) || + /*or bottom-left corner*/ + (tile_x >= x_min && tile_x <= x_max && + tile_y2 >= y_min && tile_y2 <= y_max) || + /*or top-right corner of tile selected*/ + (tile_x2 >= x_min && tile_x2 <= x_max && + tile_y >= y_min && tile_y <= y_max) || + /*or left edge*/ + (y_min >= tile_y && y_min <= tile_y2 && + x_min <= tile_x && x_max >= tile_x) || + /*or top edge*/ + (x_min >= tile_x && x_min <= tile_x2 && + y_min <= tile_y && y_max >= tile_y) || + /*or right edge*/ + (y_min >= tile_y && y_min <= tile_y2 && + x_min >= tile_x && x_min <= tile_x2) || + /*or bottom edge*/ + (x_min >= tile_x && x_min <= tile_x2 && + y_min >= tile_y && y_min <= tile_y) ) + { + curr_tile->selected = 1; + gtk_widget_queue_draw_area (widget, curr_tile->x - 1, curr_tile->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); + } +/* + else + { + curr_tile->selected = 0; + gtk_widget_queue_draw_area (widget, curr_tile->x - 1, curr_tile->y - 1, TILE_WIDTH + 1, TILE_HEIGHT + 2); + }*/ + } } else {