5 #include <gdk-pixbuf/gdk-pixbuf.h>
7 #include <clutter/clutter.h>
9 #include "gtk-clutter-util.h"
12 * SECTION:gtk-clutter-util
13 * @short_description: Utility functions for integrating Clutter in GTK+
20 gtk_clutter_get_component (GtkWidget *widget,
25 GtkStyle *style = gtk_widget_get_style (widget);
26 GdkColor gtk_color = { 0, };
31 gtk_color = style->fg[state];
35 gtk_color = style->bg[state];
39 gtk_color = style->text[state];
43 gtk_color = style->base[state];
47 g_assert_not_reached ();
51 color->red = (guint8) ((gtk_color.red / 65535.0) * 255);
52 color->green = (guint8) ((gtk_color.green / 65535.0) * 255);
53 color->blue = (guint8) ((gtk_color.blue / 65535.0) * 255);
57 * gtk_clutter_get_fg_color:
67 gtk_clutter_get_fg_color (GtkWidget *widget,
71 g_return_if_fail (GTK_IS_WIDGET (widget));
72 g_return_if_fail (state >= GTK_STATE_NORMAL &&
73 state <= GTK_STATE_INSENSITIVE);
74 g_return_if_fail (color != NULL);
76 gtk_clutter_get_component (widget, GTK_RC_FG, state, color);
80 * gtk_clutter_get_bg_color:
90 gtk_clutter_get_bg_color (GtkWidget *widget,
94 g_return_if_fail (GTK_IS_WIDGET (widget));
95 g_return_if_fail (state >= GTK_STATE_NORMAL &&
96 state <= GTK_STATE_INSENSITIVE);
97 g_return_if_fail (color != NULL);
99 gtk_clutter_get_component (widget, GTK_RC_BG, state, color);
103 * gtk_clutter_get_text_color:
113 gtk_clutter_get_text_color (GtkWidget *widget,
117 g_return_if_fail (GTK_IS_WIDGET (widget));
118 g_return_if_fail (state >= GTK_STATE_NORMAL &&
119 state <= GTK_STATE_INSENSITIVE);
120 g_return_if_fail (color != NULL);
122 gtk_clutter_get_component (widget, GTK_RC_TEXT, state, color);
126 * gtk_clutter_get_base_color:
136 gtk_clutter_get_base_color (GtkWidget *widget,
140 g_return_if_fail (GTK_IS_WIDGET (widget));
141 g_return_if_fail (state >= GTK_STATE_NORMAL &&
142 state <= GTK_STATE_INSENSITIVE);
143 g_return_if_fail (color != NULL);
145 gtk_clutter_get_component (widget, GTK_RC_BASE, state, color);
149 * gtk_clutter_texture_new_from_pixbuf:
150 * @pixbuf: a #GdkPixbuf
154 * Return value: the newly created #ClutterTexture
159 gtk_clutter_texture_new_from_pixbuf (GdkPixbuf *pixbuf)
161 ClutterActor *retval;
164 g_return_val_if_fail (GDK_IS_PIXBUF (pixbuf), NULL);
166 retval = clutter_texture_new ();
169 clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE (retval),
170 gdk_pixbuf_get_pixels (pixbuf),
171 gdk_pixbuf_get_has_alpha (pixbuf),
172 gdk_pixbuf_get_width (pixbuf),
173 gdk_pixbuf_get_height (pixbuf),
174 gdk_pixbuf_get_rowstride (pixbuf),
179 g_warning ("Unable to set the pixbuf: %s", error->message);
180 g_error_free (error);
187 * gtk_clutter_texture_new_from_stock:
188 * @widget: a #GtkWidget
194 * Return value: the newly created #ClutterTexture
199 gtk_clutter_texture_new_from_stock (GtkWidget *widget,
200 const gchar *stock_id,
204 ClutterActor *retval;
206 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
207 g_return_val_if_fail (stock_id != NULL, NULL);
208 g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
210 pixbuf = gtk_widget_render_icon (widget, stock_id, size, NULL);
212 pixbuf = gtk_widget_render_icon (widget,
213 GTK_STOCK_MISSING_IMAGE, size,
216 retval = gtk_clutter_texture_new_from_pixbuf (pixbuf);
217 g_object_unref (pixbuf);
223 * gtk_clutter_texture_new_from_icon_name:
224 * @widget: a #GtkWidget
230 * Return value: the newly created #ClutterTexture
235 gtk_clutter_texture_new_from_icon_name (GtkWidget *widget,
236 const gchar *icon_name,
239 GtkSettings *settings;
240 GtkIconTheme *icon_theme;
244 ClutterActor *retval;
246 g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
247 g_return_val_if_fail (icon_name != NULL, NULL);
248 g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == -1, NULL);
250 if (gtk_widget_has_screen (widget))
254 screen = gtk_widget_get_screen (widget);
255 settings = gtk_settings_get_for_screen (screen);
256 icon_theme = gtk_icon_theme_get_for_screen (screen);
260 settings = gtk_settings_get_default ();
261 icon_theme = gtk_icon_theme_get_default ();
264 if (!gtk_icon_size_lookup_for_settings (settings, size, &width, &height))
266 g_warning ("Invalid icon size");
271 pixbuf = gtk_icon_theme_load_icon (icon_theme,
273 MIN (width, height), 0,
277 g_error_free (error);
278 return gtk_clutter_texture_new_from_stock (widget,
279 GTK_STOCK_MISSING_IMAGE,
283 retval = gtk_clutter_texture_new_from_pixbuf (pixbuf);
284 g_object_unref (pixbuf);