+/**
+ * gtk_clutter_texture_new_from_pixbuf:
+ * @pixbuf: a #GdkPixbuf
+ *
+ * FIXME
+ *
+ * Return value: the newly created #ClutterTexture
+ *
+ * Since: 0.8
+ */
+ClutterActor *
+gtk_clutter_texture_new_from_pixbuf (GdkPixbuf *pixbuf)
+{
+ ClutterActor *retval;
+ GError *error;
+
+ g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
+
+ retval = clutter_texture_new ();
+
+ error = NULL;
+ clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE (retval),
+ gdk_pixbuf_get_pixels (pixbuf),
+ gdk_pixbuf_get_has_alpha (pixbuf),
+ gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf),
+ gdk_pixbuf_get_rowstride (pixbuf),
+ 4, 0,
+ &error);
+ if (error)
+ {
+ g_warning ("Unable to set the pixbuf: %s", error->message);
+ g_error_free (error);
+ }
+
+ return retval;
+}
+
+/**
+ * gtk_clutter_texture_new_from_stock:
+ * @widget: a #GtkWidget
+ * @stock_id: FIXME
+ * @size: FIXME
+ *
+ * FIXME
+ *
+ * Return value: the newly created #ClutterTexture
+ *
+ * Since: 0.8
+ */
+ClutterActor *
+gtk_clutter_texture_new_from_stock (GtkWidget *widget,
+ const gchar *stock_id,
+ GtkIconSize size)
+{
+ GdkPixbuf *pixbuf;
+ ClutterActor *retval;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+ g_return_val_if_fail (stock_id != NULL, NULL);
+ g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
+
+ pixbuf = gtk_widget_render_icon (widget, stock_id, size, NULL);
+ if (!pixbuf)
+ pixbuf = gtk_widget_render_icon (widget,
+ GTK_STOCK_MISSING_IMAGE, size,
+ NULL);
+
+ retval = gtk_clutter_texture_new_from_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ return retval;
+}
+
+/**
+ * gtk_clutter_texture_new_from_icon_name:
+ * @widget: a #GtkWidget
+ * @icon_name: FIXME
+ * @size: FIXME
+ *
+ * FIXME
+ *
+ * Return value: the newly created #ClutterTexture
+ *
+ * Since: 0.8
+ */
+ClutterActor *
+gtk_clutter_texture_new_from_icon_name (GtkWidget *widget,
+ const gchar *icon_name,
+ GtkIconSize size)
+{
+ GtkSettings *settings;
+ GtkIconTheme *icon_theme;
+ gint width, height;
+ GdkPixbuf *pixbuf;
+ GError *error;
+ ClutterActor *retval;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+ g_return_val_if_fail (icon_name != NULL, NULL);
+ g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
+
+ if (gtk_widget_has_screen (widget))
+ {
+ GdkScreen *screen;
+
+ screen = gtk_widget_get_screen (widget);
+ settings = gtk_settings_get_for_screen (screen);
+ icon_theme = gtk_icon_theme_get_for_screen (screen);
+ }
+ else
+ {
+ settings = gtk_settings_get_default ();
+ icon_theme = gtk_icon_theme_get_default ();
+ }
+
+ if (!gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
+ {
+ g_warning ("Invalid icon size");
+ width = height = 48;
+ }
+
+ error = NULL;
+ pixbuf = gtk_icon_theme_load_icon (icon_theme,
+ icon_name,
+ MIN (width, height), 0,
+ &error);
+ if (error)
+ {
+ g_error_free (error);
+ return gtk_clutter_texture_new_from_stock (widget,
+ GTK_STOCK_MISSING_IMAGE,
+ size);
+ }
+
+ retval = gtk_clutter_texture_new_from_pixbuf (pixbuf);
+ g_object_unref (pixbuf);
+
+ return retval;
+}