StTextureCache: adapt to MetaWindow changing icon prop type

Mutter change is
https://git.gnome.org/browse/mutter/commit/?id=af7f51b992b20da543312fa9fdf1dcef39704b37

https://bugzilla.gnome.org/show_bug.cgi?id=742824
This commit is contained in:
Rui Matos 2015-01-12 21:21:39 +01:00
parent d8ca374a06
commit af889168f0
4 changed files with 28 additions and 21 deletions

View File

@ -100,7 +100,7 @@ const CtrlAltTabManager = new Lang.Class({
if (app) if (app)
icon = app.create_icon_texture(POPUP_APPICON_SIZE); icon = app.create_icon_texture(POPUP_APPICON_SIZE);
else else
icon = textureCache.bind_pixbuf_property(windows[i], 'icon'); icon = textureCache.bind_cairo_surface_property(windows[i], 'icon');
} }
items.push({ name: windows[i].title, items.push({ name: windows[i].title,

View File

@ -189,9 +189,9 @@ window_backed_app_get_icon (ShellApp *app,
} }
window = window_backed_app_get_window (app); window = window_backed_app_get_window (app);
actor = st_texture_cache_bind_pixbuf_property (st_texture_cache_get_default (), actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (),
G_OBJECT (window), G_OBJECT (window),
"icon"); "icon");
g_object_set (actor, "width", (float) size, "height", (float) size, NULL); g_object_set (actor, "width", (float) size, "height", (float) size, NULL);
return actor; return actor;
} }

View File

@ -628,18 +628,26 @@ static void
st_texture_cache_reset_texture (StTextureCachePropertyBind *bind, st_texture_cache_reset_texture (StTextureCachePropertyBind *bind,
const char *propname) const char *propname)
{ {
GdkPixbuf *pixbuf; cairo_surface_t *surface;
CoglTexture *texdata; CoglTexture *texdata;
ClutterBackend *backend = clutter_get_default_backend ();
CoglContext *ctx = clutter_backend_get_cogl_context (backend);
g_object_get (bind->source, propname, &pixbuf, NULL); g_object_get (bind->source, propname, &surface, NULL);
g_return_if_fail (pixbuf == NULL || GDK_IS_PIXBUF (pixbuf)); if (surface != NULL &&
cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE &&
if (pixbuf != NULL) (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32 ||
cairo_image_surface_get_format (surface) == CAIRO_FORMAT_RGB24))
{ {
texdata = pixbuf_to_cogl_texture (pixbuf); texdata = COGL_TEXTURE (cogl_texture_2d_new_from_data (ctx,
g_object_unref (pixbuf); cairo_image_surface_get_width (surface),
cairo_image_surface_get_height (surface),
cairo_image_surface_get_format (surface) == CAIRO_FORMAT_ARGB32 ?
COGL_PIXEL_FORMAT_BGRA_8888 : COGL_PIXEL_FORMAT_BGR_888,
cairo_image_surface_get_stride (surface),
cairo_image_surface_get_data (surface),
NULL));
clutter_texture_set_cogl_texture (bind->texture, texdata); clutter_texture_set_cogl_texture (bind->texture, texdata);
cogl_object_unref (texdata); cogl_object_unref (texdata);
@ -677,12 +685,12 @@ st_texture_cache_free_bind (gpointer data)
} }
/** /**
* st_texture_cache_bind_pixbuf_property: * st_texture_cache_bind_cairo_surface_property:
* @cache: * @cache:
* @object: A #GObject with a property @property_name of type #GdkPixbuf * @object: A #GObject with a property @property_name of type #GdkPixbuf
* @property_name: Name of a property * @property_name: Name of a property
* *
* Create a #ClutterTexture which tracks the #GdkPixbuf value of a GObject property * Create a #ClutterTexture which tracks the #cairo_surface_t value of a GObject property
* named by @property_name. Unlike other methods in StTextureCache, the underlying * named by @property_name. Unlike other methods in StTextureCache, the underlying
* #CoglTexture is not shared by default with other invocations to this method. * #CoglTexture is not shared by default with other invocations to this method.
* *
@ -692,9 +700,9 @@ st_texture_cache_free_bind (gpointer data)
* Return value: (transfer none): A new #ClutterActor * Return value: (transfer none): A new #ClutterActor
*/ */
ClutterActor * ClutterActor *
st_texture_cache_bind_pixbuf_property (StTextureCache *cache, st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
GObject *object, GObject *object,
const char *property_name) const char *property_name)
{ {
ClutterTexture *texture; ClutterTexture *texture;
gchar *notify_key; gchar *notify_key;

View File

@ -28,7 +28,6 @@
#include <gio/gio.h> #include <gio/gio.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <clutter/clutter.h> #include <clutter/clutter.h>
#include <st/st-types.h> #include <st/st-types.h>
@ -77,9 +76,9 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
GFunc load_callback, GFunc load_callback,
gpointer user_data); gpointer user_data);
ClutterActor *st_texture_cache_bind_pixbuf_property (StTextureCache *cache, ClutterActor *st_texture_cache_bind_cairo_surface_property (StTextureCache *cache,
GObject *object, GObject *object,
const char *property_name); const char *property_name);
ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache, ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,
StThemeNode *theme_node, StThemeNode *theme_node,