aboutsummaryrefslogtreecommitdiff
path: root/gtk.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2004-04-25 20:15:22 +0000
committerSimon Tatham <anakin@pobox.com>2004-04-25 20:15:22 +0000
commita87bb0576073849b4d316e13132bb6c39c92e78d (patch)
tree1900e8f445473da8c33c1f01e807dc43228e2d08 /gtk.c
parent3663603627809a11908dc1dfadd158cfde8e0672 (diff)
downloadpuzzles-a87bb0576073849b4d316e13132bb6c39c92e78d.zip
puzzles-a87bb0576073849b4d316e13132bb6c39c92e78d.tar.gz
puzzles-a87bb0576073849b4d316e13132bb6c39c92e78d.tar.bz2
puzzles-a87bb0576073849b4d316e13132bb6c39c92e78d.tar.xz
General further development. Sketched out the mid-end, added more
GTK code, rudiments of event passing. [originally from svn r4141]
Diffstat (limited to 'gtk.c')
-rw-r--r--gtk.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/gtk.c b/gtk.c
index 1d5ffdc..8bb01fd 100644
--- a/gtk.c
+++ b/gtk.c
@@ -41,6 +41,8 @@ void fatal(char *fmt, ...)
*/
struct window_data {
GtkWidget *window;
+ GtkWidget *area;
+ midend_data *me;
};
static void destroy(GtkWidget *widget, gpointer data)
@@ -48,15 +50,52 @@ static void destroy(GtkWidget *widget, gpointer data)
gtk_main_quit();
}
+gint key_event(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+ struct window_data *wdata = (struct window_data *)data;
+
+ IGNORE(wdata);
+
+ if (!midend_process_key(wdata->me, 0, 0, event->keyval))
+ gtk_widget_destroy(wdata->window);
+
+ return TRUE;
+}
+
+gint button_event(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+ struct window_data *wdata = (struct window_data *)data;
+
+ IGNORE(wdata);
+
+ return TRUE;
+}
+
static struct window_data *new_window(void)
{
struct window_data *wdata;
+ int x, y;
wdata = snew(struct window_data);
+ wdata->me = midend_new();
+ midend_new_game(wdata->me, NULL);
+
wdata->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+
+ wdata->area = gtk_drawing_area_new();
+ midend_size(wdata->me, &x, &y);
+ gtk_drawing_area_size(GTK_DRAWING_AREA(wdata->area), x, y);
+
+ gtk_container_add(GTK_CONTAINER(wdata->window), wdata->area);
+ gtk_widget_show(wdata->area);
+
gtk_signal_connect(GTK_OBJECT(wdata->window), "destroy",
GTK_SIGNAL_FUNC(destroy), wdata);
+ gtk_signal_connect(GTK_OBJECT(wdata->window), "key_press_event",
+ GTK_SIGNAL_FUNC(key_event), wdata);
+ gtk_signal_connect(GTK_OBJECT(wdata->area), "button_press_event",
+ GTK_SIGNAL_FUNC(button_event), wdata);
gtk_widget_show(wdata->window);
return wdata;
}