|
|
a9ad45 |
#include <gtk gtk.h=""></gtk>
|
|
|
a9ad45 |
|
|
|
a9ad45 |
gboolean play = FALSE;
|
|
|
a9ad45 |
GtkWidget *image;
|
|
|
a9ad45 |
GtkWidget *label;
|
|
|
a9ad45 |
|
|
|
a9ad45 |
|
|
|
a9ad45 |
gboolean motion(GtkWidget *widget, GdkEventMotion *event, gpointer data) {
|
|
|
a9ad45 |
if (play) {
|
|
|
a9ad45 |
int x = (int)event->x;
|
|
|
a9ad45 |
int y = (int)event->y;
|
|
|
a9ad45 |
|
|
|
a9ad45 |
GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(image));
|
|
|
a9ad45 |
guchar *pixels = gdk_pixbuf_get_pixels(pixbuf);
|
|
|
a9ad45 |
int stride = gdk_pixbuf_get_rowstride(pixbuf);
|
|
|
a9ad45 |
guint pixel = *(guint*)(pixels + y*stride + sizeof(guint)*x);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
if (pixel == 0xff000000) {
|
|
|
a9ad45 |
gtk_label_set_text(GTK_LABEL(label), "You looooze");
|
|
|
a9ad45 |
play = FALSE;
|
|
|
a9ad45 |
} else
|
|
|
a9ad45 |
if (pixel == 0xff00ffff) {
|
|
|
a9ad45 |
gtk_label_set_text(GTK_LABEL(label), "You WIN!!!");
|
|
|
a9ad45 |
play = FALSE;
|
|
|
a9ad45 |
}
|
|
|
a9ad45 |
}
|
|
|
a9ad45 |
return TRUE;
|
|
|
a9ad45 |
}
|
|
|
a9ad45 |
|
|
|
a9ad45 |
void clicked(GtkButton *button, gpointer data) {
|
|
|
a9ad45 |
gtk_label_set_text(GTK_LABEL(label), "Play");
|
|
|
a9ad45 |
play = TRUE;
|
|
|
a9ad45 |
}
|
|
|
a9ad45 |
|
|
|
a9ad45 |
void activate(GtkApplication* app, gpointer data) {
|
|
|
a9ad45 |
GtkWidget *window = gtk_application_window_new(app);
|
|
|
a9ad45 |
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
|
|
|
a9ad45 |
gtk_container_add(GTK_CONTAINER(window), hbox);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
GtkWidget *event_box = gtk_event_box_new();
|
|
|
a9ad45 |
g_signal_connect(event_box, "motion-notify-event", G_CALLBACK(motion), NULL);
|
|
|
a9ad45 |
gtk_widget_add_events(event_box, GDK_POINTER_MOTION_MASK);
|
|
|
a9ad45 |
gtk_container_add(GTK_CONTAINER(hbox), event_box);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
// required image format is 8-bit RGBA
|
|
|
a9ad45 |
image = gtk_image_new_from_file("maze.png");
|
|
|
a9ad45 |
gtk_container_add(GTK_CONTAINER(event_box), image);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
|
|
|
a9ad45 |
gtk_container_add(GTK_CONTAINER(hbox), vbox);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
GtkWidget *button = gtk_button_new_with_label("Start");
|
|
|
a9ad45 |
g_signal_connect(button, "clicked", G_CALLBACK(clicked), NULL);
|
|
|
a9ad45 |
gtk_widget_set_size_request(button, 150, 20);
|
|
|
a9ad45 |
gtk_container_add(GTK_CONTAINER(vbox), button);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
label = gtk_label_new("--");
|
|
|
a9ad45 |
gtk_container_add(GTK_CONTAINER(vbox), label);
|
|
|
a9ad45 |
|
|
|
a9ad45 |
gtk_widget_show_all(window);
|
|
|
a9ad45 |
}
|
|
|
a9ad45 |
|
|
|
a9ad45 |
int main(int argc, char **argv) {
|
|
|
a9ad45 |
GtkApplication *application = gtk_application_new(NULL, 0);
|
|
|
a9ad45 |
g_signal_connect(application, "activate", G_CALLBACK(activate), NULL);
|
|
|
a9ad45 |
int status = g_application_run(G_APPLICATION(application), argc, argv);
|
|
|
a9ad45 |
g_object_unref(application);
|
|
|
a9ad45 |
return status;
|
|
|
a9ad45 |
}
|
|
|
a9ad45 |
|