Blob Blame Raw
#include <gtk/gtk.h>

gboolean play = FALSE;
GtkWidget *image;
GtkWidget *label;


gboolean motion(GtkWidget *widget, GdkEventMotion *event, gpointer data) {
  if (play) {
    int x = (int)event->x;
    int y = (int)event->y;
    
    GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(image));
    guchar *pixels = gdk_pixbuf_get_pixels(pixbuf);
    int stride = gdk_pixbuf_get_rowstride(pixbuf);
    guint pixel = *(guint*)(pixels + y*stride + sizeof(guint)*x);
    
    if (pixel == 0xff000000) {
      gtk_label_set_text(GTK_LABEL(label), "You looooze");
      play = FALSE;
    } else
    if (pixel == 0xff00ffff) {
      gtk_label_set_text(GTK_LABEL(label), "You WIN!!!");
      play = FALSE;
    }
  }
  return TRUE;
}

void clicked(GtkButton *button, gpointer data) {
  gtk_label_set_text(GTK_LABEL(label), "Play");
  play = TRUE;
}

void activate(GtkApplication* app, gpointer data) {
  GtkWidget *window = gtk_application_window_new(app);
  gtk_container_set_border_width(GTK_CONTAINER(window), 10);
  
  GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5);
  gtk_container_add(GTK_CONTAINER(window), hbox);
  
  GtkWidget *event_box = gtk_event_box_new();
  g_signal_connect(event_box, "motion-notify-event", G_CALLBACK(motion), NULL);
  gtk_widget_add_events(event_box, GDK_POINTER_MOTION_MASK);
  gtk_container_add(GTK_CONTAINER(hbox), event_box);
  
  // required image format is 8-bit RGBA
  image = gtk_image_new_from_file("maze.png");
  gtk_container_add(GTK_CONTAINER(event_box), image);

  GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
  gtk_container_add(GTK_CONTAINER(hbox), vbox);
  
  GtkWidget *button = gtk_button_new_with_label("Start");
  g_signal_connect(button, "clicked", G_CALLBACK(clicked), NULL);
  gtk_widget_set_size_request(button, 150, 20);
  gtk_container_add(GTK_CONTAINER(vbox), button);
  
  label = gtk_label_new("--");
  gtk_container_add(GTK_CONTAINER(vbox), label);

  gtk_widget_show_all(window);
}

int main(int argc, char **argv) {
  GtkApplication *application = gtk_application_new(NULL, 0);
  g_signal_connect(application, "activate", G_CALLBACK(activate), NULL);
  int status = g_application_run(G_APPLICATION(application), argc, argv);
  g_object_unref(application);
  return status;
}