#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
void
close_button_clicked (GtkWidget *widget, gpointer user_data)
{
printf ("Quit now!./n");
gtk_main_quit ();
}
gint mouse_event_handle(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
GdkPixbuf *pixbuf;
GdkPixmap *pixmap;
GdkBitmap *bitmap;
GtkWidget *oldImage;
GtkWidget *newImage;
switch(event->type){
case GDK_BUTTON_PRESS:
printf("GDK_BUTTON_PRESS/n");
break;
case GDK_BUTTON_RELEASE:
printf("GDK_BUTTON_RELEASE/n");
break;
case GDK_ENTER_NOTIFY:
printf("GDK_ENTER_NOTIFY/n");
oldImage = GTK_WIDGET(gtk_container_children(GTK_CONTAINER(widget))->data);
gtk_object_ref(GTK_OBJECT(oldImage));
gtk_container_remove(GTK_CONTAINER(widget), oldImage);
pixbuf = gdk_pixbuf_new_from_file ("/home/Jung/GTKTEST/src/A00.png", NULL);
newImage = gtk_image_new_from_pixbuf (pixbuf);
gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &bitmap, 128);
gtk_widget_shape_combine_mask(widget, bitmap, 0, 0);
gtk_container_add(GTK_CONTAINER(widget), newImage);
gtk_widget_show(newImage);
break;
case GDK_LEAVE_NOTIFY:
printf("GDK_LEAVE_NOTIFY/n");
oldImage = GTK_WIDGET(gtk_container_children(GTK_CONTAINER(widget))->data);
gtk_object_ref(GTK_OBJECT(oldImage));
gtk_container_remove(GTK_CONTAINER(widget), oldImage);
pixbuf = gdk_pixbuf_new_from_file ("/home/Jung/GTKTEST/src/A.png", NULL);
newImage = gtk_image_new_from_pixbuf (pixbuf);
gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &bitmap, 128);
gtk_widget_shape_combine_mask(widget, bitmap, 0, 0);
gtk_container_add(GTK_CONTAINER(widget), newImage);
gtk_widget_show(newImage);
break;
default:
printf("unknow/n");
break;
}
return 0;
}
int main(int argc, char *argv[])
{
GladeXML *main_window = NULL;
GtkWidget *fixed = NULL;
GdkPixbuf *pixbuf = NULL;
GdkPixmap *pixmap = NULL;
GtkWidget *widget;
GtkWidget *window;
GtkWidget *eventbox;
GtkWidget *image;
GdkBitmap *bitmap;
gtk_init(&argc,&argv);
// Create the window
// load the interface
main_window = glade_xml_new ("/home/Jung/GTKTEST/src/test.glade", NULL, NULL);
glade_xml_signal_autoconnect(main_window);
//load background
pixbuf = gdk_pixbuf_new_from_file ("/home/Jung/GTKTEST/src/RainDrops.jpg",NULL);
image = gtk_image_new_from_pixbuf (pixbuf);
window = glade_xml_get_widget (main_window, "Main_Window");
gtk_widget_set_app_paintable(window,TRUE);
gtk_widget_realize (window);
gtk_widget_set_size_request(window, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf));
pixmap = gdk_pixmap_new (window->window, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf), -1);
gdk_pixbuf_render_to_drawable(pixbuf, pixmap,
window->style->fg_gc[GTK_STATE_NORMAL],
0,0,0,0,
gdk_pixbuf_get_width(pixbuf),
gdk_pixbuf_get_height(pixbuf),
GDK_RGB_DITHER_NORMAL,0,0);
g_object_unref(pixbuf);
gdk_window_set_back_pixmap (window->window, pixmap, FALSE);
widget = glade_xml_get_widget (main_window, "btn_close");
g_signal_connect (G_OBJECT (widget), "clicked",
G_CALLBACK (close_button_clicked), NULL);
// Load button
eventbox = glade_xml_get_widget (main_window, "eventbox1");
pixbuf = gdk_pixbuf_new_from_file ("/home/Jung/GTKTEST/src/A.png",NULL);
image = gtk_image_new_from_pixbuf (pixbuf);
gtk_widget_set_size_request(eventbox, gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf));
gtk_container_add(GTK_CONTAINER(eventbox), image);
// Set button mask
gdk_pixbuf_render_pixmap_and_mask(pixbuf, NULL, &bitmap, 255);
gtk_widget_shape_combine_mask(eventbox, bitmap, 0, 0);
gtk_widget_set_events(eventbox, GDK_MOTION_NOTIFY | GDK_BUTTON_PRESS | GDK_BUTTON_RELEASE
| GDK_ENTER_NOTIFY | GDK_LEAVE_NOTIFY);
g_signal_connect(G_OBJECT(eventbox), "button_press_event", GTK_SIGNAL_FUNC(mouse_event_handle), NULL);
g_signal_connect(G_OBJECT(eventbox), "button_release_event", GTK_SIGNAL_FUNC(mouse_event_handle), NULL);
g_signal_connect(G_OBJECT(eventbox), "enter_notify_event", GTK_SIGNAL_FUNC(mouse_event_handle), NULL);
g_signal_connect(G_OBJECT(eventbox), "leave_notify_event", GTK_SIGNAL_FUNC(mouse_event_handle), NULL);
g_signal_connect (G_OBJECT (glade_xml_get_widget (main_window, "Main_Window")), "delete_event",
G_CALLBACK (gtk_main_quit), NULL);
gtk_widget_show_all(glade_xml_get_widget (main_window, "Main_Window"));
gtk_main();
return 0;
}