The following example demonstrates the use of a clutter.BehaviourPath with a simple custom alpha callback.
This simply moves the rectangle from the top-left to the bottom-right of the canvas at constant speed:
File: main.py
import sys
import clutter
# 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.
def on_alpha(alpha, data):
# Get the position in the timeline,
# so we can base our value upon it
timeline = alpha.get_timeline()
return timeline.get_progress()
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(40, 40)
rect.set_position(10, 10)
stage.add(rect)
rect.show()
# Show the stage
stage.connect('destroy', clutter.main_quit)
stage.show()
timeline = clutter.Timeline(5000) # milliseconds
timeline.set_loop(True)
timeline.start()
# Instead of our custom callback,
# we could use a standard callback. For instance, CLUTTER_ALPHA_SINE_INC.
alpha = clutter.Alpha(timeline)
alpha.set_func(on_alpha, None)
behaviour = clutter.BehaviourPath(alpha, knots=((10, 10), (150, 150)))
behaviour.apply(rect)
# Start the main loop, so we can respond to events
clutter.main()
return 0
if __name__ == '__main__':
sys.exit(main())