/* * mainwindow.c * * Main window * * (c) 2008 Thomas White * * This file is part of OpenMooCow - accelerometer moobox simulator * * OpenMooCow is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenMooCow is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenMooCow. If not, see . * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "types.h" #include "accelerometers.h" #include "audio.h" #include "physics.h" static gboolean mainwindow_timeout(gpointer data) { MainWindow *mw = data; accelerometer_update(mw->accel); physics_update(mw->physics, mw->accel->lval); if ( mw->physics->moo ) { audio_trigger_moo(mw->audio); mw->physics->moo = 0; } return TRUE; /* Call back again */ } static gint mainwindow_closed(GtkWidget *widget, MainWindow *mw) { audio_shutdown(mw->audio); gtk_exit(0); return 0; } MainWindow *mainwindow_open(void) { MainWindow *mw; GtkWidget *label; mw = malloc(sizeof(*mw)); if ( mw == NULL ) return NULL; mw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(mw->window), 240, 320); gtk_window_set_title(GTK_WINDOW(mw->window), "OpenMooCow"); mw->cow = gtk_image_new_from_file(PIXMAPDIR"/cow.png"); gtk_container_add(GTK_CONTAINER(mw->window), mw->cow); mw->accel = accelerometer_open(); mw->accel_timeout = g_timeout_add(10, mainwindow_timeout, mw); accelerometer_update(mw->accel); mw->audio = audio_setup(); mw->physics = physics_setup(); g_signal_connect(G_OBJECT(mw->window), "destroy", G_CALLBACK(mainwindow_closed), mw); gtk_widget_show_all(mw->window); return mw; }