-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1,SHA512
Weitian Leung wrote:
> I used to simply call gtk_widget_shape_combine_mask and
> gdk_window_set_back_pixmap to create the irregularly-shaped window
> with the png image with gtk+2.0.
I happened to know one working code snippet existed in
an input method server called "gcin".
The attached codes works for all image format that GTK+ supports,
and also works for animated gif files.
Kind regards
Wen-Yen Chuang (caleb)
-----BEGIN PGP SIGNATURE-----
iEYEARECAAYFAk6AgGUACgkQdEpXpumNYVl73wCdHpK7/Tefxm02kYZJouSWm7CF
qMwAn2qDZckRct+agytpu7GDc0YhWGNtiQIcBAEBCgAGBQJOgIBlAAoJELc3H0m+
i6gZHOEQAIr/QE5QMDNKCu2G4klwor+JkiHKuBm3kpm++pixT2DAo2N0DJDkaHns
XXcirFcJxb6pYXPFoM+kPA9uZp9EdmS8xpjNAutLxi/z64LRyNDKrCFWIbVsDJvL
mqJo2nQ/McEGpTx7kL+qpYUbzu+RY7ylTQlyr8+DwnyrgNN2runrJ2qz113tl5gI
dYxGer4LaE2Pkbn/KQdgPZLy02l46HjWqqGutY13hPuASKkFPLjsVWmURvblQHEx
4tXwYcRvg7cbOp1wDjIi51UX5tGNakXcBFGOoMIULesUOLOaPGtwvBqG0TxaB3bM
7gMQVYZ2sMjVcW7EhM9UcWvutn9z4DkXB2ERovMjLSsmTQRFx1Jx+u5xm//3cddL
SXf6bk40zJ6+/q+N2PrkYDUE9smXd+xuVf07tjNbkeLljLuSeKNs1DxW4hmE7eq0
IOa+H3a2cV0mLsmvDqCnqfqaB3zBq8crI0Z2z95MDJJMDpTvLxVSygIK5f78imRT
F6XAxALPUCgBjMz/iBiNwFHs1iBRpcNZ72DHpYyxZ8n/6rZZcTwDr+O7CrEJbM1P
HjblEQbS8INfXfknGUi36CwPTi1aj0dONjIlVTxIlBNB0139C6hM9goL1ucak7SJ
9/5Rv8KnCWoAw44fJB21Kpl+IYc7NXqK316YoYHobFfkw5ICERz8
=Ucjr
-----END PGP SIGNATURE-----
#if GTK_CHECK_VERSION(2,91,0)
GdkPixbuf *pixbuf = NULL;
GdkPixbufAnimation *anime = NULL;
switch(gtk_image_get_storage_type(GTK_IMAGE(image))) {
case GTK_IMAGE_PIXBUF:
pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(image));
break;
case GTK_IMAGE_ANIMATION:
anime = gtk_image_get_animation(GTK_IMAGE(image));
pixbuf = gdk_pixbuf_animation_get_static_image(anime);
break;
default:
break;
}
cairo_surface_t *img = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf));
cairo_t *cr = cairo_create(img);
gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
cairo_paint(cr);
cairo_region_t *mask = gdk_cairo_region_create_from_surface(img);
gtk_widget_shape_combine_region(gwin_message, mask);
cairo_region_destroy(mask);
cairo_destroy(cr);
cairo_surface_destroy(img);
#else
GdkBitmap *bitmap = NULL;
gdk_pixbuf_render_pixmap_and_mask(gdk_pixbuf_new_from_file(icon, NULL),
NULL, &bitmap, 128);
gtk_widget_shape_combine_mask(gwin_message, bitmap, 0, 0);
#endif
_______________________________________________
gtk-app-devel-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list