[gnome-boxes/gnome-3-8] util: Use explicit transition for fading actors
- From: Zeeshan Ali Khattak <zeeshanak src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes/gnome-3-8] util: Use explicit transition for fading actors
- Date: Tue, 28 May 2013 09:06:53 +0000 (UTC)
commit 6a589b27a7d7f6966a0591b49c999afece4d33ed
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date: Tue May 14 18:02:46 2013 +0300
util: Use explicit transition for fading actors
As strongly suggested by ebassi on IRC:
<ebassi> [19:34:50] zeenix: and I would *strongly* suggest you use a
proper ClutterTransition in this case, instead of relying on implicit
animations, since you're controlling the start and end states, and you
want to get notifications
Besides being the right thing to do here, this also works around the issue of
Boxes unable to change the actor visibility at the end of transition and
avoid the warning on console about transition being null against clutter
1.16 in certain cases.
https://bugzilla.gnome.org/show_bug.cgi?id=700306
src/util-app.vala | 21 ++++++++++++++-------
1 files changed, 14 insertions(+), 7 deletions(-)
---
diff --git a/src/util-app.vala b/src/util-app.vala
index 94a5c86..0370b0c 100644
--- a/src/util-app.vala
+++ b/src/util-app.vala
@@ -109,20 +109,27 @@ namespace Boxes {
actor.set_easing_duration (old_duration);
}
+ private uint transition_index = 0;
+
public void fade_actor (Clutter.Actor actor, uint opacity) {
if (opacity != 0)
actor.show ();
+
// Don't react to use input while fading out
actor.set_reactive (opacity == 255);
- actor.save_easing_state ();
- actor.set_easing_mode (Clutter.AnimationMode.EASE_OUT_QUAD);
- actor.set_easing_duration (App.app.duration);
- actor.opacity = opacity;
- var t = actor.get_transition ("opacity");
- t.completed.connect ( () => {
+
+ var transition = new Clutter.PropertyTransition ("opacity");
+ var value = GLib.Value (typeof (uint));
+ value.set_uint (opacity);
+ transition.set_to_value (value);
+ transition.set_duration (App.app.duration);
+ transition.set_progress_mode (Clutter.AnimationMode.EASE_OUT_QUAD);
+ var name = "opacity%u".printf (transition_index++);
+ transition.completed.connect (() => {
+ actor.remove_transition (name);
actor.visible = actor.opacity != 0;
});
- actor.restore_easing_state ();
+ actor.add_transition (name, transition);
}
public delegate void ActorFunc (Clutter.Actor actor);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]