/** canvasimage.c **/ #include #include "logo.xpm" #include "foot.xpm" gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data); gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data); static gint dragEvent(GnomeCanvasItem *item, GdkEvent *event,gpointer data); int main(int argc,char *argv[]) { GtkWidget *app; GtkWidget *canvas; GnomeCanvasGroup *rootGroup; GnomeCanvasItem *item; GdkImlibImage *image; gnome_init("canvasimage","1.0",argc,argv); app = gnome_app_new("canvasimage", "Gnome Canvas Image"); gtk_signal_connect(GTK_OBJECT(app),"delete_event", GTK_SIGNAL_FUNC(eventDelete),NULL); gtk_signal_connect(GTK_OBJECT(app),"destroy", GTK_SIGNAL_FUNC(eventDestroy),NULL); canvas = gnome_canvas_new(); gtk_widget_set_usize(canvas,600,360); gnome_canvas_set_scroll_region(GNOME_CANVAS(canvas), 0.0,0.0,600,360); rootGroup = gnome_canvas_root(GNOME_CANVAS(canvas)); gnome_app_set_contents(GNOME_APP(app),canvas); image = gdk_imlib_create_image_from_xpm_data(logo); item = gnome_canvas_item_new(rootGroup, gnome_canvas_image_get_type(), "image",image, "x",(double)100, "y",(double)100, "width",(double)257, "height",(double)303, "anchor",GTK_ANCHOR_CENTER, NULL); gtk_signal_connect(GTK_OBJECT(item),"event", (GtkSignalFunc)dragEvent,NULL); gdk_imlib_destroy_image(image); image = gdk_imlib_create_image_from_xpm_data(foot); item = gnome_canvas_item_new(rootGroup, gnome_canvas_image_get_type(), "image",image, "x",(double)300, "y",(double)100, "width",(double)172, "height",(double)51, "anchor",GTK_ANCHOR_CENTER, NULL); gtk_signal_connect(GTK_OBJECT(item),"event", (GtkSignalFunc)dragEvent,NULL); item = gnome_canvas_item_new(rootGroup, gnome_canvas_image_get_type(), "image",image, "x",(double)200, "y",(double)150, "width",(double)200, "height",(double)200, "anchor",GTK_ANCHOR_CENTER, NULL); gtk_signal_connect(GTK_OBJECT(item),"event", (GtkSignalFunc)dragEvent,NULL); gdk_imlib_destroy_image(image); gtk_widget_show_all(app); gtk_main(); exit(0); } static gint dragEvent(GnomeCanvasItem *item, GdkEvent *event,gpointer data) { static gint x; static gint y; gint new_x; gint new_y; switch(event->type) { case GDK_MOTION_NOTIFY: if(event->button.state & 0x00000100) { new_x = event->button.x; new_y = event->button.y; gnome_canvas_item_move(item, (double)(new_x - x), (double)(new_y - y)); x = new_x; y = new_y; } break; case GDK_BUTTON_PRESS: if(event->button.button == 1) gnome_canvas_item_raise_to_top(item); x = event->button.x; y = event->button.y; break; default: break; } return(0); } gint eventDelete(GtkWidget *widget, GdkEvent *event,gpointer data) { return(FALSE); } gint eventDestroy(GtkWidget *widget, GdkEvent *event,gpointer data) { gtk_main_quit(); return(0); }