Skip to content

Commit

Permalink
puzzle: Add mouse support
Browse files Browse the repository at this point in the history
Make it so that clicking on a puzzle piece moves enough
pieces to move the empty space there, if it is possible.
  • Loading branch information
Matthias Clasen committed Jun 8, 2018
1 parent ebf042d commit 1ee23d0
Showing 1 changed file with 68 additions and 0 deletions.
68 changes: 68 additions & 0 deletions demos/gtk-demo/sliding_puzzle.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,68 @@ puzzle_key_pressed (GtkEventControllerKey *controller,
return TRUE;
}

static void
puzzle_button_pressed (GtkGestureMultiPress *gesture,
int n_press,
double x,
double y,
GtkWidget *grid)
{
GtkWidget *child;
int l, t, i;
int pos;

child = gtk_widget_pick (grid, x, y);

if (!child)
{
gtk_widget_error_bell (grid);
return;
}

gtk_container_child_get (GTK_CONTAINER (grid), child,
"left-attach", &l,
"top-attach", &t,
NULL);

if (l == pos_x && t == pos_y)
{
gtk_widget_error_bell (grid);
}
else if (l == pos_x)
{
pos = pos_y;
for (i = t; i < pos; i++)
{
if (!move_puzzle (grid, 0, -1))
gtk_widget_error_bell (grid);
}
for (i = pos; i < t; i++)
{
if (!move_puzzle (grid, 0, 1))
gtk_widget_error_bell (grid);
}
}
else if (t == pos_y)
{
pos = pos_x;
for (i = l; i < pos; i++)
{
if (!move_puzzle (grid, -1, 0))
gtk_widget_error_bell (grid);
}
for (i = pos; i < l; i++)
{
if (!move_puzzle (grid, 1, 0))
gtk_widget_error_bell (grid);
}
}
else
{
gtk_widget_error_bell (grid);
}
}

static void
start_puzzle (GdkPaintable *puzzle)
{
Expand All @@ -244,6 +306,12 @@ start_puzzle (GdkPaintable *puzzle)
grid);
gtk_widget_add_controller (GTK_WIDGET (grid), controller);

controller = gtk_gesture_multi_press_new ();
g_signal_connect (controller, "pressed",
G_CALLBACK (puzzle_button_pressed),
grid);
gtk_widget_add_controller (GTK_WIDGET (grid), controller);

/* Make sure the cells have equal size */
gtk_grid_set_row_homogeneous (GTK_GRID (grid), TRUE);
gtk_grid_set_column_homogeneous (GTK_GRID (grid), TRUE);
Expand Down

0 comments on commit 1ee23d0

Please sign in to comment.