]> git.cworth.org Git - kub/commitdiff
Allow selection of tile by including any edge of tile and highlight selected files.
authorKevin Worth <kworth@kworth-laptop.(none)>
Fri, 3 Jul 2009 16:44:12 +0000 (12:44 -0400)
committerKevin Worth <kworth@kworth-laptop.(none)>
Fri, 3 Jul 2009 16:44:12 +0000 (12:44 -0400)
      A group of tiles can be selected by overlapping
      the selection box and any edge(not including a corner)
      of each tile.

      Highlighting on the fly is currently buggy. Selected tiles
      remain highlighted even once they are no longer within
      the selection box and even after an empty space or other tile
      is clicked.

kub.c

diff --git a/kub.c b/kub.c
index a4d5dceae3e750fd2e87afe64bf6fbce5638497f..a029c137b845d6228a4cf9d61ce531ef0b2ba85b 100644 (file)
--- a/kub.c
+++ b/kub.c
@@ -536,7 +536,7 @@ static gboolean on_button_press_event (GtkWidget *widget, GdkEventButton *event,
            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);
@@ -610,7 +610,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 +647,27 @@ 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) );
+       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) );
 
        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_t *curr_tile;
+       for (i = 0; i < game->deck.num_tiles; i++)
+       {
+           if ((event->x >= game->deck.tiles[i].x &&
+                event->x <= game->deck.tiles[i].x + TILE_WIDTH) &&
+               (event->y >= game->deck.tiles[i].y &&
+                event->y <= game->deck.tiles[i].y + TILE_HEIGHT))
+           {
+               curr_tile = &game->deck.tiles[i];
+               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
     {