diff options
Diffstat (limited to 'src/mainwindow.c')
-rw-r--r-- | src/mainwindow.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c new file mode 100644 index 0000000..8c2b256 --- /dev/null +++ b/src/mainwindow.c @@ -0,0 +1,90 @@ +/* + * mainwindow.c + * + * Main window + * + * (c) 2008 Thomas White <taw27@srcf.ucam.org> + * + * 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 <http://www.gnu.org/licenses/>. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <gtk/gtk.h> +#include <stdlib.h> +#include <stdarg.h> +#include <stdio.h> +#include <math.h> + +#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; + +} + |