Hello,
I am trying to get right how animations should be done in Clutter 1.16, but not everything is clear right now. So, can you help me solve the puzzle?
BTW, I am using python.
Classes I should care of are: Timeline, value intervals, Animatable, (Property|Keyframe)?Transition and TransitionGroup. ClutterAnimation should be left alone as deprecated.
I'll try to schematize what I understand and what not.
* All the classes above are not actors. Animatable is an interface, Transition is an abstract class.
* A Timeline is just a class that will generate ticks for a certain duration. This is where easing and various animation modes are set, or in general where event timings are managed.
* Value intervals are helpers that allows to interpolate between two given values (with a custom function if necessary).
* Transitions are timelines with a transition in them.
* Property transitions are transitions that refers to a single property of an actor.
* Keyframe transitions extend property transitions to introduce keyframes, so you can place different keyframes in [0,1] distributed not necessarily evenly and the class will interpolate them as needed.
* Transition group is pretty clear.
Things I do not get:
* ClutterAnimation is deprecated, but ClutterAnimatable is not. But in the manual it say that "ClutterAnimatable is an interface that allows a GObject class to control how a ClutterAnimation will animate a property".
I miss to understand how I should use Animatable without Animation...
Pheraps is the Transition class that somewhat replaces Animation?
Because, Animatable are used in ClutterTransition and its children, but...
* ...I fail to understand how ClutterTransition is used.
I can't see where on the documentation it says that Transition is an abstract class, but in Python when instancing it, it gives me:
TypeError: cannot create instance of abstract (non-instantiable) type `ClutterTransition'
So, I tried subclassing the transition like this:
class PosTrans(clu.Transition):
def __init__(self):
super(PosTrans, self).__init__()
def attached(self, animatable):
print("Attached to object", animatable)
def detached(self, animatable):
print("Detached from object", animatable)
def compute_value(self, animatable, interval, progress):
print("Progress", progress)
and use it like this:
transition = PosTrans()
transition.set_from(0)
transition.set_to(50)
transition.set_duration(2000)
transition.set_animatable(actor) # a simple Actor
transition.start()
But none of the above methods is called (nothing printed).
* As a marginal issue, I do not understand why in ClutterAnimatable there is a get_initial_state, but not a get_final_state, and vice-versa with the set method. I can't understand how those methods are used.
* So, I tried using PropertyTransition, like this:
transition = clu.PropertyTransition.new('position')
transition.set_animatable(actor)
transition.set_duration(1000)
transition.set_from(0)
transition.set_to(100)
transition.start()
but, again, nothing is happening.
I do not know where to go from here.
Can someone please help me?
Thanks for your time!
~Ale