X-Git-Url: https://git.cworth.org/git?p=wordgame;a=blobdiff_plain;f=rack-fancy.c;h=8fc516f41788f87d828264afda97b08e37041b3c;hp=14c8d70fa8b55c3f0e47f4c13a3c2cc70b69cc78;hb=169f626b0c71bc2cc5f7929ffa4b986e0acfee2a;hpb=1478e50ab9b22ef50fb0a1be0d77a5f532eb7bd8 diff --git a/rack-fancy.c b/rack-fancy.c index 14c8d70..8fc516f 100644 --- a/rack-fancy.c +++ b/rack-fancy.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "word-game.h" #include "demo-item.h" @@ -56,13 +57,59 @@ create_window (void) return scrolled_window; } +#define MAX_LETTERS 7 +static GooCanvasItem *letter_items[MAX_LETTERS]; +static int num_letters; + +static int +rand_within (int num_values) +{ + return (int) ((double) num_values * (rand() / (RAND_MAX + 1.0))); +} + +static void +shuffle (int *array, int length) +{ + int i, r, tmp; + + for (i = 0; i < length; i++) + { + r = i + rand_within (length - i); + tmp = array[i]; + array[i] = array[r]; + array[r] = tmp; + } +} + +#define LETTER_SIZE 60 +#define LETTER_PAD 5 + +static void +get_letter_position (int i, int *x, int *y) +{ + *x = 20 + i * (LETTER_SIZE + LETTER_PAD); + *y = 20; +} + static gboolean on_button_press (GooCanvasItem *item, GooCanvasItem *target, GdkEventButton *event, gpointer data) { - g_print ("demo item received button press event\n"); + int indices[MAX_LETTERS]; + int i, x, y; + + for (i = 0; i < num_letters; i++) + indices[i] = i; + + shuffle (indices, num_letters); + + for (i = 0; i < num_letters; i++) { + get_letter_position (indices[i], &x, &y); + goo_demo_item_move_to (letter_items[i], x, y); + } + return TRUE; } @@ -70,10 +117,9 @@ static void create_canvas (GtkWidget *parent, char *word) { GtkWidget *canvas; - GooCanvasItem *root, *letter; + GooCanvasItem *root; int i; - int item_size = 60; - int item_pad = 5; + int x, y; canvas = goo_canvas_new (); gtk_widget_set_size_request (canvas, 400, 400); @@ -83,16 +129,20 @@ create_canvas (GtkWidget *parent, char *word) root = goo_canvas_get_root_item (GOO_CANVAS (canvas)); - for (i = 0; i < strlen (word); i++) { - letter = goo_demo_item_new (root, - 30 + i * (item_size + item_pad), 20, - item_size, item_size, - word[i], - NULL); + for (i = 0; i < MIN (MAX_LETTERS, strlen (word)); i++) { + get_letter_position (i, &x, &y); + letter_items[i] = goo_demo_item_new (root, + x, y, + LETTER_SIZE, + word[i], + NULL); - g_signal_connect (letter, "button_press_event", + g_signal_connect (letter_items[i], "button_press_event", (GtkSignalFunc) on_button_press, NULL); } + num_letters = i; + while (i < MAX_LETTERS) + letter_items[i] = NULL; } int