]> git.cworth.org Git - wordgame/blob - rack-fancy.c
Make rack-fancy select and display a rack of 7 random letters
[wordgame] / rack-fancy.c
1 /*
2  * Copyright © 2006 Carl Worth
3  *
4  * This program is free software; you can redistribute it and\/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2, or (at your option)
7  * any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
17  */
18 #include <stdlib.h>
19 #include <string.h>
20 #include <goocanvas.h>
21 #include <sys/time.h>
22 #include <time.h>
23 #include <ctype.h>
24
25 #include "word-game.h"
26 #include "demo-item.h"
27
28 static gboolean
29 on_delete_event (GtkWidget *window,
30                  GdkEvent  *event,
31                  gpointer   unused_data)
32 {
33     exit (0);
34 }
35
36 static GtkWidget *
37 create_window (void)
38 {
39     GtkWidget *window, *scrolled_window;
40
41     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
42     gtk_window_set_default_size (GTK_WINDOW (window), 500, 500);
43     gtk_widget_show (window);
44     g_signal_connect (window, "delete_event",
45                       (GtkSignalFunc) on_delete_event, NULL);
46
47     scrolled_window = gtk_scrolled_window_new (NULL, NULL);
48     gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
49                                          GTK_SHADOW_IN);
50     gtk_scrolled_window_set_policy  (GTK_SCROLLED_WINDOW (scrolled_window),
51                                      GTK_POLICY_AUTOMATIC,
52                                      GTK_POLICY_AUTOMATIC);
53     gtk_widget_show (scrolled_window);
54     gtk_container_add (GTK_CONTAINER (window), scrolled_window);
55
56     return scrolled_window;
57 }
58
59 static gboolean
60 on_button_press (GooCanvasItem  *item,
61                  GooCanvasItem  *target,
62                  GdkEventButton *event,
63                  gpointer        data)
64 {
65     g_print ("demo item received button press event\n");
66     return TRUE;
67 }
68
69 static void
70 create_canvas (GtkWidget *parent, char *word)
71 {
72     GtkWidget *canvas;
73     GooCanvasItem *root, *letter;
74     int i;
75     int item_size = 60;
76     int item_pad = 5;
77
78     canvas = goo_canvas_new ();
79     gtk_widget_set_size_request (canvas, 400, 400);
80     goo_canvas_set_bounds (GOO_CANVAS (canvas), 0, 0, 400, 400);
81     gtk_widget_show (canvas);
82     gtk_container_add (GTK_CONTAINER (parent), canvas);
83
84     root = goo_canvas_get_root_item (GOO_CANVAS (canvas));
85
86     for (i = 0; i < strlen (word); i++) {
87         letter = goo_demo_item_new (root,
88                                     30 + i * (item_size + item_pad), 20,
89                                     item_size, item_size,
90                                     word[i],
91                                     NULL);
92
93         g_signal_connect (letter, "button_press_event",
94                           (GtkSignalFunc) on_button_press, NULL);
95     }
96 }
97
98 int
99 main (int argc, char *argv[])
100 {
101     struct timeval tv;
102     bag_t bag;
103     char rack[8];
104     int i;
105     GtkWidget *window;
106
107     gettimeofday (&tv, NULL);
108     srand (tv.tv_sec ^ tv.tv_usec);
109
110     bag_init (&bag);
111     bag_shuffle (&bag);
112
113     memcpy (rack, bag.tiles, 7);
114     rack[7] = '\0';
115
116     for (i = 0; i < 7; i++)
117         rack[i] = toupper (rack[i]);
118
119     gtk_init (&argc, &argv);
120     window = create_window ();
121
122     create_canvas (window, rack);
123
124     gtk_main ();
125
126     return 0;
127 }