]> git.mjollnir.org Git - moodle.git/blob
e5b0b0edce95c68cc77fe23ff4090a58f5e1c599
[moodle.git] /
1 package flare.animate.interpolate
2 {
3         import flash.geom.Rectangle;
4         
5         /**
6          * Interpolator for <code>flash.geom.Rectangle</code> values.
7          */
8         public class RectangleInterpolator extends Interpolator
9         {
10                 private var _startX:Number, _startY:Number;
11                 private var _startW:Number, _startH:Number;
12                 private var _rangeX:Number, _rangeY:Number;
13                 private var _rangeW:Number, _rangeH:Number;
14
15                 private var _cur:Rectangle;
16                 
17                 /**
18                  * Creates a new RectangleInterpolator.
19                  * @param target the object whose property is being interpolated
20                  * @param property the property to interpolate
21                  * @param start the starting rectangle value to interpolate from
22                  * @param end the target re3ctangle value to interpolate to
23                  */
24                 public function RectangleInterpolator(target:Object, property:String,
25                                                       start:Object, end:Object)
26                 {
27                         super(target, property, start, end);
28                 }
29                 
30                 /**
31                  * Initializes this interpolator.
32                  * @param start the starting value of the interpolation
33                  * @param end the target value of the interpolation
34                  */
35                 protected override function init(start:Object, end:Object) : void
36                 {
37                         var e:Rectangle = Rectangle(end), s:Rectangle = Rectangle(start);
38                         if (_cur == null || _cur == s || _cur == e)
39                                 _cur = e.clone();
40                         
41                         _startX = s.x;
42                         _startY = s.y;
43                         _startW = s.width;
44                         _startH = s.height;
45                         _rangeX = e.x - _startX;
46                         _rangeY = e.y - _startY;
47                         _rangeW = e.width - _startW;
48                         _rangeH = e.height - _startH;
49                 }
50                 
51                 /**
52                  * Calculate and set an interpolated property value.
53                  * @param f the interpolation fraction (typically between 0 and 1)
54                  */
55                 public override function interpolate(f:Number) : void
56                 {
57                         _cur.x      = _startX + f * _rangeX;
58                         _cur.y      = _startY + f * _rangeY;
59                         _cur.width  = _startW + f * _rangeW;
60                         _cur.height = _startH + f * _rangeH;
61                         _prop.setValue(_target, _cur);
62                 }
63                 
64         } // end of class RectangleInterpolator
65 }