1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
#include <gtk/gtk.h>
enum MOTION
{
NONE, HOVER, CLICKED, PRESSED, RELEASED
};
void button_motion (GtkButton *button, int m)
{
GtkWidget *img;
switch (m)
{
case RELEASED:
case HOVER:
{
img = gtk_image_new_from_stock(GTK_STOCK_DIALOG_QUESTION,GTK_ICON_SIZE_LARGE_TOOLBAR);
break;
}
case CLICKED:
{
img = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_LARGE_TOOLBAR);
break;
}
case NONE:
{
img = gtk_image_new_from_stock(GTK_STOCK_OK,GTK_ICON_SIZE_LARGE_TOOLBAR);
break;
}
case PRESSED:
{
img = gtk_image_new_from_stock(GTK_STOCK_DIALOG_INFO,GTK_ICON_SIZE_LARGE_TOOLBAR);
break;
}
default:
{
img = gtk_image_new_from_stock(GTK_STOCK_OK,GTK_ICON_SIZE_LARGE_TOOLBAR);
break;
}
}
gtk_button_set_image(button,img);
}
int main(int argc, char *argv[])
{
GtkWidget *win;
GtkWidget *button;
gtk_init(&argc,&argv);
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(win),GTK_WIN_POS_CENTER);
g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(gtk_main_quit),NULL);
button = gtk_button_new();
/* signals */
g_signal_connect(G_OBJECT(button),"show",G_CALLBACK(button_motion),(gpointer)NONE);
g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(button_motion),(gpointer)CLICKED);
g_signal_connect(G_OBJECT(button),"enter",G_CALLBACK(button_motion),(gpointer)HOVER);
g_signal_connect(G_OBJECT(button),"pressed",G_CALLBACK(button_motion),(gpointer)PRESSED);
g_signal_connect(G_OBJECT(button),"released",G_CALLBACK(button_motion),(gpointer)RELEASED);
g_signal_connect(G_OBJECT(button),"leave",G_CALLBACK(button_motion),(gpointer)NONE);
gtk_container_border_width(GTK_CONTAINER(win), 25);
gtk_container_add(GTK_CONTAINER(win),button);
gtk_widget_show_all(win);
gtk_main();
return 0;
}
|