All pastes #262823 Raw Edit

Stuff

public text v1 · immutable
#262823 ·published 2006-11-30 22:28 UTC
rendered paste body
/* 
**gcc -Wall --pedantic-errors -o hello hello.c `pkg-config --cflags --libs gtk+-2.0`
*/

#include <gtk/gtk.h>

GdkPixbuf *image[3];

static gboolean button_hover(GtkWidget *widget, GdkEvent *event, gpointer user_data) 
{
  gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[2]));
  
  return(TRUE);
}

static gboolean button_unhover(GtkWidget *widget, GdkEvent  *event, gpointer   user_data) 
{
  gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[0]));
  
  return(TRUE);
}

static void button_pressed(GtkWidget *widget, gpointer   data)
{
  gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[1]));
}

static void button_released(GtkWidget *widget, gpointer   data)
{
  gtk_button_set_image(GTK_BUTTON(widget), gtk_image_new_from_pixbuf(image[2]));
}

static gboolean delete_event(GtkWidget *widget, GdkEvent  *event, gpointer   data)
{
  g_print("delete event occurred\n");
  
  return(FALSE);
}

static void destroy(GtkWidget *widget, gpointer   data)
{
  g_print("destroy event occured\n");
  gtk_main_quit();
}

static void load_images() 
{
  image[0] = gdk_pixbuf_new_from_file("firefox-newlogo.png", NULL);
  image[1] = gdk_pixbuf_new_from_file("firefox.png", NULL);
  image[2] = gdk_pixbuf_new_from_file("firefox-old.png", NULL);
}

int main(int argc, char *argv[])
{
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *Exit_button;
  GtkWidget *vbox;
  GtkWidget *hbox;

  gtk_init(&argc, &argv);
  
  load_images();
  
  /* Setting the window */
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW (window), "Hello test");
  
  g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL);
  g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
  gtk_container_set_border_width(GTK_CONTAINER(window), 10);
  
  /* The two buttons */
  button = gtk_button_new();
  gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_pixbuf(image[0]));
  gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
  
  g_signal_connect(G_OBJECT(button), "enter-notify-event",G_CALLBACK (button_hover), NULL);
  g_signal_connect(G_OBJECT(button), "leave-notify-event",G_CALLBACK (button_unhover), NULL);
  g_signal_connect(G_OBJECT(button), "button-press-event",G_CALLBACK (button_pressed), NULL);
  g_signal_connect(G_OBJECT(button), "button-release-event",G_CALLBACK (button_released), NULL);
  
  Exit_button = gtk_button_new_with_label("Exit");
  g_signal_connect(G_OBJECT(Exit_button), "button-press-event", G_CALLBACK(destroy), window);

  /* Adding the buttons to the box */
  vbox = gtk_vbox_new(FALSE, 10);
  
  hbox = gtk_hbox_new(FALSE, 10);
  gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(button), FALSE, FALSE, 1);
  gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), FALSE, FALSE, 1);
  
  hbox = gtk_hbox_new(FALSE, 10);
  gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(Exit_button), FALSE, FALSE, 1);
  gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), FALSE, FALSE, 1);
  
  gtk_container_add(GTK_CONTAINER(window), vbox);
  
  /* Displaying all widgets */
  gtk_widget_show_all(window);
  
  gtk_main();
  
  return(0);
}