-----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
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to