st-texture-cache: Use ClutterActor, not ClutterGroup
ClutterGroup is deprecated, and since ClutterActor is concrete, we can use that now instead. https://bugzilla.gnome.org/show_bug.cgi?id=670034
This commit is contained in:
parent
1c0c42e8e7
commit
740388c778
@ -106,38 +106,47 @@ const AnimatedIcon = new Lang.Class({
|
|||||||
_init: function(name, size) {
|
_init: function(name, size) {
|
||||||
this.actor = new St.Bin({ visible: false });
|
this.actor = new St.Bin({ visible: false });
|
||||||
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
this.actor.connect('destroy', Lang.bind(this, this._onDestroy));
|
||||||
this.actor.connect('notify::visible', Lang.bind(this, function() {
|
this.actor.connect('notify::visible', Lang.bind(this, this._onVisibleNotify));
|
||||||
if (this.actor.visible) {
|
|
||||||
this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
|
|
||||||
} else {
|
|
||||||
if (this._timeoutId)
|
|
||||||
Mainloop.source_remove(this._timeoutId);
|
|
||||||
this._timeoutId = 0;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
|
|
||||||
this._timeoutId = 0;
|
this._timeoutId = 0;
|
||||||
this._i = 0;
|
this._frame = 0;
|
||||||
this._animations = St.TextureCache.get_default().load_sliced_image (global.datadir + '/theme/' + name, size, size);
|
this._animations = St.TextureCache.get_default().load_sliced_image (global.datadir + '/theme/' + name, size, size);
|
||||||
this.actor.set_child(this._animations);
|
this.actor.set_child(this._animations);
|
||||||
},
|
},
|
||||||
|
|
||||||
_update: function() {
|
_disconnectTimeout: function() {
|
||||||
this._animations.hide_all();
|
if (this._timeoutId > 0) {
|
||||||
this._animations.show();
|
Mainloop.source_remove(this._timeoutId);
|
||||||
if (this._i && this._i < this._animations.get_n_children())
|
this._timeoutId = 0;
|
||||||
this._animations.get_nth_child(this._i++).show();
|
|
||||||
else {
|
|
||||||
this._i = 1;
|
|
||||||
if (this._animations.get_n_children())
|
|
||||||
this._animations.get_nth_child(0).show();
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_onVisibleNotify: function() {
|
||||||
|
if (this.actor.visible)
|
||||||
|
this._timeoutId = Mainloop.timeout_add(ANIMATED_ICON_UPDATE_TIMEOUT, Lang.bind(this, this._update));
|
||||||
|
else
|
||||||
|
this._disconnectTimeout();
|
||||||
|
},
|
||||||
|
|
||||||
|
_showFrame: function(frame) {
|
||||||
|
let oldFrameActor = this._animations.get_child_at_index(this._frame);
|
||||||
|
if (oldFrameActor)
|
||||||
|
oldFrameActor.hide();
|
||||||
|
|
||||||
|
this._frame = (frame % this._animations.get_n_children());
|
||||||
|
|
||||||
|
let newFrameActor = this._animations.get_child_at_index(this._frame);
|
||||||
|
if (newFrameActor)
|
||||||
|
newFrameActor.show();
|
||||||
|
},
|
||||||
|
|
||||||
|
_update: function() {
|
||||||
|
this._showFrame(this._frame + 1);
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_onDestroy: function() {
|
_onDestroy: function() {
|
||||||
if (this._timeoutId)
|
this._disconnectTimeout();
|
||||||
Mainloop.source_remove(this._timeoutId);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1162,7 +1162,7 @@ load_from_pixbuf (GdkPixbuf *pixbuf)
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
gchar *path;
|
gchar *path;
|
||||||
gint grid_width, grid_height;
|
gint grid_width, grid_height;
|
||||||
ClutterGroup *group;
|
ClutterActor *actor;
|
||||||
} AsyncImageData;
|
} AsyncImageData;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1170,7 +1170,7 @@ on_data_destroy (gpointer data)
|
|||||||
{
|
{
|
||||||
AsyncImageData *d = (AsyncImageData *)data;
|
AsyncImageData *d = (AsyncImageData *)data;
|
||||||
g_free (d->path);
|
g_free (d->path);
|
||||||
g_object_unref (d->group);
|
g_object_unref (d->actor);
|
||||||
g_free (d);
|
g_free (d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1190,7 +1190,7 @@ on_sliced_image_loaded (GObject *source_object,
|
|||||||
{
|
{
|
||||||
ClutterActor *actor = load_from_pixbuf (GDK_PIXBUF (list->data));
|
ClutterActor *actor = load_from_pixbuf (GDK_PIXBUF (list->data));
|
||||||
clutter_actor_hide (actor);
|
clutter_actor_hide (actor);
|
||||||
clutter_container_add_actor (CLUTTER_CONTAINER (data->group), actor);
|
clutter_actor_add_child (data->actor, actor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1252,9 +1252,9 @@ load_sliced_image (GSimpleAsyncResult *result,
|
|||||||
* note that the dimensions of the image loaded from @path
|
* note that the dimensions of the image loaded from @path
|
||||||
* should be a multiple of the specified grid dimensions.
|
* should be a multiple of the specified grid dimensions.
|
||||||
*
|
*
|
||||||
* Returns: (transfer none): A new #ClutterGroup
|
* Returns: (transfer none): A new #ClutterActor
|
||||||
*/
|
*/
|
||||||
ClutterGroup *
|
ClutterActor *
|
||||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||||
const gchar *path,
|
const gchar *path,
|
||||||
gint grid_width,
|
gint grid_width,
|
||||||
@ -1262,14 +1262,14 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
{
|
{
|
||||||
AsyncImageData *data;
|
AsyncImageData *data;
|
||||||
GSimpleAsyncResult *result;
|
GSimpleAsyncResult *result;
|
||||||
ClutterGroup *group = CLUTTER_GROUP (clutter_group_new ());
|
ClutterActor *actor = clutter_actor_new ();
|
||||||
|
|
||||||
data = g_new0 (AsyncImageData, 1);
|
data = g_new0 (AsyncImageData, 1);
|
||||||
data->grid_width = grid_width;
|
data->grid_width = grid_width;
|
||||||
data->grid_height = grid_height;
|
data->grid_height = grid_height;
|
||||||
data->path = g_strdup (path);
|
data->path = g_strdup (path);
|
||||||
data->group = group;
|
data->actor = actor;
|
||||||
g_object_ref (G_OBJECT (group));
|
g_object_ref (G_OBJECT (actor));
|
||||||
|
|
||||||
result = g_simple_async_result_new (G_OBJECT (cache), on_sliced_image_loaded, data, st_texture_cache_load_sliced_image);
|
result = g_simple_async_result_new (G_OBJECT (cache), on_sliced_image_loaded, data, st_texture_cache_load_sliced_image);
|
||||||
|
|
||||||
@ -1278,7 +1278,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache,
|
|||||||
|
|
||||||
g_object_unref (result);
|
g_object_unref (result);
|
||||||
|
|
||||||
return group;
|
return actor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,7 +68,7 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST;
|
|||||||
|
|
||||||
StTextureCache* st_texture_cache_get_default (void);
|
StTextureCache* st_texture_cache_get_default (void);
|
||||||
|
|
||||||
ClutterGroup *
|
ClutterActor *
|
||||||
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
st_texture_cache_load_sliced_image (StTextureCache *cache,
|
||||||
const gchar *path,
|
const gchar *path,
|
||||||
gint grid_width,
|
gint grid_width,
|
||||||
|
Loading…
Reference in New Issue
Block a user