Blame c/gtk3/mouse-maze/mousemaze.c

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