From 740388c7780ff4f647def95eade3845134342955 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Tue, 14 Feb 2012 11:33:10 -0500 Subject: [PATCH] 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 --- js/ui/panel.js | 51 +++++++++++++++++++++++---------------- src/st/st-texture-cache.c | 18 +++++++------- src/st/st-texture-cache.h | 2 +- 3 files changed, 40 insertions(+), 31 deletions(-) diff --git a/js/ui/panel.js b/js/ui/panel.js index 088719a44..c4cf09f62 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -106,38 +106,47 @@ const AnimatedIcon = new Lang.Class({ _init: function(name, size) { this.actor = new St.Bin({ visible: false }); this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); - this.actor.connect('notify::visible', Lang.bind(this, function() { - 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.actor.connect('notify::visible', Lang.bind(this, this._onVisibleNotify)); 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.actor.set_child(this._animations); }, - _update: function() { - this._animations.hide_all(); - this._animations.show(); - if (this._i && this._i < this._animations.get_n_children()) - 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(); + _disconnectTimeout: function() { + if (this._timeoutId > 0) { + Mainloop.source_remove(this._timeoutId); + this._timeoutId = 0; } + }, + + _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; }, _onDestroy: function() { - if (this._timeoutId) - Mainloop.source_remove(this._timeoutId); + this._disconnectTimeout(); } }); diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c index 813c0fe4e..0b5a920b8 100644 --- a/src/st/st-texture-cache.c +++ b/src/st/st-texture-cache.c @@ -1162,7 +1162,7 @@ load_from_pixbuf (GdkPixbuf *pixbuf) typedef struct { gchar *path; gint grid_width, grid_height; - ClutterGroup *group; + ClutterActor *actor; } AsyncImageData; static void @@ -1170,7 +1170,7 @@ on_data_destroy (gpointer data) { AsyncImageData *d = (AsyncImageData *)data; g_free (d->path); - g_object_unref (d->group); + g_object_unref (d->actor); g_free (d); } @@ -1190,7 +1190,7 @@ on_sliced_image_loaded (GObject *source_object, { ClutterActor *actor = load_from_pixbuf (GDK_PIXBUF (list->data)); 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 * 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, const gchar *path, gint grid_width, @@ -1262,14 +1262,14 @@ st_texture_cache_load_sliced_image (StTextureCache *cache, { AsyncImageData *data; GSimpleAsyncResult *result; - ClutterGroup *group = CLUTTER_GROUP (clutter_group_new ()); + ClutterActor *actor = clutter_actor_new (); data = g_new0 (AsyncImageData, 1); data->grid_width = grid_width; data->grid_height = grid_height; data->path = g_strdup (path); - data->group = group; - g_object_ref (G_OBJECT (group)); + data->actor = actor; + 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); @@ -1278,7 +1278,7 @@ st_texture_cache_load_sliced_image (StTextureCache *cache, g_object_unref (result); - return group; + return actor; } /** diff --git a/src/st/st-texture-cache.h b/src/st/st-texture-cache.h index 5f1e70193..7275703af 100644 --- a/src/st/st-texture-cache.h +++ b/src/st/st-texture-cache.h @@ -68,7 +68,7 @@ GType st_texture_cache_get_type (void) G_GNUC_CONST; StTextureCache* st_texture_cache_get_default (void); -ClutterGroup * +ClutterActor * st_texture_cache_load_sliced_image (StTextureCache *cache, const gchar *path, gint grid_width,