The following example demonstrates the use of an animation to achieve a fade and a movement on the same actor, changing a rectangle's opacity while it is moved along a straight line:
File: main.c
#include <clutter/clutter.h>
#include <stdlib.h>
ClutterActor *rect = NULL;
/* This must return a value between 0 and 1.0
*
* This will be called as many times per seconds as specified in our call to clutter_timeline_new().
*
*/
gdouble
on_alpha (ClutterAlpha *alpha, gpointer data)
{
/* Get the position in the timeline,
* so we can base our value upon it:
*/
ClutterTimeline *timeline = clutter_alpha_get_timeline (alpha);
return clutter_timeline_get_progress (timeline);
}
int main(int argc, char *argv[])
{
ClutterColor stage_color = { 0x00, 0x00, 0x00, 0xff };
ClutterColor rect_color = { 0xff, 0xff, 0xff, 0x99 };
clutter_init (&argc, &argv);
/* Get the stage and set its size and color: */
ClutterActor *stage = clutter_stage_get_default ();
clutter_actor_set_size (stage, 200, 200);
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
/* Add a rectangle to the stage: */
rect = clutter_rectangle_new_with_color (&rect_color);
clutter_actor_set_size (rect, 40, 40);
clutter_actor_set_position (rect, 10, 10);
clutter_container_add_actor (CLUTTER_CONTAINER (stage), rect);
clutter_actor_show (rect);
/* Show the stage: */
clutter_actor_show (stage);
ClutterTimeline *timeline = clutter_timeline_new(5000 /* milliseconds */);
clutter_timeline_set_loop(timeline, TRUE);
clutter_timeline_start(timeline);
/* Create a clutter alpha for the animation */
ClutterAlpha* alpha = clutter_alpha_new_with_func (timeline, &on_alpha, NULL, NULL);
/* Create an animation to change the properties */
ClutterAnimation* animation =
clutter_actor_animate_with_alpha (rect, alpha,
"x", 150.0,
"y", 150.0,
"opacity", 0,
NULL);
g_object_unref (animation);
g_object_unref (timeline);
/* Start the main loop, so we can respond to events: */
clutter_main ();
return EXIT_SUCCESS;
}