I try to understand how to use with gtk_widget_shape_combine_mask() function, i want to give a shape to my eventbox, i don't know if it possible? or it possible only for windows? I based on wheelbarrow.c from http://www.silab.dsi.unimi.it/manual/GTK+%20Tutorial/sec-pixmaps.html. Somebody can to help me ? my code is attached The compillation is ok, but it failed on running, the errors that i have is : (wheelbarrow:32756): Gdk-CRITICAL **: gdk_pixmap_colormap_create_from_xpm_d: assertion `drawable != NULL || colormap != NULL' failed (wheelbarrow:32756): Gtk-CRITICAL **: gtk_pixmap_new: assertion `val != NULL' failed (wheelbarrow:32756): Gtk-CRITICAL **: gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed (wheelbarrow:32756): Gtk-CRITICAL **: gtk_container_add: assertion `GTK_IS_WIDGET (widget)' failed Segmentation fault What's wrong here?
Attachment:
krug.xpm
Description: X pixmap
#include <gtk/gtk.h> #include <string.h> #include <ctype.h> int main (int argc, char *argv[]) { gtk_init (&argc, &argv); GtkWidget *window, *fixed; GdkColor color; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 800, 450); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window), 10); fixed=gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(window), fixed); GtkWidget *eventbox; eventbox=gtk_event_box_new(); //gtk_widget_set_app_paintable(eventbox, TRUE); gtk_widget_set_size_request(eventbox, 20, 25); //gdk_color_parse("#5BA84A", &color); //gtk_widget_modify_bg (eventbox, GTK_STATE_NORMAL, &color); gtk_fixed_put(GTK_FIXED(fixed), eventbox, 10, 10); // style = gtk_widget_get_default_style(); #include "krug.xpm" GdkPixmap *gdk_pixmap; GdkBitmap *mask; GtkStyle *style; GtkWidget *pixmap; style = gtk_widget_get_default_style(); gdk_pixmap = gdk_pixmap_create_from_xpm_d(eventbox->window, &mask, &style->bg[GTK_STATE_NORMAL], (gchar **)krug ); pixmap = gtk_pixmap_new( gdk_pixmap, mask ); gtk_widget_show( pixmap ); gtk_container_add(GTK_CONTAINER(eventbox), pixmap); gtk_widget_shape_combine_mask( eventbox, mask, 0, 0 ); gtk_widget_show(fixed); gtk_widget_show(eventbox); gtk_widget_show(window); gtk_main (); return 0; }