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);
}