The following example demonstrates the use of a timeline to rotate a rectangle around the x axis while changing its color:
File: main.py
import sys import clutter rotation_angle = 0 color_change_count = 0 def on_timeline_new_frame(timeline, frame_num, rect): global rotation_angle rotation_angle += 1 if rotation_angle >= 360: rotation_angle = 0 # Rotate the rectangle clockwise around the z axis, around it's # top-left corner rect.set_rotation(clutter.X_AXIS, rotation_angle, 0, 0, 0) # Change the color # (This is a silly example, making the rectangle flash) global color_change_count color_change_count += 1 if color_change_count > 100: color_change_count = 0 if color_change_count == 0: rect_color = clutter.Color(255, 255, 255, 153) rect.set_color(rect_color) elif color_change_count == 50: rect_color = clutter.Color(16, 64, 144, 255) rect.set_color(rect_color) def on_timeline_marker_reached(timeline, marker_name, frame_num): print "Reached marker %s at frame %d." % (marker_name, frame_num) def main(): stage_color = clutter.Color(0, 0, 0, 255) rect_color = clutter.Color(255, 255, 255, 153) # Get the stage and set its size and color stage = clutter.Stage() stage.set_size(200, 200) stage.set_color(stage_color) # Add a rectangle to the stage rect = clutter.Rectangle(rect_color) rect.set_size(70, 70) rect.set_position(50, 100) stage.add(rect) rect.show() # Show the stage stage.connect('destroy', clutter.main_quit) stage.show() timeline = clutter.Timeline(5000) # milliseconds timeline.add_marker_at_time("clutter-tutorial", 2000) # milliseconds timeline.connect('new-frame', on_timeline_new_frame, rect) timeline.connect('marker-reached', on_timeline_marker_reached) timeline.set_loop(True) timeline.start(); # Start the main loop, so we can respond to events clutter.main() return 0 if __name__ == '__main__': sys.exit(main())