|  |  |  | Clutter 1.0.0 Reference Manual |  | 
|---|
Using behaviours for simple animations of a single actor may
    be too complicated, in terms of memory management and bookkeeping
    of the object instances. For this reason, Clutter also provides a
    simple animation API for implicit animations using properties of
    an actor: clutter_actor_animate().
The clutter_actor_animate() family of functions will create
    and use an implicit ClutterAnimation instance, which will then
    handle the animation of one or more ClutterActor properties between
    a range of values.
Example 11. Using clutter_actor_animate()
The following example demonstrates how to use the
      clutter_actor_animate() method to tween an actor between the current
      position and a new set of coordinates. The animation takes 200
      milliseconds to complete and uses a linear progression.
  clutter_actor_animate (actor, CLUTTER_LINEAR, 200
                         "x", 200,
                         "y", 200,
                         NULL);
      
The clutter_actor_animate() method returns a ClutterAnimation
    instance that can be used to start, stop and modify the animation
    while it's running. The "completed" signal will
    be emitted when the animation has been completed.
When the animation is complete it will be automatically unreferenced, and disposed if nothing else is holding a reference on it.
Example 12. Animating inside an event handler
The following example demonstrates how to animate an actor inside the signal handler for a button press event. If the user presses the button on a new position while the animation is running, the animation will be restarted with the new final values updated.
  static gboolean
  on_button_press (ClutterActor *actor,
                   ClutterEvent *event,
                   gpointer      user_data)
  {
    gfloat event_x, event_y;
    clutter_event_get_coords (event, &event_x, &event_y);
    clutter_actor_animate (actor, CLUTTER_EASE_SINE_OUT, 500,
                           "x", event_x,
                           "y", event_y,
                           NULL);
    return TRUE;
  }
      
Calling clutter_actor_animate() multiple times on an
    actor which is being animated will cause the animation to be updated
    with the new values.
If you need to chain up multiple animations created using
    clutter_actor_animate() you should connect to the
    "completed" signal using g_signal_connect_after()
    to have the guarantee that the current ClutterAnimation has been
    detached from the actor. The documentation for clutter_actor_animate()
    has further examples.