[ease] "Open Door" animation added.



commit b96864149c3c0df16b95db74c699abd6a677d88e
Author: Nate Stedman <natesm gmail com>
Date:   Thu May 20 03:48:05 2010 -0400

    "Open Door" animation added.

 Examples/Transitions.ease/Document.xml |    7 ++++-
 src/libease/SlideActor.vala            |   52 ++++++++++++++++++++++++++++++-
 2 files changed, 56 insertions(+), 3 deletions(-)
---
diff --git a/Examples/Transitions.ease/Document.xml b/Examples/Transitions.ease/Document.xml
index fa764b6..feb57c6 100644
--- a/Examples/Transitions.ease/Document.xml
+++ b/Examples/Transitions.ease/Document.xml
@@ -1,7 +1,12 @@
 <?xml version="1.0" ?>
 <document width="1024" height="768">
 	<slides>
-		<slide transition="Fade" variant="" background_color="#FFFFFFFF" time="1">
+		<slide transition="Fade" variant="" background_color="#222222FF" time="1">
+			<element y="30" align="left" height="200" font_size="36" element_type="text" font_variant="Normal" font_name="Sans" width="964" font_style="Normal" font_weight="900" color="#FFFFFFFF" x="30" ease_name="header" >Lorem Ipsum Dolor</element>
+			<element y="90" align="left" height="768" font_size="16" element_type="text" font_variant="Normal" font_name="Sans" width="964" font_style="Normal" font_weight="500" color="#FFFFFFFF" x="30" ease_name="text" >Sit amet, consectetur adipiscing elit. Maecenas sed odio eget purus laoreet volutpat. Etiam nulla orci, eleifend nec sodales in, tempor cursus urna. Aenean posuere aliquet malesuada. Integer varius placerat massa. Pellentesque enim urna, cursus et molestie et, iaculis vitae libero. Quisque vel metus sed magna lacinia luctus. Suspendisse vel lectus eget diam dapibus condimentum. Aliquam a dolor vel sem rutrum mattis sit amet vitae nisl. Etiam vel sem tortor. Vestibulum varius metus id orci vulputate viverra luctus magna commodo. Duis dignissim sollicitudin leo eget tristique. Maecenas adipiscing neque nec mauris mollis ut ultrices sem porta. Cras vitae massa lectus. Aenean orci lectus, pretium nec sodales eu, aliquam vitae neque. Mauris nibh lectus, porta et vestibulu
 m a, vestibulum a nulla.</element>
+		</slide>
+	
+		<slide transition="Open Door" variant="" background_color="#FFFFFFFF" time="1">
 			<element y="30" align="left" height="200" font_size="36" element_type="text" font_variant="Normal" font_name="Sans" width="964" font_style="Normal" font_weight="900" color="#222222FF" x="30" ease_name="header" >Lorem Ipsum Dolor</element>
 			<element y="90" align="left" height="768" font_size="16" element_type="text" font_variant="Normal" font_name="Sans" width="964" font_style="Normal" font_weight="500" color="#222222FF" x="30" ease_name="text" >Sit amet, consectetur adipiscing elit. Maecenas sed odio eget purus laoreet volutpat. Etiam nulla orci, eleifend nec sodales in, tempor cursus urna. Aenean posuere aliquet malesuada. Integer varius placerat massa. Pellentesque enim urna, cursus et molestie et, iaculis vitae libero. Quisque vel metus sed magna lacinia luctus. Suspendisse vel lectus eget diam dapibus condimentum. Aliquam a dolor vel sem rutrum mattis sit amet vitae nisl. Etiam vel sem tortor. Vestibulum varius metus id orci vulputate viverra luctus magna commodo. Duis dignissim sollicitudin leo eget tristique. Maecenas adipiscing neque nec mauris mollis ut ultrices sem porta. Cras vitae massa lectus. Aenean orci lectus, pretium nec sodales eu, aliquam vitae neque. Mauris nibh lectus, porta et vestibulu
 m a, vestibulum a nulla.</element>
 		</slide>
diff --git a/src/libease/SlideActor.vala b/src/libease/SlideActor.vala
index 60e0361..c9f07a6 100644
--- a/src/libease/SlideActor.vala
+++ b/src/libease/SlideActor.vala
@@ -59,7 +59,9 @@ public class Ease.SlideActor : Clutter.Group
 		
 	public const float FLIP_DEPTH = -400;
 	public const float ZOOM_OUT_SCALE = 0.75f;
-	private const float OPEN_DEPTH = -2000;
+	private const float OPEN_DEPTH = -3000;
+	private const float OPEN_MOVE = 0.15f;
+	private const float OPEN_TIME = 0.8f;
 	
 	public SlideActor.from_slide(Document document, Slide s, bool clip,
 	                              ActorContext ctx)
@@ -273,14 +275,60 @@ public class Ease.SlideActor : Clutter.Group
 				break;
 				
 			case "Open Door":
+			{
 				// zoom the new slide in
 				new_slide.depth = OPEN_DEPTH;
 				new_slide.animate(Clutter.AnimationMode.EASE_OUT_SINE,
 				                  length, "depth", 0);
 				
-				animate(Clutter.AnimationMode.LINEAR, length / 2, "opacity", 0);
+				animate(Clutter.AnimationMode.LINEAR, length, "opacity", 0);
+				reparent(stack_container);
+				x = slide.parent.width;
+				
+				// create left and right half clone actors
+				float width = slide.parent.width / 2f;
+				Clutter.Clone left = new Clutter.Clone(this),
+				              right = new Clutter.Clone(this);
+				              
+				left.set_clip(0, 0, width, slide.parent.height);
+				right.set_clip(width, 0, width, slide.parent.height);
+				
+				// add the left and right actors
+				stack_container.add_actor(left);
+				stack_container.add_actor(right);
+				
+				// move the left and right sides outwards
+				left.animate(Clutter.AnimationMode.EASE_IN_OUT_SINE,
+				             length / 2, "x", left.x - width * OPEN_MOVE);
+				
+				right.animate(Clutter.AnimationMode.EASE_IN_OUT_SINE,
+				              length / 2, "x", right.x + width * OPEN_MOVE);
+				
+				// animate the angles of the left and right sides
+				time1 = new Clutter.Timeline((int)(OPEN_TIME * length));
+				animation_alpha = new Clutter.Alpha.full(time1,
+				                            Clutter.AnimationMode.EASE_IN_SINE);
+				
+				time1.new_frame.connect((m) => {
+					left.set_rotation(Clutter.RotateAxis.Y_AXIS,
+					                  180 * animation_alpha.get_alpha(),
+					                  0, 0, 0);
+					                  
+					right.set_rotation(Clutter.RotateAxis.Y_AXIS,
+					                   -180 * animation_alpha.get_alpha(),
+					                   width * 2, 0, 0);
+				});
+				
+				// clean up
+				time1.completed.connect(() => {
+					stack_container.remove_actor(left);
+					stack_container.remove_actor(right);
+				});
+				
+				time1.start();
 				
 				break;
+			}
 			
 			case "Flip":
 				new_slide.opacity = 0;				



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]