Clutter Animation
#!/usr/bin/env python # # [SNIPPET_NAME: Clutter Animation] # [SNIPPET_CATEGORIES: Clutter] # [SNIPPET_DESCRIPTION: Shows clutter animations and how to respond to the completion of animations] # [SNIPPET_AUTHOR: Andy Breiner <breinera@gmail.com>] # [SNIPPET_LICENSE: GPL] # [SNIPPET_DOCS: http://clutter-project.org/docs/pyclutter/stable/] import clutter class ClutterAnimation: def __init__ (self): # Create the stage, set the background to white, # set the size to 400,400, set the title, # finally when the user user clicks the x actually close the # program self.stage = clutter.Stage() self.stage.set_color(clutter.color_from_string('White')) self.stage.set_size(400, 400) self.stage.set_title('Clutter Animation') self.stage.connect("destroy",clutter.main_quit) # Setup the image, set the anchor (by default, items are animated from # the top left, by changing the anchor we animate from a # different spot), next it sets the position of the image to be in # the middle of the stage, and finally add it to the stage self.image = clutter.texture_new_from_file("./jono.png") self.image.set_anchor_point(self.image.get_width()/2, self.image.get_height()/2) self.image.set_position(self.stage.get_width()/2, self.stage.get_height()/2) self.stage.add(self.image) # Create label and set its properties. label = clutter.Text() label.set_font_name('Mono 32') label.set_text("Jono") label.set_color(clutter.color_from_string("#000000DD")) label.set_anchor_point(label.get_width()/2, label.get_height()/2) label.set_position(0, 100) self.stage.add(label) # This creates an animation # clutter.AnimationMode sets how to animate it # clutter.LINEAR makes it be at the same speed throughout the # animation, the 5000 is the duration # finally we rotate along the y axis, z axis, and x-axis lanimation = label.animate(clutter.AnimationMode(clutter.EASE_OUT_BOUNCE), 3000, "x", self.stage.get_height() / 2.0) # Tells the computer what to do when the animation is done lanimation.connect("completed", self.next_animation) #show the stage and start clutter self.stage.show_all() clutter.main() def next_animation(self, data=None): # for this animation we update the y value so it looks like it # bounces ianimation = self.image.animate(clutter.AnimationMode(clutter.LINEAR), 5000, "rotation-angle-y", 500.0) # Run program. if __name__ == "__main__": main = ClutterAnimation()